streams architecture

KafkaServerStartable 类启动Kafka Broker,startup方法负责启动Broker中各个组件,包括LogManagerKafkaRequestHandlers

AtomicBoolean 型变量 isStartingUp 初始化为 falsecompareAndSet方法比较当前值是否为 false 并置为 true,可以认为是一个最简单的状态机。更新 brokerState: BrokerStateStarting

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,表示时间轮当前所处的时间。也就是图中用黑色粗线表示的圆,随着时间推移, 这个指针也会不断前进;