# Producer 管理 TCP
## 為何采用 TCP?
* 在開發客戶端時,能夠利用 TCP 本身的高級功能,e.g. 多路復用請求、同時輪詢多個連接
* 多路復用請求(multiplexing request)
* 指將兩個或多個數據流合并到底層單一物理連接中的過程
* TCP 多路復用會在一條物理連接上創建若干個虛擬連接,每個虛擬連接負責自己的數據流
* 嚴謹說,TCP 并不能多路復用,它只是提供可靠的消息交付語義保證,e.g. 自動重傳丟失報文
## Kafka Producer 概覽
* 開發一個 Producer 有四步
* 構造 Producer 對象所需的參數對象
* 創建 Kafka 對象實例
* 使用 KafkaProducer 的 send 方法發送消息
* 調用 KafkaProducer 的 close 方法關閉 Producer 并釋放資源
``` Java
Properties props = new Properties ();
props.put(“參數1”, “參數1的值”);
props.put(“參數2”, “參數2的值”);
……
try (Producer<String, String> producer = new KafkaProducer<>(props)) {
producer.send(new ProducerRecord<String, String>(……), callback);
……
}
```
## Kafka Producer 何時創建 TCP?
* 當 Producer 創建 KafkaProducer 實例時,會建立與 Broker 的 TCP 連接
* 更準確的:在創建 KafkaProducer 實例時,生產者應用會在后臺創建并啟動一個名為 Sender 的線程,該 Sender 線程開始運行時首先會創建與 Broker 的連接。
* Producer 會連接 bootstrap.servers 參數指定的所有 Broker
* bootstrap.servers:指定了這個 Producer 啟動時要連接的 Broker 地址
* 生產中通常指定 3-4 臺即可
* 因為 Producer 連接到一臺 Broker 就能拿到集群的 Broker 信息,不需要指定所有 Broker
* TCP 連接還可能在兩個地方創建:
* 更新元數據后
* 當集群有新的 Broker 時,需要額外新創建
* 消息發送時
## 何時關閉 TCP?
* Producer 端關閉 TCP 的兩種方式
* 用戶主動關閉
* Kafka 自動關閉
* 參考 Producer 端參數:connections.max.idle.ms
* 該參數默認值為 9 min。如果 9 分鐘內沒有任何請求流過某個 TCP 連接,則會被關閉
* Kafka 自動關閉實在 Broker 端,但發起方是客戶端
* TCP 看來這種關閉屬于被動關閉,即 passive close
* 被動關閉的后果是會產生大量的 CLOSE_WAIT 連接
* 如果 Producer 端 connections.max.idle.ms = -1,則 KafkaProducer 建立的 TCP 連接會成為僵尸連接
- 概覽
- 入門
- 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