网站内容不被收录,公司做网站的流程作图的步骤,网站建设交流论坛,平面设计创意图Kafka 控制器#xff08;controller#xff09;
在kafka集群中 会存在一个或者多个broker#xff08;一个服务器就是一个broker#xff09;#xff0c;其中有一个broker会被选举为控制器 kafka controller #xff0c;负责管理整个集群中所有副本、分区的状态#xff0…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表示延迟过多的副本。“死了”
ARISROSR
参考《深入理解 Kafka:核心设计与实践原理》