kafka的主从同步
kafka的主从同步
Kafka允许topic的分区拥有若干副本,所以当一个节点down掉时数据依然是可用的
创建副本的单位是topic的分区,每个分区都有一个leader和零或多个followers,所有的读写操作都由leader处理
一般分区的数量都比broker的数量多的多,各分区的leader均匀的分布在brokers中,所有的followers都复制leader的日志,日志中的消息和顺序都和leader中的一致。followers向普通的consumer那样从leader那里拉取消息并保存在自己的日志文件中。
Kafka判断一个节点是否活着有两个条件:
-
节点必须可以维护和ZooKeeper的连接,Zookeeper通过心跳机制检查每个节点的连接。
-
如果节点是个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掉时,必须及时作出反应。可以有以下两种选择:
-
等待ISR中的任何一个节点恢复并担任leader
-
选择所有节点中(不只是ISR)第一个恢复的节点作为leader
如果选择方案一,等待ISR中的节点恢复,一旦ISR中的节点起不起来或者数据都是了,那集群就永远恢复不了了
如果选择方案二,等待ISR以外的节点恢复,这个节点的数据就会被作为线上数据,有可能和真实的数据有所出入,因为有些数据它可能还没同步到
Kafka目前选择了第二种策略
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】