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 |
在当前Kafka环境中,网络已成为主要瓶颈,因此Broker处理磁盘IO的线程数对整体性能影响较小。目前典型情况下,单个Broker部署了23块SAS硬盘,单盘性能较强。实际上,仅需3~4块盘就能将网络带宽充分利用至极限,因此理论上调整磁盘IO线程数对整体性能提升作用有限。该参数默认值为8,最大可调至256。 |
compression.type |
根据实际场景调整。 |
Kafka压缩算法选择。可以配置为producer(由client生产者决定)、None(不压缩)、gzip、Snappy、lz4。实测几种压缩算法lz4与Snappy表现较好,gzip尽量不选择。但在大多数场景下,还是不压缩更加有优势。压缩算法有时候是双刃剑,并不一定能带来比较好的收益,需要在系统场景中综合考虑使用。 |
Partitions |
根据磁盘数量调整,一般为磁盘的1~2倍。 |
Kafka topic的分区数,该参数与topic强相关,即Kafka数据保存的分区数目,一般要比盘总数大,以保证每个盘都有IO读写。但实际情况硬盘IO没有瓶颈,所以请根据实际情况调整参数。 |