1、操作系统

三个方面选择:

  • I/O 模型的使用
  • 数据网络传输效率
  • 社区支持度

五种 I/O 模型:阻塞式 I/O非阻塞式 I/OI/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 台机器。

0%