06kafka线上集群部署方案怎么做

Posted 2021-04-27 11:00 +0800 by ZhangJie ‐ 1 min read

分享:  

kafka线上集群部署,该怎么做呢?可以从下面几个大的方向入手。

操作系统选型

kafka是基于Java、Scala实现的跨平台的消息引擎系统,虽然是跨平台的,但是线上部署kafka用的最多的操作系统还是Linux,Window、macOS应该都非常少,可能只适合用来学习测试用,线上还是要尽量用Linux。

Linux操作系统的一些亮点:

  • IO多路复用技术,实现更加高效的网络IO操作;
  • 零拷贝技术,数据网络传输效率;
  • 应用部署广泛,社区支持度比较好;

关于零拷贝技术,公司同事allanpan写过一篇非常好的文章,可供参考:

磁盘选型

选机械硬盘呢,还是选固态硬盘呢?Kafka工作过程中比较多的方式是“顺序读写”操作,普通机械硬盘顺序读写效率已经比较高了,因此使用机械硬盘就可以了。

kafka使用机械硬盘,一个是性能上有也不会比使用固态硬盘差多少(应该是说固态硬盘也没什么优势),再一个是便宜,能降低成本。

另外要注意冗余,倒不是说就要用RAID,可以多加几个硬盘做冗余就行了。

磁盘容量

磁盘容量要根据业务当前现状,及未来发展情况,合理地规划存储容量。

可以从以下几个方面入手:

  • 写入的消息格式是怎样的,存储一条消息需要多少字节?
  • 当前业务一天需要写入多少消息,10w条,100w条,未来呢?
  • 消息希望保留多长时间,2周,1个月?
  • 磁盘冗余备份数是多少,2?3?
  • 使用启用压缩?用哪种压缩算法?压缩率多少?

小心评估上述每一个问题,最后就能给出一个相对比较合理地预估了,当然要留些buffer,以应对预料之外的情况。

网络带宽

当我们说带宽的时候,我们真正关心的是什么?我们要处理一批数据,比如kafka中的数据,每台机器都是千兆网卡,我们需要多少台机器的合力,才能保证对消息的高效处理。

So,每台机器的网卡带宽是固定的,我们关心的其实是处理一批数据我们需要多少台机器的问题。

根据消息生产速率,以及单条消息大小,可以很容易计算出每秒大约能生成多少数据,现在我们要处理这些数据,消息队列中的消息不能一直处于积压状态,那意味着处理速度跟不上生产,后面会处理地越来越不及时。

怎么办?就需要根据接受消息处理的速率,来评估大约需要机器来处理。而接收消息的速率,单机受限于网卡,用总的生产数据量(通常等于消费数据量)除以网卡带宽,就可以拿到一个比较粗糙的机器数量。

真实情况是,要为每台机器预留一定的贷款,比如每台机器70%的带宽用于处理数据,其他 的留给一些系统、网络服务等。