# 生產集群部署
## 操作系統
* 不同 OS 差異會給 Kafka 帶來影響
* Linux 表現比 Windows / Mac 更好,原因如下
* IO 模型的使用
* i.e. OS 操作 IO 指令的方法
* 主流 IO 模型
* 阻塞式 IO
* Java 中 Socket 對象的阻塞模式
* 非阻塞式 IO
* Java 中 Socket 對象的非阻塞模式
* IO 多路復用
* Linux 中系統調用 select 函數
* 信號驅動 IO
* epoll 屬于 IO 多路復用 & 信號驅動 IO 之間
* 異步 IO
* Windows 系統提供了一個 IOCP 線程模型
* 后面的模型比前面的要好
* Kafka 客戶端底層使用了 Java 的 selector,selector 在 Linux 實現機制是 epoll
* 數據網絡傳輸效率
* Kafka 需要在磁盤和網絡間進行大量數據傳輸
* 零拷貝(Zero-copy)
* 避免內核態數據拷貝從而實現快速數據傳輸
* 社區支持度
## 磁盤
* Append-only 上使用 SSD 相比機械硬盤沒有太多優勢
* RAID
* RAID 的優勢
* 提供冗余的磁盤存儲空間
* 提供負載均衡
* 對于 Kafka,可以不用 RAID,使用普通磁盤組成存儲空間即可
## 磁盤容量
* 估算消息數量
* 估算消息平均大小
* 計劃保留時間
* 額外預留其他數據類型空間(e.g. 索引) 10%
* 計算壓縮比
* 確定備份數量
## 帶寬
* 帶寬資源規劃 -> Kafka 服務器的數量規劃
* 假設計算
* 帶寬 1Gbps,每秒處理 1Gb 數據
* 假設 Kafka 服務器安裝在專屬機器,沒有混搭其他服務
* 假設 Kafka 只用到 70% 帶寬資源(實際需要給其他進程預留)
* 實際情況,超過 70% 閾值會有網絡丟包的可能性
* 根據單機帶寬,計算 1h 內處理 1 TB 數據所需要的服務器數量
* 如果消息需要復制,那么需要額外再倍乘服務器數量
- 概覽
- 入門
- 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