首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kafka的(控制器)broker选举机制

Kafka的(控制器)broker选举机制

原创
作者头像
用户10820455
发布2025-11-11 17:27:15
发布2025-11-11 17:27:15
490
举报
文章被收录于专栏:kafkakafka

该文章基于zk + kafka 分布式部署的场景描述的。

控制器是Kafka的核心组件,它的主要作用是在Zookeeper的帮助下管理和协调整个Kafka集群。集群中任意一个Broker都能充当控制器的角色,但在运行过程中,只能有一个Broker成为控制器。

Kafka控制器选举,又名broker选举机制。所谓选举分为leader和follower两个角色,选举为leader的broker负责对接消费端,完成消息的消费。其他follower则是备份节点,当leader出现异常时,会重新从follower中选举出leader。

集群中第一个启动的broker会通过在zk中创建一个临时节点/controller来让自己成为控制器。其他的broker也会在zk中创建一个临时节点,当他们发现zk中已经存在了controller,那么zk就会抛出异常给他们r,并在zk中创建watch对象,便于接收controller变更的通知。

如果controller因网络原因和zk断连了,那么其他的broker就会根据watch对象收到zk发过来的选举通知(是zk主动通知还是watch对象检测到??),在zk上创建临时节点/controller,如果有一个创建成功,就会成为leader,其他的就会收到异常,就会创建新的watch‘对象(沿用原有的watch对象还是销毁旧的,创建新的??)

控制器脑裂

当控制器因网络原因或者Full GC导致zk的seesion 超时了,zk会选举出新的controller。过了一段时间,旧的控制器又恢复了,导致zk中出现了2个controller,这种现象就是控制器脑裂。

解决方案:zk中还有一个与controller有关的持久节点(controller_epoch),存放的是一个整形值epoch number(纪元编号,也称隔离令牌),集群中每次选举一次,就会创建一个数值更大的epoch number,broker会忽略掉epoch number较小 的消息。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档