kafka优化–JVM参数配置优化

原文:http://mdba.cn/2016/12/16/jvm%E5%8F%82%E6%95%B0%E9%85%8D%E7%BD%AE%E4%BC%98%E5%8C%96/

主要是启动脚本和log4j基本参数的设置和优化,这些参数藏的比较深。

1、JVM参数配置优化

如果使用的CMS GC算法,建议JVM Heap不要太大,在4GB以内就可以。JVM太大,导致Major GC或者Full GC产生的“stop the world”时间过长,导致broker和zk之间的session超时,比如重新选举controller节点和提升follow replica为leader replica。

JVM也不能过小,否则会导致频繁地触发gc操作,也影响Kafka的吞吐量。另外,需要避免CMS GC过程中的发生promotion failure和concurrent failure问题。CMSInitiatingOccupancyFraction=70可以预防concurrent failure问题,提前出发Major GC。

Kafka JVM参数可以直接修改启动脚本bin/kafka-server-start.sh 中的变量值。下面是一些基本参数,也可以根据实际的gc状况和调试GC需要增加一些相关的参数。

1
export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G -Xmn2G -XX:PermSize=64m -XX:MaxPermSize=128m  -XX:SurvivorRatio=6  -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly"

需要关注gc日志中的YGC时间以及CMS GC里面的CMS-initial-mark和CMS-remark两个阶段的时间,这些GC过程是“stop the world”方式完成的。

2、打开JMX端口

主要是为了通过JMX端口监控Kafka Broker信息。可以在bin/kafka-server-start.sh中打开JMX端口变量。

1
export JMX_PORT=9999

3、调整log4j的日志级别

如果集群中topic和partition数量较大时,因为log4j的日志级别太低,导致进程持续很长的时间在打印日志。日志量巨大,导致很多额外的性能开销。特别是contoller日志级别为trace级别,这点比较坑。

Tips 通过JMX端口设置log4j日志级别,不用重启broker节点
1
2
3
4
5
6
7
设置日志级别:
java -jar cmdline-jmxclient-0.10.3.jar - localhost:9999 kafka:type=kafka.Log4jController setLogLevel=kafka.controller,INFO
java -jar cmdline-jmxclient-0.10.3.jar - localhost:9999 kafka:type=kafka.Log4jController setLogLevel=state.change.logger,INFO
 
检查日志级别:
java -jar cmdline-jmxclient-0.10.3.jar - localhost:9999 kafka:type=kafka.Log4jController getLogLevel=kafka.controller
java -jar cmdline-jmxclient-0.10.3.jar - localhost:9999 kafka:type=kafka.Log4jController getLogLevel=state.change.logger

Kafka 是一个分布式的消息系统,它的性能和稳定性非常重要。优化 Kafka 配置参数可以提高 Kafka 的吞吐量和稳定性。以下是一些常用的 Kafka 配置参数优化建议: 1. `num.network.threads` 和 `num.io.threads` 参数控制 Kafka 网络和 I/O 线程的数量。建议将 `num.network.threads` 设置为 CPU 核心数的两倍,将 `num.io.threads` 设置为 CPU 核心数的一半。 2. `socket.send.buffer.bytes` 和 `socket.receive.buffer.bytes` 参数控制 Kafka 网络套接字的发送和接收缓冲区大小。建议将它们设置为 64KB 或更高。 3. `socket.request.max.bytes` 参数控制 Kafka 网络套接字的最大请求大小。建议将它设置为足够大的值,以支持你的最大消息大小。 4. `log.retention.bytes` 和 `log.segment.bytes` 参数控制 Kafka 消息日志的段大小和保留大小。建议根据你的磁盘大小和消息吞吐量,设置合适的值。 5. `num.partitions` 参数控制 Kafka 主题的分区数。建议将它设置为主题并发消费者数量的倍数。 6. `queued.max.requests` 参数控制 Kafka 生产者发送消息的批处理大小。建议将它设置为 1 或更高,以达到最佳的吞吐量和延迟。 7. `unclean.leader.election.enable` 参数控制当 Kafka 集群中的一个节点失效时,是否允许使用未同步的副本替代它。建议将它设置为 false,以确保数据的一致性。 8. `min.insync.replicas` 参数控制 Kafka 消息的最小同步副本数。建议将它设置为大于等于 2,以确保数据的可靠性和一致性。 以上是一些常用的 Kafka 配置参数优化建议,不同的应用场景可能需要不同的配置。建议根据实际情况进行调整和优化
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值