
KafkaServerStartable 类启动Kafka Broker,startup方法负责启动Broker中各个组件,包括LogManager,KafkaRequestHandlers 。
AtomicBoolean 型变量 isStartingUp 初始化为 false,compareAndSet方法比较当前值是否为 false 并置为 true,可以认为是一个最简单的状态机。更新 brokerState: BrokerState 为 Starting。
initZkClient方法建立ZooKeeper连接,createTopLevelPaths方法在ZooKeeper中预建path,
ZooKeeperClient 鼓励请求 pipeline 处理。
connectionState: States 表示ZooKeeper连接状态,包括:CONNECTING, ASSOCIATING, CONNECTED, CONNECTEDREADONLY,CLOSED, AUTH_FAILED, NOT_CONNECTED。
handleRequest 方法发送请求并等待相应。
时间轮
Kafka时间轮底层就是一个环形数组,数组中每个元素都存放一个双向链表TimerTaskList,链表中封装了很多延时任务。
Kafka中一个时间轮TimingWheel是由20个时间格组成,wheelSize = 20;每格的时间跨度是1ms,tickMs = 1ms。参照Kafka,上图中也用了20个灰边小圆表示时间格,为了动画演示可以看得清楚,我们这里每个小圆的时间跨度是1s。
所以现在整个时间轮的时间跨度就是 tickMs * wheelSize ,也就是 20s。从0s到19s,我们都分别有一个灰边小圆来承载。
Kafka的时间轮还有一个表盘指针 currentTime,表示时间轮当前所处的时间。也就是图中用黑色粗线表示的圆,随着时间推移, 这个指针也会不断前进;