天天看點

Apache Kafka源碼分析 – Broker Server

在kafka的main入口中startup kafkaserverstartable, 而kafkaserverstartable這是對kafkaserver的封裝

kafkaserver代表一個kafka broker, 這是kafka的核心. 

隻需要看看裡面startup了哪些modules, 就知道broker做了哪些工作, 後面一個個具體分析吧

2.1 kafkascheduler

kafkaschduler用于在背景執行一些任務,用scheduledthreadpoolexecutor實作

2.2 zookeeper client

由于kafka是基于zookeeper進行配置管理的, 是以需要建立zkclient和zookeeper叢集通信

2.3 logmanager

the entry point to the kafka log management subsystem. the log manager is responsible for log creation, retrieval, and cleaning. 

<a href="http://www.cnblogs.com/fxjwind/p/3554504.html">apache kafka源碼分析 – log management</a>

2.4 replicamanager

在0.8中新加入的replica相關子產品

<a href="http://www.cnblogs.com/fxjwind/p/3558079.html">apache kafka replication design – high level</a>

<a href="http://www.cnblogs.com/fxjwind/p/3574147.html">kafka detailed replication design v3</a>

<a href="http://www.cnblogs.com/fxjwind/p/3578417.html">apache kafka源碼分析 – replicamanager</a>

2.5 kafka socket server

首先broker server是socket server,所有和broker的互動都是通過往socket端口發送request來實作的

kafkaapis

該類封裝了所有request的處理邏輯

kafkarequesthandler

2.6 offsetmanager

offsetmanager = createoffsetmanager()

定期清除過期的offset資料,即compact操作,

以及consumer相關的一些offset操作,不細究了,因為我們不用highlevel consumer

2.7 kafkacontroller

<a href="http://www.cnblogs.com/fxjwind/p/3569518.html">apache kafka源碼分析 – controller</a>

0.8後,為了處理replica,會用一個broker作為master,即controller,用于協調replica的一緻性

2.8 topicconfigmanager

topicconfigmanager用于處理topic config的change,kafka除了全局的配置,還有一種叫topic-level configuration

比如你可以這樣設定,那麼這些topic config如何生效的?

topic-level config預設是被存儲在,

是以單獨建立一個目錄

來觸發配置的變化

是以上面的指令除了,把配置寫入topic/config,還有增加一個通知,告訴watcher哪個topic的config發生了變化

并且這個通知有個suffix,用于差別是否已處理過

Apache Kafka源碼分析 – Broker Server
Apache Kafka源碼分析 – Broker Server

這個failover也沒問題,反正配置設定多次也是無害的,每次啟動都會把所有沒過期的notification處理一遍

并且broker重新開機後是會從zk中, loading完整的配置的,是以也ok的,這個主要用于實時更新topic的配置

2.8 kafkahealthcheck

這個很簡單,就像注釋的,告訴所有人我還活着。。。

實作就是在,

register一個ephemeral znode,當sessionexpired時,再去register,典型zk應用

是以隻需要watch這個路徑就是知道broker是否還活着

2.9 contolledshutdown

對于0.8之前,broker的startup和shutdown都很簡單,把上面這些元件初始化,或stop就可以了

但是0.8後,增加replica,是以broker不能自己直接shutdown,需要先通知controller,controller做完處理後,比如partition leader的遷移,或replica offline,然後才能shutdown

挺長的,邏輯就是找到controller,發送controlledshutdownrequest,然後等待傳回,如果失敗,就是unclean shutdown

本文章摘自部落格園,原文釋出日期: 2014-02-14