Kafka如何安装部署


Kafka如何安装部署

生产中Kafka都是集群部署,且需要考虑各种因素,最终再根据业务需求制定。那么需要考虑哪些因素呢,我们分别从操作系统、磁盘、磁盘容量、带宽等方面来讨论。

操作系统

Kafka是Scala语言编写而后编译成.class字节码运行在Java虚拟机上,是跨平台的。目前常见的操作系统主要是Linux、Windows、MacOS。一般来说服务器应用都是部署在Linux上,主要因为Linux在I/O模型的使用、数据网络传输效率、社区支持度上更有优势。

I/O模型

常见的I/O模型主要有5种:阻塞I/O模型(BIO)、非阻塞I/O、I/O多路复用、信号驱动I/O、异步I/O。这五种I/O模型按照顺序排序,异步I/O最高级。Kafka客户端底层用的是Java的selector,selector在Linux上的实现是epoll,在Windows上是select,显然epoll更好,所以Kafka部署在Linux要比Windows好。而MacOS估计很少有人用来部署服务器,直接忽略好了。

数据网络传输效率

Kafka生产者和消费者消息是通过网络传输,消息又是保存在磁盘上,这样Kafka就需要在磁盘和网络之间进行大量的数据传输。在Linux上零拷贝(Zero Copy)技术就可以避免磁盘和网络进行传输时进行大量的内核态数据拷贝,大大提升性能。而Windows上要在Java 8 的 60 更新版本才支持。所以选择Linux上部署,可以享受零拷贝带来的高性能。

社区支持度

社区目前对Windows平台上发现的Kafka Bug不做任何承诺,一般是不会去修复的。因此Windows 平台上部署 Kafka 只适合于个人测试或用于功能验证,千万别应用于生产环境。

磁盘

Kafka大量使用磁盘,但是只要Topic分区不要过多,Kafka都能利用顺序读写保证很高的读写速度。所以相比与昂贵的SSD,物美价廉的机械硬盘是比较合适的选择。

Kafka通过分区,软件层面实现了负载均衡、高可靠、高伸缩性,可不用磁盘阵列RAID,性价比更高。

磁盘容量

Kafka消息保存在磁盘上,这些消息会保存一段时间后被自动删除。这个时间是可配置的,默认保存时间是7天。知道了这个规则,我们就可以进行一番计算,大概就能估量磁盘的容量了。举个例子:

假如每天总共向配置为分区副本数是2,消息保存时间是7天的Kafka集群发送10G大小的消息,那么需要140G的磁盘空间。正常情况下,Kafka还需要存储其它的数据,比如索引数据等。假如预留10%的空间,那么需要140G * 14 = 1960G。不要忘记Kafka是支持消息压缩的,假设开启压缩且压缩比是0.8,那么规划的磁盘空间需要1960G * 0.8 = 1568G,也就是1.5T左右。

总结以下,做容量规划需要考虑的几个因素:

  • 新增消息量
  • 消息保留时长
  • 副本数
  • 是否开启压缩

带宽

Kafka通过网络传输数据,带宽很容易成为性能瓶颈。一般的公司都是千兆网络也就是1Gbps(注意这里的b是bit)。

假如业务需要Kafka集群在一小时内处理1TB的数据,我们来计算计算,需要多少台Kafka节点。

一般情况下带宽占用超过70%有丢包的可能性,所以带宽最多只能使用700Mb。但是最好不要让Kafka用那么多带宽,假如预留2/3带宽资源,那么可用带宽就是233Mb左右。那么一台Kafka节点一小时内能处理的数据量是133Mb * 60 * 60 / 8 约为100G左右。1TB数据处理就需要10个Kafka节点。不要忘记了,副本拷贝也是需要占用带宽的,假如副本数为2,那么需要的节点数就是20个了。

通过这种方式去规划Kafka节点个数是比较合理的方式,所以千万不要拍脑袋然后事后调整哦。

小结

Kafka部署考虑的因素:

  1. 操作系统:主要考虑I/O模型、数据网络传输效率、社区支持度方面,建议部署在Linux。
  2. 磁盘:Kafka自身优势,使用物美价廉的机械硬盘即可,且无需RAID。
  3. 磁盘容量:考虑新增消息量、消息保留时长、副本数、压缩等主要因素,建议预留20%~30%磁盘空间。
  4. 带宽:根据带宽情况、业务SLA目标规划集群节点数量,切记预留足够的带宽资源防止丢包。

文章作者: maybe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 maybe !