这是我参与「第四届青训营 」笔记创作活动的的第12天
0x00 消息队列概述
0.1 消息队列应用场景
0.1.1 MQ消息通道
- 异步解耦
- 削峰填谷
- 发布订阅
- 高可用
0.1.2 EventBridge数据总线
- 事件源:将云服务、自定义应用、SaaS应用 等应用程序产生的事件消息发布到事件集。
- 事件集:存储接收到的事件消息,并根据事件规则将事件消息路由到事件目标。
- 事件目标:消费事件消息。
0.1.3 Data Platform流数据平台
- 提供批/流数据处理能力
- 各类组件提供各类Connect
- 提供Streaming/Function能力
- 根据数据schema灵活的进行数据预处理
0.2 主流消息队列介绍
0x01 Kafka详解
1.1 Kafka 架构介绍
1.1.1 Zookeeper
Kafka存储数据:
- Broker Meta信息(临时节点)
- Controller信息(临时节点)
- Topic信息(持久节点)
- Config信息(持久节点)
- 选举机制:Paxos机制
- 提供一致性:
- 写入(强一致性)
- 读取(会话一致性)
- 提供可用性:
- 一半以上节点存活即可读写
- 提供功能:
- watch机制
- 持久/临时节点能力
1.1.2 Broker
- 若干个Broker节点组成Kafka集群
- Broker作为消息的接收模块,使用React网络模型进行消息数据的接收
- Broker作为消息的持久化模块,进行消息的副本复制以及持久化
- Broker作为高可用模块,通过副本间的Failover进行高可用保证
1.1.3 Controller
-
Controller选举
- Broker启动会尝试去zk中注册controller节点
- 注册上controller节点的broker即为controller
- 其余broker会watch controller节点,节点出现异常则进行重新注册
-
Controller作用
- Broker重启/宕机时,负责副本的Failover切换
- Topic创建/删除时,负责Topic meta信息广播
- 集群扩缩容时,进行状态控制
- Partition/Replica状态机维护
1.1.4 Coordinator
- 负责topic-partition<->consumer的负载均衡
- 根据不同的场景提供不同的分配策略
- Dynamic Membership Protocol
- Static Membership Protocol
- Incremental Cooperative Rebalance
1.2 Kafka 高可用
- 副本同步机制
- 提供lsr副本复制机制,提供热备功能
- 写入端提供ack=0,-1,1机制,控制副本同步强弱
- 副本切换机制
- 提供clean/unclean副本选举机制
1.2.1 Kafka副本ISR机制
- AR
- Assign Replica,已经分配的所有副本
- OSR
- Out Sync Replica
- 很久没有同步数据的副本
- ISR
- 一直都在同步数据的副本
- 可以作为热备进行切换的副本
- min.insync.replicas最少isr数量配置
1.2.2 Kafka写入Ack机制
- Ack 1
- Leader副本写入成功,Producer即认为写成功
- Ack=0
- OneWay模式
- Producer发送后即为成功
- Ack =-1
- ISR中所有副本都成功,Producer才认为写成功
1.2.3 Kafka副本同步
- LEO
- Log End Offset,日志最末尾的数据
- HW
- ISR中最小的LEO作为HW
- HW的消息为Consumer可见的消息
1.2.4 Kafka副本选举
1.3 Kafka 集群扩缩容
Kafka集群扩缩容之后的目标:
- Topic维度
- partition在各个broker之间分布是均匀的
- 同一个partition的replica不会分布在一台brok6
- Broker维度
- Broker之间replica的数量是均匀的