既然是集群,必定涉及到多Kafka节点机器,单台机器构成的伪集群只能在日常测试中使用,无法满足线上实际需求。考虑因素:
- 操作系统
- 磁盘
- 磁盘容量
- 带宽
操作系统
- IO 模型的使用:Kafka 底层使用 Java 的 selector,selector 在 Linux 的实现机制是 epoll,在 Windows 的实现机制是 select,因此在这点上 Kafka 部署在 Linux 有优势。
- 网络传输上:Linux 的 零拷贝技术 给 Kafka 的部署带来快速数据传输的优点。
- 社区支持度:社区在 Windows 上发现的 Kafka bug 不做任何承诺;
磁盘
- 机械硬盘成本低容量大易损坏,固态硬盘 SSD 单价高性能优势大;
- 建议使用机械硬盘 HDD:Kafka 是顺序读写,规避了机械硬盘最大的劣势也就是随机读写慢;机械硬盘价廉物美;
- 是否使用磁盘阵列-RAID:
- RAID 提供冗余的磁盘存储空间和负载均衡;
- 追究性价比的公司可不搭建 RAID,使用普通磁盘组成存储空间即可;
- Kafka 本身就有软件层面的负载均衡机制;
磁盘容量
- 规划磁盘容量需要考虑:1. 新增消息数;2.消息留存时间;3.平均消息大小;4.备份数;5.是否启用压缩;
带宽
- 假设是千兆网络 1Gbps。场景是:1h 处理1TB 数据。则需要多少台 Kafka 服务器 完成这个业务呢?
- 带宽是 1Gbps,一秒钟处理1Gb数据,由于真实环境中可能还部署有其他服务,所以要为其他进程或者应用预留一些空间,假设给 Kafka 的是 70% 也就是 700Mbps(再多的话恐怕会丢包等)
- 700Mbps 是能使用到的最大资源,通常需额外预留 2/3 的资源,也就是平常可用 700*1/3 ≈ 240Mbps(为 follower 预留带宽);
- 这样 1h 处理 1TB,即 2336Mbps(1024*1024/3600 *8),则需要约 10 台服务器资源,一般会有 2 台备份,则需要 30 台。这里的服务器就是指 broker