这是我参与「第四届青训营」笔记创作活动的的第16天!
前言
Coordinator
- 负责topic-partition<->consumer的负载均衡
- 根据不同的场景提供不同的分配策略
Kafka高可用
- 副本同步机制
- 提供lsr副本复制机制,提供热备功能
- 写入端提供ack=0,-1,1机制,控制副本同步强弱
- 副本切换机制
- 提供给clean/unclean副本选举机制
Kafka副本ISR机制
- AR
- Assign Replica,已经分配的所有副本
- OSR
- Out Sync Replica
- 很久没有同步数据的副本
- ISR
- 一直都在同步数据的副本
- 可以作为热备进行切换的副本
- min.insync.replicas最少isr数量配置
Kafka写入Ack机制
Ack=1
Leader副本写入成功,Producer即认为写成功
Ack=0
OneWay模式
Producer发送即为成功
Ack=-1
ISR中所有副本都成功,Producer才认为写成功
Kafka副本同步
LEO
Log End Offset,日志最末尾的数据
HW
ISR中最小的LEO作为HW
HW的消息为Consumer可见的消息
Kafka副本选举
- Clean选举
- 优先选取Isr中的副本作为leader
- 如果Isr中无可用副本,则partition不可用
- Unclean选举
- 优先选取Isr中的副本作为leader
- 如果Isr中无可用副本,则选择其他存活副本
Kafka集群扩缩容
- Kafka集群扩缩容之后的目标
- Topic维度
- partition在各个broker之间分布是均匀的
- 同一个partition的repica不会分布在一台broker
- Broker维度
- Broker之间replica的数量是均匀的
## Kafka集群扩容步骤
- 扩容Broker节点
- Leader副本写入成功,Producer即认为写成功
- 计算均衡的Repllica分布拓扑
- 保证Topic的partition在broker间分布均匀
- 保证Broker之间Replica分布均匀
- Controller负责新的副本分布元数据广播
- Controller将新的leader/follower信息广播给broker
- Broker负责新副本的数据同步
- Broker上有需要同步数据的副本则进行数据同步