目錄
消費者組功能點
1. 動態負載均衡
2. 容錯高可用
3. 消費進度管理
4. 并行消費能力
5. 消費隔離性
其他要點
1. Rebalance過程詳解
2. 位移提交的精確語義
3. 消費者限速策略
4. 跨機房消費設計
消費者組功能點
1. 動態負載均衡
核心機制:通過Rebalance實現分區重新分配
- 觸發條件:消費者加入/退出、訂閱主題變化、分區數量變更
- 類比場景:團隊任務自動重組(類似敏捷團隊根據成員變化調整任務分配)
2. 容錯高可用
- 心跳檢測:
session.timeout.ms
控制消費者存活判定 - 位移持久化:通過
_consumer_offsets
主題記錄消費進度 - 故障轉移:崩潰的消費者分配的分區會被其他成員接管
3. 消費進度管理
- 位移提交模式:
-
- 自動提交(風險點:可能提交未處理完的消息)
- 手動同步/異步提交(精準控制但復雜度高)
- 位移重置策略:
auto.offset.reset=earliest/latest/none
4. 并行消費能力
- 分區-消費者綁定原則:一個分區同一時刻只能被一個消費者讀取
- 橫向擴展公式:消費者數量 ≤ 訂閱主題的分區總數
5. 消費隔離性
- 消費組隔離:不同消費組獨立消費同一主題(廣播模式實現基礎)
- 事務隔離:通過
isolation.level=read_committed
讀取已提交消息
其他要點
1. Rebalance過程詳解
- 問題示例:"描述消費者組Rebalance觸發的條件和完整流程?"
- 考點拆解:
-
- 階段劃分:JoinGroup → SyncGroup → Awaiting
- 協議版本:Eager rebalance vs Incremental Cooperative rebalance區別
- 源碼定位:
ConsumerCoordinator.poll()
中的狀態機轉換
2. 位移提交的精確語義
- 問題示例:"如何實現至少一次(at-least-once)和精確一次(exactly-once)語義?"
- 標準答案:
-
- 至少一次:先處理消息后同步提交位移
- 精確一次:啟用事務生產者+
isolation.level=read_committed
3. 消費者限速策略
- 問題示例:"如何控制消費者不拉取過量消息導致OOM?"
- 技術要點:
-
max.poll.records
控制單次poll數量- 結合
pause()/resume()
動態控制分區拉取 - 使用
ConsumerRebalanceListener
實現背壓
4. 跨機房消費設計
- 問題示例:"如何設計多機房消費者組保證地域親和性?"
- 解決方案:
-
- 使用
client.rack
參數指定機架信息 - 配合Broker的
broker.rack
實現優先本地消費 - 源碼驗證:
NetworkClient.handleCompletedReceives()
中的元數據校驗
- 使用