# 消費者組
* 消費者組,i.e. Consumer Group
* Consumer Group 是 Kafka 提供的可擴展且具有容錯性的消費者機制
* 一個組內有多個消費者實例(Consumer Instance)
* 共享一個公共的 ID,i.e. Group ID
* 組內所有 Consumer 協調一起消費訂閱主題(Subscribed Topics)的所有分區(Partition)
* 每個分區只能由一個 Consumer Group 內的一個 Consumer Instance 消費
Consumer Group 三特性
* Consumer Group 下可以有 1-N 個實例
* 實例可以是單獨進程,也可以是同一進程下的線程
* Group ID 是一個字符串,它標識唯一的一個 Consumer Group
* Consumer Group 下所有實例訂閱的 Topic 的單個分區,只能分配給組內的某個 Instance 消費
消息引擎模型
* Consumer Group 訂閱了多個 Topic 后,組內的每個 Instance 不要求一定要訂閱 Topic 的所有 Partition,它只會消費部分分區中的消息
* Consumer Group 之間彼此獨立不影響
* 能夠訂閱相同的一組 Topic 而不干涉
* Kafka 使用 Consumer Group 機制,同時實現了傳統消息引擎系統的兩大模型(P2P & Pub/Sub),i.e.
* 所有實例屬于同一個 Group,實現的是消息隊列模型
* 所有實例分別屬于不同的 Group,實現的是 Pub/Sub 模型
---
* 理想情況下,Consumer 實例的數量應該等于該 Group 訂閱的 Topic 的分區總數
* 針對 Consumer Group,Kafka 怎么管理 offset?
* 對于 Consumer Group,它是一組 KV 對,Key 是分區,V 是 Consumer 消費該分區的 offset
* 老版本 Kafka 將 offset 存儲于 ZooKeeper
* ZK 不適合頻繁讀寫
* 新版本將 offset 存儲于 Broker 內部 Topic 中,i.e. __consumer_offset
## Rebalance
* Rebalance 觸發條件 3 個
* 組成員數變化,e.g. 新 Consumer Instance 加入,或被踢除
* 訂閱 Topic 數發生變更
* 訂閱 Topic 的 Partition 變更
* Kafka 只允許增加一個 Topic 的分區數。當分區數增加時,就會觸發訂閱該 Topic 的所有 Group 開啟 Rebalance
* 3 種分配策略
* 分配目的:保證最公平的分配策略

* Rebalance 的問題
* Rebalance 類似 JVM STW(stop the world) GC
* 所有 Consumer Instance 都會停止消費,等待分配完成
* Rebalance 過于慢
- 概覽
- 入門
- 1. 消息引擎系統
- 2. Kafka 術語
- 3. 分布式流處理平臺
- 4. Kafka “發行版”
- 5. Kafka 版本號
- 基本使用
- 6. 生產集群部署
- 7. 集群參數配置
- 客戶端實踐與原理
- 9. Consumer 分區機制
- 10. Consumer 壓縮算法
- 11. 無消息丟失配置
- 12. 客戶端高級功能
- 13. Producer 管理 TCP
- 14. 冪等生產者和事務生產者
- 15. 消費者組
- 16. 位移主題
- 17. 消費者組重平衡(TODO)
- 18. 位移提交
- 19. CommitFailedException
- 20. 多線程開發者實例
- 21. Consumer 管理 TCP
- 22. 消費者組消費進度監控
- Kafka 內核
- 23. 副本機制
- 24. 請求處理
- 25. Rebalance 全流程
- 26. Kafka 控制器
- 27. 高水位和 Leader Epoch
- 管理與監控
- 28. Topic 管理
- 29. Kafka 動態配置
- 30. 重設消費者組位移
- 31. 工具腳本
- 32. KafkaAdminClient
- 33. 認證機制
- 34. 云下授權
- 35. 跨集群備份 MirrorMaker
- 36. 監控 Kafka
- 37. Kafka 監控框架
- 38. 調優 Kafka
- 39. 實時日志流處理平臺
- 流處理
- 40. Kafka Streams
- 41. Kafka Streams DSL
- 42. Kafka Streams 金融
- Q&A