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:核心设计与实践原理》

相关推荐
化作星辰1 小时前
java 给鉴权kafka2.7(sasl)发送消息权限异常处理
java·大数据·开发语言·kafka
过往记忆1 小时前
Kafka 作为事件流的商业模式正在消亡
分布式·kafka
一瓢一瓢的饮 alanchan8 小时前
Flink原理与实战(java版)#第2章 Flink的入门(第二节Flink简介)
java·大数据·flink·kafka·实时计算·离线计算·流批一体化计算
原来是好奇心1 天前
消息队列终极选型:RabbitMQ、RocketMQ、Kafka与ActiveMQ深度对比
分布式·kafka·rabbitmq·rocketmq·activemq·mq
❀͜͡傀儡师1 天前
docker搭建Elasticsearch+Kafka+Logstash+Filebeat日志分析系统
elasticsearch·docker·kafka
老葱头蒸鸡1 天前
(4)Kafka消费者分区策略、Rebalance、Offset存储机制
sql·kafka·linq
xuyanqiangCode1 天前
KAFKA自动修改所有以**开头的主题脚本
分布式·kafka·linq
Hello.Reader1 天前
用 Kafka 打通实时数据总线Flink CDC Pipeline 的 Kafka Sink 实战
flink·kafka·linq
周杰伦_Jay1 天前
【日志处理方案大比拼】 Filebeat+Kafka+Flink+Spark+ES+HDFS VS ELK/AOP/RocketMQ/大厂方案
flink·spark·kafka
q***65692 天前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq