选用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
  • 需要考虑因素
    • 新增消息数
    • 消息留存时间
    • 平均消息大小
    • 备份数
    • 是否启用压缩

      带宽

      问题:
      假设你公司的机房环境是千兆网络,即 1Gbps,现在你有个业务,其业务目标或 SLA 是在 1 小时内处理 1TB 的业务数据。那么问题来了,你到底需要多少台 Kafka 服务器来完成这个业务呢?
      1.通常超过70%容易丢包
      2.通常要预留2/3资源(比较保守)
      3.单台可用700Mb/3 ~=240Mbps
      一小时处理1TB,即每秒处理2336MB,除以240MB,大约10台服务器,考虑到备份2份,再乘以3,即30台。

      总结

      image.png