一、存儲空間計算
假設公司有個業務每天需要向 Kafka 集群發送 1 億條消息,每條消息保存兩份以防止數據丟失,另外消息默認保存兩周時間。現在假設消息的平均大小是 1KB,那么 Kafka 集群需要為這個業務預留多少磁盤空間?
每天 1 億條 1KB 大小的消息,保存兩份且留存兩周的時間,那么總的空間大小就等於 1 億 * 1KB * 2 / 1000 / 1000 = 200GB。
一般情況下 Kafka 集群除了消息數據還有其他類型的數據,比如索引數據等,故我們再為這些數據預留出 10% 的磁盤空間,因此總的存儲容量就是 220GB。
保存兩周容量即為 220GB * 14,大約 3TB 左右。
Kafka 支持數據的壓縮,假設壓縮比是 0.75,也就是0.75 * 3 = 2.25TB。
總結出,當部署kafka集群的時候需要考慮以下幾個元素:
- 新增消息數
- 消息留存時間
- 平均消息大小
- 備份數
- 是否啟用壓縮
二、帶寬
網絡大量進行數據傳輸的框架而言,帶寬特別容易成為瓶頸。特別是在跨機房的場景。
帶寬也主要有兩種:1Gbps 的千兆網絡和 10Gbps 的萬兆網絡,特別是千兆網絡應該是一般公司網絡的標准配置了。
千兆網絡為例,如何規划所需的 Kafka 服務器的數量。
帶寬是 1Gbps,即每秒處理 1Gb 的數據,假設每台 Kafka 服務器不是安裝在專屬的機器上,也就是說每台 Kafka 機器上混布其他服務,大概會用到 70% 的帶寬資源。
也就是說單台 Kafka 服務器最多也就能使用大約 700Mb 的帶寬資源,即最大帶寬資源是700Mb,通常要再額外預留出 2/3 的資源,即單台服務器使用帶寬 700Mb / 3 ≈ 240Mbps。
有了帶寬量就可以計算1 小時內處理 1TB 數據所需的服務器數量了。
如果我們每秒需要處理 2336Mb 的數據,除以 240,約等於 10 台服務器。如果消息還需要額外復制兩份,那么總的服務器台數還要乘以 3,即 30 台。
總結:
- 最大提供70%帶寬到kafka使用,避免大流量丟包
- 預留給kafka使用的帶寬,最好只使用到機器帶寬的1/3。
- 預計每秒會處理到的數據量