Kafka 控制器(controller)

Kafka 控制器(controller)

在kafka集群中 会存在一个或者多个broker(一个服务器就是一个broker),其中有一个broker会被选举为控制器 kafka controller ,负责管理整个集群中所有副本、分区的状态,主要为以下三个功能:

  • 当某个分区中的leader 副本发生故障时,控制器负责选举新的leader副本
  • 某个分区的ISR信息发生变化时,控制器负责通知所有的broker更新元数据信息
  • 某个topic增加分区时,控制器负责分区的重新分配

控制器如何选举呢?

依赖于zookeeper,选举成功的controller会在zk中创建/controller临时节点。

每个broker在启动的时候都会尝试创建一个controller节点,但是只有一个可以成功,创建成功后的临时节点 内容可以如下所示:

{"version":1,"brokerid":0,"timestamp":"xxxxxxxxx"}

version貌似目前是固定的

brokerid 表示选举成功的broker

timestamp 表示选举成功时的时间戳

另外 在zk中还有一个/controller_epoch持久节点,记录当前的控制器是第几代控制器,初始值为1,保证控制器的唯一性。

控制器在选举成功后会读取zk的各个节点数据来初始化上下文信息,这些信息需要同步到其他的普通broker节点中。这就涉及到线程安全问题,kafka控制器是如何确保线程安全的同时又确保性能的呢?

如图所示,将每个事件(这些事件会读取或者更新上下文信息)封装,按照先后顺序暂存到LinkedBlockingQueue中,使用一个ControllorEventThread线程按照FIFO的原则处理各个事件

优雅关闭:

kafka-server-stop.sh 不一定都有用。

分区leader的选举

由kafka controllor负责,选举规则:在ISR中存活,在AR中靠前的第一个。

ISR:表示和 Leader 保持同步的 Follower 集合 ("活着"),follower长时间没有向leader发送通信请求或者同步数据,就会被踢出isr,时间由replica.lag.time.max.ms参数设定默认是30s。

OSR:表示延迟过多的副本。("死了")

AR:ISR+OSR

参考:《深入理解 Kafka:核心设计与实践原理》

相关推荐
import_random15 小时前
[kafka]伪集群搭建,各个节点配置文件中listeners参数的配置
kafka
Mr.朱鹏1 天前
SQL深度分页问题案例实战
java·数据库·spring boot·sql·spring·spring cloud·kafka
山沐与山2 天前
【MQ】Kafka与RocketMQ深度对比
分布式·kafka·rocketmq
yumgpkpm2 天前
Cloudera CDP7、CDH5、CDH6 在华为鲲鹏 ARM 麒麟KylinOS做到无缝切换平缓迁移过程
大数据·arm开发·华为·flink·spark·kafka·cloudera
树下水月2 天前
Easyoole 使用rdkafka 进行kafka的创建topic创建 删除 以及数据发布 订阅
分布式·kafka
Cat God 0072 天前
基于Docker搭建kafka集群
docker·容器·kafka
Cat God 0072 天前
基于 Docker 部署 Kafka(KRaft + SASL/PLAIN 认证)
docker·容器·kafka
KD2 天前
设计模式——责任链模式实战,优雅处理Kafka消息
后端·设计模式·kafka
原神启动13 天前
Kafka详解
分布式·kafka