Kafka 知識結構

最近需要了解 Kafka 源碼, 通過翻看 Kafka 源碼, 發(fā)現(xiàn)該項目的模塊化做的非常好. 簡單來說可以分成如下幾個模塊:


Kafka Server 模塊

參考2012年 Jay Kreps 畫的一張 Kafka Broker Internals 的圖:

kafka broker internals.png

感嘆2012年至今, Kafka 大的架構基本上沒有變化.

API/Network

通信模塊. 官方文檔 A Guide to the Kafka Protocol 不在多說

Metrics

發(fā)現(xiàn)這個方面沒有人寫的非常明白. 多說幾句. Kafka 使用 Yammer 的 metrics-core 2.2 版本, 2.X 版本與 3.X 版本有很大區(qū)別. metrics-core 是支持 CSV 等方式吐出 Metric 數(shù)據(jù)的, 但是 Kafka 做了一層封裝, 并且默認僅僅支持 JMX 方式暴露, 比較好的是 Kafka 集成了 MX4J 組件, 通過在server.properties中指定 kafka_mx4jenable=true mx4jport=端口 方式開啟.
如果想使用 CSV 等其他方式暴露 Kafka Metric 數(shù)據(jù), 需要做兩件事:

  • 實現(xiàn) kafka.metrics.KafkaMetricsReporter 這個 trait(再早的版本沒有看源碼), 包裝一層, 實現(xiàn)數(shù)據(jù)獲取的邏輯 (之前自己看錯, 0.10.0.0 與0.8.2 版本相同)
  • server.properties中使用 metric.reporters=實現(xiàn)的Reporters逗號分隔 方式開啟對應的 Reporter

獲取到了 Kafka 的 metrics 數(shù)據(jù), 列幾個我認為比較重要的 metric:
** kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions **

  • 含義: 正在復制的 Partition 的數(shù)量.
  • 建議報警閾值: > 0 就建議報警. 但如果 Kafka 集群正在 reassign partition 時, 這個值也會 >0

kafka.controller:type=KafkaController,name=OfflinePartitionsCount

  • 含義: 沒有 Leader 的 Partition 的數(shù)量. 處于這個狀態(tài)的 Partition 是不可讀也不可寫
  • 建議報警閾值: >0 一旦出現(xiàn)就報警.

kafka.controller:type=KafkaController,name=ActiveControllerCount

  • 含義: 活躍的 Controller 的數(shù)量.
  • 建議報警閾值: != 0 就趕緊報警

kafka.server:type=ReplicaManager,name=PartitionCount

  • 含義: 集群中 Partition 的總數(shù)
  • 建議報警閾值: 感覺這個報警不可控.

關于 metric 就說到這里.
參考: How We Monitor and Run Kafka at Scale -- by Signalfx

LogManager

日志子系統(tǒng)負責日志的存儲和讀取. 美團技術團隊的博客的文章 Kafka文件存儲機制那些事 寫的非常好. 不多說.

ReplicaManager

Kafka 的 Topic 支持多個 Replica 高可用. 官方文檔 Kafka Replication

KafkaController

一個 Kafka 集群中有會有一個Broker 作為 Controller 負責集群. 該子系統(tǒng)包含多個模塊. 具體參考官方文檔 Kafka Controller Internals

Kafka Controller sub-system

DynamicConfigManager

DynamicConfigManager 負責所有 Zookeeper 上的 /config 路徑下的配置相關工作. 包含兩個大的模塊:

  • /config/clients 客戶端相關的配置
  • /config/topics Topic 相關的配置

GroupCoordinator

參考文檔:


總結

今天是第一天翻看 Kafka 源碼, 整理一下系統(tǒng)和知識結構, 后續(xù)再挨個模塊深入.

Kafka 依賴的多了, 熟悉源代碼是必需的, 一旦出現(xiàn)未知的問題再去翻代碼肯定是來不及的. 這也是我選擇開源項目作為重要系統(tǒng)組件的一個原則.

-- EOF --

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市江滨,隨后出現(xiàn)的幾起案子庭敦,更是在濱河造成了極大的恐慌蹈垢,老刑警劉巖范嘱,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件养泡,死亡現(xiàn)場離奇詭異,居然都是意外死亡坑质,警方通過查閱死者的電腦和手機硬梁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胞得,“玉大人荧止,你說我怎么就攤上這事。” “怎么了跃巡?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵危号,是天一觀的道長。 經常有香客問我素邪,道長外莲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任兔朦,我火速辦了婚禮偷线,結果婚禮上,老公的妹妹穿的比我還像新娘沽甥。我一直安慰自己声邦,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布摆舟。 她就那樣靜靜地躺著亥曹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恨诱。 梳的紋絲不亂的頭發(fā)上媳瞪,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音照宝,去河邊找鬼蛇受。 笑死,一個胖子當著我的面吹牛硫豆,可吹牛的內容都是我干的龙巨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼熊响,長吁一口氣:“原來是場噩夢啊……” “哼旨别!你這毒婦竟也來了?” 一聲冷哼從身側響起汗茄,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤秸弛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后洪碳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體递览,經...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年瞳腌,在試婚紗的時候發(fā)現(xiàn)自己被綠了绞铃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嫂侍,死狀恐怖儿捧,靈堂內的尸體忽然破棺而出荚坞,到底是詐尸還是另有隱情,我是刑警寧澤菲盾,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布颓影,位于F島的核電站,受9級特大地震影響懒鉴,放射性物質發(fā)生泄漏诡挂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一临谱、第九天 我趴在偏房一處隱蔽的房頂上張望璃俗。 院中可真熱鬧,春花似錦吴裤、人聲如沸旧找。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钮蛛。三九已至,卻和暖如春剖膳,著一層夾襖步出監(jiān)牢的瞬間魏颓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工吱晒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甸饱,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓仑濒,卻偏偏與公主長得像叹话,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子墩瞳,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內容