1、操作系統、磁盤、磁盤容量和帶寬
操作系統:linux|windows
1> I/O模型
阻塞式I/O、非阻塞式I/O、I/O多路複用、信號驅動I/O和異步I/O。通常後一種模型比前一種模型高級,比如epoll比select好。而kafka客戶端底層使用了java selector,在linux中實現機制是epoll,在windows上是select,所以,在linux上會有更高的I/O性能。
2> 網絡傳輸效率
kafka消息保存在磁盤上,而消費者和生產者消息都是通過網絡傳輸的。因此,kafka需要在磁盤和網絡間進行大量數據傳輸。而linux上實現了零拷貝技術。
磁盤:機械磁盤|固態硬盤
機械磁盤的優缺點:便宜、隨機讀寫操作慢、易損壞導致可靠性查
固態硬盤:價格昂貴、隨機讀寫快
kafka的日誌讀取多是順序讀寫、而且kafka存在分區副本的概念,避免了可靠性差的問題,選擇機械磁盤
3> 磁盤容量
需要考慮:新增消息數、單條消息的大小、消息保存時間、備份數、是否壓縮等
比如:每條消息512kb,每天新增1000條消息,平均保存7天,需要3個broker,不採用壓縮。0.5*1000*7*3 = 10.5G。還需要給索引數據等預留磁盤。
4> 帶寬
加入帶寬是1Gbps的千兆網絡,kafka需要每秒處理2000M的數據,那麼需要多少臺服務器部署呢?
最大帶寬是1Gbps,kafka介於流量峯值和丟包的情況,使用帶寬的2/3。這臺服務器最大的帶寬是700M,還需要根據服務器判斷是否預留出多少資源。假設佔據500M,而副本數是3,則需要2000MT/500M*3 = 12臺
2、集羣參數的配置
Broker端參數
1、log.dirs:home/kafka1,home/kafka2 且使這些目錄掛載在不同物理磁盤,能夠提升讀寫性能和故障轉移。
2、listeners:<協議名,主機名,端口號>
3、advertised.listeners:<協議名,主機名,端口號>
類似於內網地址和外網地址,主機名使用IP和主機,選擇主機名。Broker源碼中使用主機名,使用ip,可能出現連接失敗
4、auto.create.topics.enable:是否允許自動創建主題。
5、unclean.leader.election.enable:是否允許不一致副本被選舉爲首領副本
6、auto.leader.rebalance.enable:是否允許定期選舉首領
7、log.retention.{ms|minutes|hours}:控制數據保存多長時間
8、log.retention.bytes:指定Broker爲消息保存的總磁盤容量大小
9、message.max.bytes:控制broker能夠接收的最大消息大小
Topic級別參數:
Broker類似於一般性的值,對Broker上的所有Topic生效,而Topic則是指定自身的特殊值。
1、retention.ms:Topic消息保存的時長,默認爲7天
2、retention.bytes:Topic預留的磁盤空間。默認值爲-1,無限使用磁盤空間
3、max.message.bytes:決定broker能夠接受的最大的消息大小
創建Topic和修改Topic時都可以設置
參考某平臺《Kafka核心技術與實戰》課程,總結