Kafka实战(7)-究竟该如何部署Kafka集群?

2022-11-30 15:26:13 浏览数 (1)

生产环境需考量各种因素,结合自身业务需求而制定。看一些考虑因素(以下顺序,可是分了顺序的哦)

1 OS

Kafka由Scala/Java编写,编译后源码是“.class”文件。部署到啥OS应该一样,但部署在Linux生产环境肯定最多,why?主要是如下方面更佳:

1.1 I/O模型

I/O模型,即os执行I/O指令的方法。主流的I/O模型:

  1. 阻塞式I/O e.g. Java中Socket的阻塞模式
  2. 非阻塞式I/O e.g. Java中Socket的非阻塞模式
  3. I/O多路复用 e.g. Linux中的系统调用select函数
  4. 信号驱动I/O e.g. epoll系统调用,介于第3、4种模型
  5. 异步I/O e.g. 很少有Linux支持,Windows系统提供IOCP线程模型

Kafka Client 底层使用Java的selector,而selector在:

  • Linux上的实现机制是epoll
  • Windows平台上的实现机制是select

Kafka部署在Linux上更有优势,能获得更高效I/O性能。

1.2 网络传输效率

Kafka生产和消费的消息都通过网络传输,但消息保存在磁盘。故Kafka需在磁盘、网络间进行大量数据传输。在Linux部署Kafka能享受到零拷贝技术带来的快速数据传输特性。

而Windows要等到Java 8的60更新版本才能有此福利。

1.3 生态

社区对Windows平台上发现的Kafka Bug不做任何承诺。

2 磁盘

2.1 机械硬盘 or SSD

  • 前者便宜且容量大,但易坏
  • 后者性能优势大,但贵

建议普通机械硬盘:

  • Kafka虽大量使用磁盘,可大多是顺序读写,一定程度规避机械磁盘最大劣势:随机读写慢。使用SSD并无太大性能优势,机械磁盘物美价廉
  • 易损坏而造成的可靠性差等缺陷,由Kafka在软件层面提供机制保证

2.2 是否应使用磁盘阵列(RAID)

主要优势:

  • 提供冗余的磁盘存储空间
  • 提供负载均衡

但Kafka:

  • 自己实现了冗余机制,提供高可靠
  • 通过分区,也能在软件层面实现负载均衡

RAID优势就不明显了。

综上:

  • 追求性价比的公司可不搭建RAID,使用普通磁盘组成存储空间即可
  • 机械磁盘完全能够胜任

2.3 评估磁盘容量

集群到底需要多大存储空间? Kafka需将消息保存在磁盘,这些消息默认会被保存一段时间,然后自动被删除。 虽然这段时间可配置,但应如何结合自身业务场景和存储需求来规划Kafka集群的存储容量?

假设业务

  • 每天向Kafka集群发送1亿条消息
  • 每条消息保存两份,以防止数据丢失
  • 消息默认保存两周时间

假设消息平均1KB,那Kafka集群需要为这个业务预留多少磁盘空间?

  • 每天1亿条1KB消息,存两份 1亿 * 1KB * 2 / 1000 / 1000 = 200GB
  • Kafka集群除消息数据,还存其他类型数据,如索引数据 再为其预留10%磁盘空间,总存储容量就是220GB
  • 存两周,整体容量 220GB * 14=3TB
  • Kafka支持数据压缩,假设压缩比0.75 最后规划存储空间0.75 * 3 = 2.25TB

规划磁盘容量时,需考虑:

  • 新增消息数
  • 消息留存时间
  • 平均消息大小
  • 备份数
  • 是否启用压缩

3 带宽

普通以太网络,带宽主要两种:

  • 1Gbps千兆网络(主流)
  • 10Gbps万兆网络

其实贷款规划,就是规划所需Kafka服务器数量。假设机房千兆网络1Gbps,业务目标或SLA是在1h内处理1TB业务数据。需多少台Kafka服务器完成这业务?

计算

带宽1Gbps,即每秒处理1Gb数据 假设每台Kafka服务器都是安装在专属机器,即每台Kafka机器上没有混入其他服务。通常你只能假设Kafka会用到70%带宽资源,因为总要为其他应用或进程留一些资源。

超过70%阈值就有网络丢包可能,故70%设定是合理值,即单台Kafka服务器最多也就能使用大约700Mb带宽。这只是它能使用的最大带宽资源,你不能让Kafka服务器常规就使用这么多资源,故通常再额外预留2/3资源,即 单台服务器使用带宽700Mb / 3 ≈ 240Mbps

有这240Mbps,计算1h内处理1TB数据所需的服务器数量。即每s处理2336Mb数据,除以240=10台服务器。 若消息还需额外复制两份,总服务器台数乘3=30台。

4 总结

部署Kafka环境,一开始就要思考好实际场景下业务所需的集群环境,不能仅从单个维度上进行评估。

参考

  • Linux内核模型架构
  • Kafka核心技术与实战

0 人点赞