深入Kafka
集羣成員關係
控制器
- 控制器的作用: 除具有一般broker的功能之外,還負責分區首領的選舉
- 控制器的選舉: 各broker向ZK中/controller註冊臨時節點
- 分區首領的選舉: broker加入時,同步副本;broker離開時,選舉新的分區首領
分區複製
- 首領副本 :每個分區都有一個首領副本。首領副本負責處理理所有生產者和消費者的請求
- 跟隨者副本:首領以外的副本都是跟隨者副本。跟隨者副本不處理理來自客戶端端請求,它們唯一的任務就是從首領那里負責消息,保持與首領一致的狀態。
- AR:Assigned Replicas,所有副本
- ISR:In-Sync Replicas,已同步的副本
- OSR:Out-Of-Sync Replicas,掉隊的副本
- AR = ISR + OSR
物理存儲
- Kafka會將數據持久化到文件,文件目錄以分區來組織,每個分區下有多個文件,每個文件稱作一個片段,每個片段包含1G或一週的數據,以較小的值爲準。
- 保留策略:數據被刪除之前可以保留多長時間,或者清理數據之前可以保留的數據量大小。
- 3類文件:數據文件、索引文件、時間索引文件。
基本概念
刷盤
文件滾動
- 默認情況下,每個片段包含1G或7天的數據,以較小的值爲準;如果達到片段上限,就關閉當前文件,並打開一個新文件
數據清除策略
- log.cleanup.policy:⽇志清除策略(delete/compact)
- log.retention.bytes:⽇志保留量
- log.retention.hours:⽇志保留時間
索引
- 3步定位message
1)⼆二分查找index file
2)通過index file定位物理理地址
3)順序掃描 segment file
- 稀疏索引 vs. 稠密索引
消息格式