这是我参与「第四届青训营 」笔记创作活动的第9天
消息队列概述
-
消息队列应用场景
- MQ 消息通道
- EventBridge 事件总线
- Data Platform 数据流平台
-
主流消息队列介绍
- RabbitMQ
- RocketMQ
- Kafka
- Pulsar
Kafka
Kafka存储数据:
- Broker Meta信息(I临时节点)
- Controller信急(临时节点)
- Topic信息(持久节点)
- Config信急(持久节点)
Broker角色
- 若干个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的负载均衡
- 根据不同的场景提供不同的分配策略
- Dynamic Membership Protocol
- Static Membership Protocol
- Incremental Cooperative Rebalance
Kafka写入Ack机制
- Ack=1
- Leader本写入成功,Producer即认为写成功
- Ack=0
- OneWay模式
- Producer发送后即为成功
- Ack=-1
- ISR中所有副本都成功,Producer才认为写成功
Kafka集群扩容步骤
- 扩容Broker节点
- Leader副本写入成功,Producer即认为写成功
- 计算均衡的Replica分布拓扑
- 保证Topic的partition在broker间分布均匀
- 保证Broker之间Replica分布均匀
- Controller负责新的副本分布元数据广播
- Controller将新的leader/follower信息广播给broker
- Broker负责新副本的数据同步
- Broker上有需要同步数据的副本则进行数据同步
Kafka集群缩容步骤
- 计算均衡的Replica分布拓扑
- 保证Topic的partition在broker间分布均匀
- 保证Broker之间Replica分布均匀
- Controller负责新的副本分布元数据广播
- Controller将新的leader/follower信息广播给 broker
- Broker负责新副本的数据同步 - Broker上有需要同步数据的副本则进行数据同步
- 下线缩容的Broker节点
- 数据同步完毕之后下线缩容的Broker节点