整體概念圖
- 作用是:解耦、削峯、異步處理。
- brokers、topic、partition的相關信息、監控和路由相關信息使用zk存儲。
- zk在broker中選出一個controller,用於partition分配和leader選舉。
文件存儲簡述
- 每新寫一條消息,kafka就是在對應的文件append寫,將隨機寫操作改爲順序寫,所以性能非常高
- 使用文件系統和操作系統的頁緩存分別存儲和緩存消息,結合Zero-Copy,因此IO性能好
- 索引策略是稀疏矩陣法,查找過程採用二分法。
- 一個log文件對應兩個索引文件,偏移量索引文件,時間戳索引文件(這個是幹啥用?)
- 文件存儲方式:
生產消息
- key參數用來哈希,分配partition使用。
- 一般我們不傳key,默認用round-robin輪詢負載均衡算法來選partition。
- 有一個broker節點是controller,完成partition分配和leader選舉。
消費消息
- 一個消費組裏面可以有多個消費者,同一個消費組中的兩個消費者,不會同時消費一個partition。
- 一個partition,只能被消費組裏的一個消費者消費,但是可以同時被多個消費組消費。
- 從broker中選一個coordinator,用於分配消費那個partition。
- 偏移量索引流程:
- 解決重複消費有兩個方法:
1、下游系統保證冪等性,重複消費也不會導致多條記錄;
2、把commit offset和業務處理綁定成一個事務。 - reblance觸發場景:
1、增加partition
2、增加消費者
3、消費者主動關閉
4、消費者宕機
5、coordinator宕機