Kafka参数配置
目的
Kafka为IO型组件,需要调整broker处理消息及磁盘IO的线程数,根据实际场景选择是否使用压缩算法及使用何种压缩算法,同时注意结合磁盘数量设置Kafka的partition数量。
方法
在Kafka服务的Web界面搜索以下参数并修改:
参数 |
建议值 |
描述 |
---|---|---|
num.network.threads |
128 |
broker处理消息的最大线程数,主要处理网络IO,读写缓冲区数据。由于当前Kafka主要是网络瓶颈,所以该参数影响特别大。该参数默认值为3,此时对Kafka性能有决定性影响,当不断调大此参数时,性能会有比较大的提升。该参数的建议值是核数+1,但实际由于网卡瓶颈,该参数调到一定程度后对性能几乎没有影响。为了方便调试,我们可以直接将该参数定为核数+1甚至定为最大值(128)。 |
num.io.threads |
65 |
broker处理磁盘IO的线程数,由于目前Kafka是网络瓶颈,所以磁盘IO的线程数影响并不是很大。目前典型场景单broker部署了23个Kafka盘,均为SAS盘,单盘性能较强。实际3~4个盘,就可以将网络IO跑到瓶颈,所以理论上IO线程数的修改对性能影响非常有限。该参数默认值为8,最高可以调到256。 |
compression.type |
根据实际场景调整。 |
Kafka压缩算法选择。可以配置为producer(由client生产者决定)、None(不压缩)、gzip、Snappy、lz4。实测几种压缩算法lz4与Snappy表现较好,gzip尽量不选择。但在大多数场景下,还是不压缩更加有优势。压缩算法有时候是双刃剑,并不一定能带来比较好的收益,需要在系统场景中综合考虑使用。 |
partitions |
根据磁盘数量调整,一般为磁盘的1~2倍。 |
Kafka topic的分区数,该参数与topic强相关,即Kafka数据保存的分区数目,一般要比盘总数大,以保证每个盘都有IO读写。但实际情况硬盘IO没有瓶颈,所以请根据实际情况调整参数。 |