# Consumer 管理 TCP
## 何時創建 TCP?
* Consumer 的主要程序入口:`KafkaConsumer` 類
* 和 Producer 不同,構建 KafkaConsumer 實例時不會創建 TCP 連接
* TCP 連接是在調用 KafkaConsumer.poll 方法時創建的
* 更細的,poll 方法內部有 3 個時機創建 TCP
* 發起 FindCoordinator 請求時
* Consumer 啟動調用 poll 時,向 Kafka 集群發送 FindCoordinator 請求,希望獲得哪個 Broker 是它的協調者
* Consumer 可以發送 FindCoordinator 到集群中任意服務器
* 實際請求會向負載最小的那臺 Broker 發送請求
* 負載評估:看消費者連接的所有 Broker 中誰的待發送請求最少。(i.e. 站在 Cosumer 端而非全局)
* 連接協調者時
* Broker 處理完 FindCoordinator 后,返回 Response,告訴哪個 Broker 是協調者
* Consumer 因此創建到該 Broker 的 Socket 連接
* 消費數據時
* Consumer 會為每個要消費的分區創建與該分區 Leader Replica 所在的 Broker 連接的 TCP
## 創建多少個 TCP?
* 很大的一個 ID 由來:由 Integer.MAX_VALUE 減去協調者所在 Broker 的真實 ID 計算得來。
* ID = -1:Consumer 首次啟動對 Kafka 集群一無所知時的 ID
* Consumer 創建 3 類 TCP 連接
* 確定協調者和獲取集群元數據
* 連接協調者,令其執行組成員管理操作
* 執行實際的消息獲取
* 注:第三類 TCP 創建后,會棄用第一類連接
# 何時關閉 TCP?
* 用戶主動關閉
* 調用 KafkaConsumer.close()
* 執行 Kill -2 / Kill -9
* Kafka 自動關閉
* 由 Consumer 端參數 connection.max.idle.ms 控制
* 默認 9分鐘
## 可能的問題
* 對于使用假的 -1 ID,無法重用這個連接
- 概覽
- 入門
- 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