选用linux的优势
操作系统
- I/O 模型的使用
- 数据网络传输效率
- 社区支持度
主流的 I/O 模型通常有 5 种类型:阻塞式 I/O、非阻塞式 I/O、I/O 多路复用、信号驱动 I/O 和异步 I/O。每种 I/O 模型都有各自典型的使用场景,比如 Java 中 Socket 对象的阻塞模式和非阻塞模式就对应于前两种模型;而 Linux 中的系统调用 select 函数就属于 I/O 多路复用模型;大名鼎鼎的 epoll 系统调用则介于第三种和第四种模型之间;至于第五种模型,其实很少有 Linux 系统支持,反而是 Windows 系统提供了一个叫 IOCP 线程模型属于这一种。
通常情况下我们认为后一种模型会比前一种模型要高级,比如 epoll 就比 select 要好。
说了这么多,I/O 模型与 Kafka 的关系又是什么呢?实际上 Kafka 客户端底层使用了 Java 的 selector,selector 在 Linux 上的实现机制是 epoll,而在 Windows 平台上的实现机制是 select。因此在这一点上将 Kafka 部署在 Linux 上是有优势的,因为能够获得更高效的 I/O 性能。并且linux上会用零拷贝技术,减少网络和磁盘传输的I/O操作。
磁盘
- 机械、固态、RAID如何选择
- 追求性价比的公司可以不搭建 RAID,使用普通磁盘组成存储空间即可。
- 使用机械磁盘完全能够胜任 Kafka 线上环境。
- 计算磁盘容量
- 例子:每天一亿条1KB大小的消息,保存两份且留存两周时间
- (消息条数一条消息平均大小备份数/1024/1024)(1+预留空间比例10%)保存天数*数据压缩比
- 1亿1KB2/1024/10241.1预留空间14天*0.75数据压缩比=2.25TB
- 需要考虑因素