1、操作系统
三个方面选择:
- I/O 模型的使用
- 数据网络传输效率
- 社区支持度
五种 I/O 模型:阻塞式 I/O、非阻塞式 I/O、I/O 多路复用、信号驱动 I/O 和异步 I/O。
Linux 中的系统调用 select 函数就属于 I/O 多路复用模型;epoll 系统调用则介于第三种和第四种模型之间。
Linux 还可以使用 zero copy。
总结; 高性能只能选择 linux。
2、磁盘
总结:
- 追求性价比的公司可以不搭建 RAID。
- 使用机械磁盘完全能够胜任 Kafka 线上环境。
3、磁盘容量
规划磁盘容量的思考因素:
- 新增消息数
- 消息留存时间
- 平均消息大小
- 备份数
- 是否启用压缩
例如: 每一天 1 亿条 1KB 大小的消息,保存两份且存留两周的时间。
一天数据大小: 1 亿 * 1 KB * 2 份 / 1000 / 1000 = 200 GB
预留 10% 的磁盘空间: 200 GB * 1.1 = 220 GB
两周时间: 220 GB * 14 = 3 TB
开启了压缩比,比如 0.75: 3 TB * 0.75 = 2.25 TB
4、带宽
以 1Gbps 的千兆网络为例, 在 1 小时内处理 1TB 的业务数据,需要机器数?
带宽是 1Gbps,即每秒处理 1Gb 的数据,通常假设 Kafka 只能用到 70% 的带宽资源,毕竟其他进程也需要一些资源,也就是Kafka 最大只能使用 700MB 的带宽资源,常规性使用要预留 2/3,所以单台 Kafka 使用的带宽为 700 Mb / 3 = 240 Mbps。
1 个小时处理 1TB 数据, 1024 * 1024 / 3600 / (240 / 8) = 9.7 (注意 240 Mbps 是带宽,变为 MB 单位时,要除以 8)。
如果消息的副本数为 3,大约就是 30 台机器。