外观
Kafka 主节点挂掉了会发生什么,主节点恢复了会发生什么
主节点(Leader
)宕机时会发生什么?
当 Kafka
集群中的某个 Leader
节点宕机时,Kafka
会自动触发故障恢复机制,以确保集群的高可用性:
1.故障检测
Kafka
通过ZooKeeper
的Watcher
机制检测到Leader
节点宕机。Kafka
控制器(Controller
)会收到通知,并开始处理故障。
2.选举新的 Leader
Kafka
控制器会在ISR
(In-Sync Replicas
)集合中选择一个新的Leader
。- 新
Leader
的选择遵循以下规则:- 优先选择
AR(Assigned Replicas)
列表中靠前且在ISR
中的副本。 - 确保新
Leader
的LEO(Log End Offset)
尽可能接近原Leader
的LEO
。
- 优先选择
3.数据一致性处理
- 新
Leader
会根据ISR
中所有副本的LEO
计算新的HW(High Watermark)
,HW
是ISR
中最小的LEO
。 - 新
Leader
会清理高于HW
的数据,确保数据一致性。 - 新
Leader
通知所有Follower
从HW
开始同步数据。
4.对消费者和生产者的影响
- 消费者:消费者会收到通知,自动切换到新的
Leader
,继续读取消息。 - 生产者:生产者会重新连接到新的
Leader
,继续发送消息。 - 数据丢失风险:在极端情况下,可能会丢失未同步到所有副本的部分数据。
主节点(Leader
)恢复时会发生什么?
当宕机的 Leader
节点恢复后,Kafka
会进行以下操作:
1.数据同步
- 恢复的
Leader
节点会检查其本地存储的HW
值。 - 如果其
LEO
超过HW
,表示其可能持有未同步的数据,Kafka
会指示该节点删除高于HW
的消息。 - 该节点会从新的
Leader
处拉取HW
之后的数据,重新同步。
2.重新加入 ISR
- 当该节点的
LEO
达到或超过HW
后,Kafka
会将其重新加入 ISR。 - 此时,该节点可以作为数据同步的参与者,继续提供服务。
3.对集群的影响
- 恢复的
Leader
节点不会重新成为Leader
,而是作为Follower
继续同步数据。 - 集群的读写操作继续由新的
Leader
节点处理。
总结
Leader
宕机时:Kafka
会自动选举新的Leader
,并清理数据以确保一致性,消费者和生产者会自动切换到新的Leader
。Leader
恢复时:恢复的节点会重新同步数据并加入ISR
,但不会重新成为Leader
。- 数据丢失风险:在
Leader
切换过程中,可能会丢失未同步到所有副本的部分数据。