kafka生产环境布署规划

一、操作系统的选型

目前布署kafka最多的三种操作系统:linux、 os x 、 windows

Linux 要比windows等其他操作系统更适合布署kafka,原因二点:

1、epoll  I/O模型的使用,在linux上能够获得比windows更高效的I/O处理性能;

2、Linux会采用零拷贝技术获得更高的数据网络传输效率(JDK8以后,windows已正式让FileChannel的transferTo方法调用TransmitFile函数,可以享受零拷贝技术带来的高效传输);

 

二、磁盘选择

1、选择SSD(固态硬盘)还是HDD(机械硬盘)?

机械硬盘是磁头寻道,随机I/O操作,很慢,但顺序I/O操作,机械硬盘也是不弱的;

kafka是顺序写磁盘的,所以从磁盘的使用上看,两者并不会有存在着巨大的差异;

对于预算有限又追求高性价比的公司而言,机械硬盘完成可以胜任kafka的存储任务,当然SSD更好

2、使用JBOD(一堆普通磁盘) 还是RAID(磁盘阵列)?

  • 能用得起RAID最好,追求性价比的公司可以考虑使用 JBOD,
  • 另外推荐用户为每个 broker 都配置多个日志路径,每个路径都独立挂载在不同的磁盘上,这使得多块物理磁盘磁头同时执行物理 I/O 操作,可以极大地加速 Kafka 消息生产的速度。
  • 最后关于磁盘的一个建议就是,尽量不要使用NAS这样的网络存储设备,性能很差,不比一台笔记本电脑的硬盘强多少,平时延时有很大的不稳定性。

 

三、磁盘容量规划

Kafka 的每条消息都保存在实际的物理磁盘中,这些消息默认会被 broker 保存 段时间]之后清除 段时间是可以配置的,因此用户可以根据自身实际业务场景和存储需求来大致计算线上环境所 需的磁盘容量,所以下面举个例子来说明:
 
clients每天会产生1亿条消息,每条消息保存两份并保留一周时间,平均一条消息的大小是1KB,那kafka需要规划多少磁盘空间呢?
每天产生的消息占用:1亿*2 *1KB =2亿KB,换算成GB差不多是190GB,如下图,我们还要额外预留10G左右的空间用于其他数据文件的存储,比如索引文件等,因此在这种场景下每天新发送的消息总占用为约等于200GB左右;
kafka生产环境布署规划_第1张图片
因为要保存一周:200GB*7 = 1.4 TB,当然这是在无压缩的情况,如果clients启用了消息压缩,我们预估一个平均压缩比(0.5),那整体的磁盘容量就是0.7TB。
 
总结一下磁盘容量相关的因素:
1、新增消息数量;
2、消息留存时间;
3、副本数;
4、是否启用压缩;
 
 

四、内存规划

首先讲一下kafka是怎么使用内存的,kafka虽然会持久化每一条消息,但其实这个工作是操作系统底层的文件系统来完成的,kafka仅将消息写入page cache,之后将消息“冲刷”到磁盘的任务完成交由操作系统完成。
另外consumer在读取消息时也首先尝试从该区域中查找,如果直接命中则完全不用执行耗时的物理I/O操作,从而提升了consumer的整体性能;无论是缓冲已发送消息还是待读取消息,操作系统都要先开辟一块内存区域用于存放接收的kafka消息,因此这块内存区域大小的设置对于kafka的性能就显得尤为关键了。

内存建议:

  • 尽量分配更多的内存给操作系统的 page cache
  • 不要为 broker 设置过大的堆内存,最好不超过 6GB
  • page cache 大小至少要大于一个日志段的大小,确保直接命中。
 

五、CPU规划

kafka不属于计算密集型系统,追求多核而非高时钟频率。

建议:

  • 使用多核系统, CPU 核数最好大于8。
  • 如果使用 Kafka 0.10 0.0 之前的版本或 clients 端与 broker 端消息版本不一致(若无显式 配置,这种情况多半由 clients broker 版本不一致造成),则考虑多配置 些资源以防止消息解压缩操作消耗过多 CPU。

六、带宽规划

首先kafka是通过网络传输大量数据的,所以带宽资源至关重要,并且特别容易成为系统的瓶颈,所有低延时的网络以及高带宽有助于实现kafka集群的高吞吐量以及用户请求处理低延时。

下面举例说明如何根据自身网络条件和带宽来评估 Kafka 集群机器数量

网络环境中使用的是1Gb/s的带宽,用户的业务目标是每天1小时处理完成1TB的业务消息,我们计算一下需要多少台机器;

首先计算单台broker能使用的带宽:

1Gb/s * 70%(单台分配70%的带宽资源给kafka)* 1/3(防止峰值把网卡打满)  ≈ 240Mb/s    注:1Gb/s = 1024Mb/s (每秒兆比特,注意与平常使用的兆字节MB单位区分)

1TB的业务数据 = 1048576 MB/3600秒 ≈ 291MB/s,即要处理完这些消息,要每秒处理完成291MB的数据,换算成Mb,以1MB = 8Mb的公式换算,就是291 *8 =2328Mb/s 。

2328/240 ≈ 10台broker机器,如果副本是2,这个数据还要翻一倍,即20台borker机器。

我们对带宽资源规划的建议如下
  • 尽量使用高速网络。
  • 根据自身网络条件和带宽来评估 Kafka 集群机器数量。
  • 避免使用跨机房网络。

七、典型线上环境配置

下面给出一份典型的线上环境配置,用户可以参考这份配置以及结合自己的实际情况进行二次调整:

  • CPU 24 核
  • 内存 32GB
  • 磁盘 lTB 7200 SAS 盘两块
  • 带宽1Gb/s
  • ulimit -n 1000000
  • Socket Buffer 至少64KB,适用于跨机房网络传输

你可能感兴趣的:(kafka)