前言
最近在啃Kafka源码,越发发现看源码而言,看的懂只是第一步,自己能表达出来属于第二部,再其次能对源码修改写出定制化功能属于第三部。因此希望用言语对自己所学的内容有一个输出,锻炼自己的总结能力。话不多说正式开始Kafka的Controller模块的源码分析。
一、Controller定义
在Kafka中Controller模块的功能主要有两个
1.给主题下的分区竞选Leader副本
2.Controller承载着集群的元信息,因此它会管理元信息包括同步元信息到到各个Boker上
在开始正式的介绍之前我们先来看看Controller模块需要掌握的重点是什么:
1.我们需要知道集群元信息保存在哪里,同时也要知道集群中有哪些元信息——ControllerContext
2.如何更新元数据,比如删除主题
3.主题分区的领导者选举是怎么样的
4.controller是如何向broker发送消息的——ControllerChannelManager
5.设计到元信息的改变一般采取事件通知的方式,那么Kafka是如何定义这些事件的呢——ControllerEventManager
二、集群元信息
熟悉kafka的同学都知道在启动Kafka之前,往往都要启动一个zookeeper(社区已经宣布将来的Kafka不在依赖zo