Kafka 两个高性价比的参数调优

用户头像
大数据学徒
关注
发布于: 2020 年 07 月 24 日
Kafka两个高性价比的参数调优

Kafka 集群上的流量越来越大,有些用到Kafka的应用在压测时,发现性能波动较大(具体指标是produce请求的响应时间),因此需要进行问题定位和性能调优。

其实有些参数需要调优是已知的,只不过集群压力不大时没有动力去做,现在时机成熟了。



Kafka 版本:2.0.0

测试集群配置:三台机器,机器上无其它服务



本文主要介绍两个参数调优的方法和效果,一是IO线程数,二是Java Heap大小。

num.io.threads 参数调优

根据我的粗浅理解,Kafka 的 IO 线程就是实际上处理请求的线程。



我们监控了集群的JMX指标,从监控上看,有些机器的 IO 线程空闲百分比已经比较低了(小于0.3,这里名字不太准确,其实是小于 30%的意思,流量大的时候这个值更小):

看起来需要增加线程数量,对应的参数为 num.io.threads,根据官方文档:https://kafka.apache.org/20/documentation.html#brokerconfigs,这个参数的默认值是8,从Ambari里查看也确实是这个值,调整生产集群前需要先在测试环境验证一下。

测试验证

  1. 未调整参数时,依次逐个在多台测试机器上启动kafka-producer-perf-test脚本,观察IO线程空闲比的变化,随着发送消息的机器数增多,这个参数应该会不断下降,当下降到0或非常接近0时停止启动脚本,记下此时测试机的数量,11台机器。

# 参考命令
$ kafka-producer-perf-test --topic test --num-records 1000000000 --throughput -1 --record-size 12000 --producer-props bootstrap.servers=xxxx:9092 acks=0 batch.size=1
# throughput 设为-1是为了让它能发多快发多快
# num-records 设为很大的值,让测试持续足够的时间
# acks 设为0也是为了提高发送速率
  1. 调整参数,将 num.io.threads 从 8 修改为16,调整一台重启一台,两次重启之间间隔一段时间,避免服务中断;

  2. 同样在11台测试机上,执行上面的测试命令,参数保持一致,观察IO线程空闲比指标的变化。

修改参数前:

修改参数后:

可以看到,调整了 num.io.threads 后,以同样的压力向集群发送数据,IO线程的空闲比稳定在0.4左右,而不是之前的0,说明调整此参数是有效的。

Java Heap 调优

Kafka broker 默认的堆大小是1G,不是很大,感觉是需要增大一点的,同样的,在调整前后需要观察一下相关的指标,这里我选择GC相关的指标。

使用 jstat 查看 GC 情况

对某个Java进程使用jstat命令时,要使用启动该Java进程的用户,不然root也没用。

登录到某台broker上,先用 ps 获取到 Kafka 的进程号,一般Kafka进程是kafka用户起的,切换到kafka用户:

$ sudo -iu kafka
# 如果切换不了的话,可以使用下面这个命令:
$ sudo -u kafka bash -c "jstat xxx"

接下来就可以使用 jstat 命令了,jstat 参数挺多,此处不一一列举,我就用一个我觉得有用的:

$ jstat -gcutil <pid> <interval> <count>
# 表示查看pid这个进程的gc情况,每interval打印一次,打印count次

实际的执行结果:

$ jstat -gcutil 3361 1000 10
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 100.00 80.90 70.99 98.06 95.36 4530 70.406 0 0.000 70.406
0.00 100.00 92.49 70.99 98.06 95.36 4530 70.406 0 0.000 70.406

每一列的含义:

看起来比较值得关注的两个指标是 YGC 和 YGCT,需要在调整Java Heap大小前后观察这两个指标的变化。

在Ambari中调整Kafka Java Heap的方法是,在Advanced kafka-env下修改kafka-env template,添加一行:

export KAFKA_HEAP_OPTS="-Xmx6G -Xms6G"

从1G增大到6G。

调整前后YGC和YGCT的变化如下表所示:

从结果看,增大Heap确实减少了Young GC的次数和时间。



公众号:dashujuxuetu

发布于: 2020 年 07 月 24 日 阅读数: 25
用户头像

大数据学徒

关注

活到秃学到秃 2019.01.08 加入

专注大数据运维开发

评论

发布
暂无评论
Kafka两个高性价比的参数调优