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