监控调优
JVM参数调优
Kafka的Broker
进程默认使用1GB
内存。
如何实施JVM调优,可以参考我写的《Java深度探索:开发基础、高级技术与工程实践》中《第4章 JVM GC》
的内容。
知道如何调整和优化JVM GC之后,就可以来修改Kafka的JVM参数了。
> cd /home/work/kafka_2.12-3.7.1/bin
> vi kafka-server-start.sh
# 调整下面的JVM参数就行了
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
这需要根据具体的业务场景和JVM GC压测结果来综合调整。
副本参数调忧
这里主要调整两个参数。
replica.socket.timeout.ms
:这个参数用于控制不同的Partition
之间Socket通信的超时时间,它默认值是30秒,可以根据实际网络情况调整。replica.lag.time.max.ms
:这个参数用于当某个副本没有向其Leader
节点发送任何请求,或者在指定时间内没有同步完成Leader
节点中的数据的话,那么Leader
会将这个节点从它的ISR
列表中删除,它的默认值是10秒,可以根据实际网络情况调整。如果这个参数值太小,会让Kafka陷入不停复制副本的恶性循环。
Log参数调优
这里的Log
并不是指的日志,而是Kafka的数据清除时机,主要就是log.retention.hours=24
这个参数,它的默认值为7天,极其浪费磁盘存储空间。
而且一般在生产环境中,会把Kafka的数据清洗后保存到HDFS,所以没有必要保留那么久。
Topic命名
除了指定明确的业务名称,可以给Topic
的名称加一些后缀,例如order_paying_r3p5
。
其中r3p5
表示这个Topic
创建时,给它指定的--replication-factor
(副本因子)为3,而--partitions
(分区的数量)为5。
这样的好处在于消费数据时就可以知道需要设置多少个Consumer
去消费效率会最高(两者数量保持一致,一一对应的情况下效率最高)。
但如果动态调整了Topic
的Partition
数量,那这个名称就可能会产生误导了。
监控工具
Apache官方并没有提供Kafka的Web UI
管理工具,但可以通过开源项目CMAK实现。
先下载CMAK已经编译好的安装包。
> cd /home/work
> wget https://github.com/yahoo/CMAK/releases/download/3.0.0.6/cmak-3.0.0.6.zip
> unzip cmak-3.0.0.6.zip
因为CMAK 3.0.0.6版本明确要求使用JDK 11,所以这里需要单独下载并解压好JDK 11。
然后修改CMAK 3.0.0.6启动脚本。
> cd /home/work/cmak-3.0.0.6/bin
> vi cmak
# 在文件开始处指定JAVA_HOME
JAVA_HOME=/usr/local/java/jdk-11.0.23
接着再修改它的配置文件。
> cd /home/work/cmak-3.0.0.6/conf
> vi application.conf
# 重新指定一个(这里的zookeeper和kafka集群使用的zookeeper可以不是同一个)
cmak.zkhosts="localhost:2181"
为能够在CMAK中看到Kafka的相关指标,所以要先修改一下Kafka的启动命令。
> cd /home/work/kafka_2.12-3.7.1
# 先停止服务
> cd ./bin/kafka-server-stop.sh
# 再启动kafka
> JMX_PORT=9527 ./bin/kafka-server-start.sh config/server.properties
# 或者以守护进程方式启动
> JMX_PORT=9527 ./bin/kafka-server-start.sh -daemon config/server.properties
最后启动CMAK。
> cd /home/work/cmak-3.0.0.6
> ./bin/cmak -Dconfig.file=conf/application.conf -Dhttp.port=9090
启动完成后在浏览器中即可访问http://172.16.185.176:9090。
首次启动时CMAK中是没有内容的,需要手动添加要管理的Kafka节点(单机或集群)。
只需要用鼠标单击它的Add Cluster
,然后选中Enable JMX Polling
和Poll consumer information
,其他默认不变就行。

然后就能看到Kafka的各项信息了。

感谢支持
更多内容,请移步《超级个体》。