一、消息队列概述
消息队列
应用场景
- • MQ消息通道:异步解耦、削峰填谷、发布订阅、高可用
- • EventBridge数据总线
- • 事件目标:消费事件消息
- • 事件集:存储接收到的事件消息,根据事件规则将消息路由到事件目标
- • 事件源:将云服务、自定义应用、SaaS应用等应用程序产生的事件消息发布到事件集
- • Data Platfrom 数据流平台
- • 提供批/流数据处理能力
- • 各类组件提供各类Connect
- • 提供Streaming/Function能力
- • 根据数据schema灵活的进行数据预处理能力
二、Kafka详解
Kafka架构介绍
Zookeeper
- • 选举机制:Paxos机制
- • 提供一致性:写入强一致性、读取会话一致性
- • 提供可用性:一半以上节点存活即可读写
- • 提供功能:watch机制、持久/临时节点能力
Borker
- • 若干个Broker节点组成Kafka集群
- • Broker作为消息的接受模块,使用React网络模型进行消息数据的接受
- • Broker作为消息的持久化模块,进行消息的副本复制以及持久化
- • Broker作为高可用模块,通过副本间的Failover进行高可用保证
Controller选举
- • Broker启动会尝试去zk中注册controller节点
- • 注册上controller节点的broker即为controller
- • 其余broker会watch controller节点,节点出现异常进行重新注册
Controller的作用
- • Broker重启/宕机时,负责副本的Failover操作
- • Topic创建/删除时,负责Topic meta信息广播
- • 集群扩缩容时,进行状态控制
- • Partition/Replica 状态机维护
Coordinator
- • 负责topic-partition与consumer的负载均衡
- • 根据不同的场景提供不同的分配策略
Kafka高可用
kafka副本ISR机制
- • AR:已经分配的所有副本
- • OSR:很久没有同步数据的副本
- • ISR:一直在同步数据的副本
kafka写入Ack机制
- • Ack=1:leader副本写入成功,priducer即认为写成功
- • Ack=0:producer发送后即为成功
- • Ack=-1:ISR中所有的副本都成功,producer才认为写成功
kafka副本同步
- • LEO:日志最末尾的数据
- • HW:ISR中最小的LEO作为HW,HW的消息为Consumer可见的消息
kafka副本选举
- • Clean选举:优先选取lsr中的副本为leader,如果lsr中无可用副本,则partition不可用
- • Unclean选举:优先选取lsr中的副本为leader,如果lsr中无可用副本,则选择其他存活副本