kafka的主从同步

kafka的主从同步

Kafka允许topic的分区拥有若干副本,所以当一个节点down掉时数据依然是可用的

创建副本的单位是topic的分区,每个分区都有一个leader和零或多个followers,所有的读写操作都由leader处理

一般分区的数量都比broker的数量多的多,各分区的leader均匀的分布在brokers中,所有的followers都复制leader的日志,日志中的消息和顺序都和leader中的一致。followers向普通的consumer那样从leader那里拉取消息并保存在自己的日志文件中。

Kafka判断一个节点是否活着有两个条件:

  1. 节点必须可以维护和ZooKeeper的连接,Zookeeper通过心跳机制检查每个节点的连接。

  2. 如果节点是个follower,他必须能及时的同步leader的写操作,延时不能太久。

符合以上条件的节点就是"同步中的"(in sync),Leader会追踪所有“同步中”的节点,一旦一个down掉了,或是卡住了,或是延时(参数配置的)太久,leader就会把它移除

Leader的选择

Kafaka动态维护了一个同步状态的副本的集合(a set of in-sync replicas),简称ISR,在这个集合中的节点都是和leader保持高度一致的,任何一条消息必须被这个集合中的每个节点读取并追加到日志中了,才回通知外部这个消息已经被提交了。因此这个集合中的任何一个节点随时都可以被选为leader.ISR在ZooKeeper中维护。SR中有f+1个节点,就可以允许在f个节点down掉的情况下不会丢失消息并正常提供服。ISR的成员是动态的,如果一个节点被淘汰了,当它重新达到“同步中”的状态时,他可以重新加入ISR.这种leader的选择方式是非常快速的,适合kafka的应用场景。

当所有的副本都down掉时,必须及时作出反应。可以有以下两种选择:

  1. 等待ISR中的任何一个节点恢复并担任leader

  2. 选择所有节点中(不只是ISR)第一个恢复的节点作为leader

如果选择方案一,等待ISR中的节点恢复,一旦ISR中的节点起不起来或者数据都是了,那集群就永远恢复不了了

如果选择方案二,等待ISR以外的节点恢复,这个节点的数据就会被作为线上数据,有可能和真实的数据有所出入,因为有些数据它可能还没同步到

Kafka目前选择了第二种策略

posted @   上好佳28  阅读(216)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示