温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
在使用Kafka服务的过程中,会随着数据量的增加而导致Kafka服务OOM的问题,本篇文章Fayson主要介绍如何合理的设置Kafka的Heap大小,以避免OutOfMemory问题。本篇文章适用于CDH5,6及Kafka的任何版本。
2.OOM症状
由于Kafka服务没有足够的堆内存来执行操作,导致Kafka的Broker崩溃。通过观察Kafka broker的stdout.log可以看到如下异常:
java.lang.OutOfMemoryError: Java heap space
Dumping heap to /tmp/kafka_kafka-KAFKA_BROKER-81ee01822c14b4c214806690e83e1e31_pid17226.hprof ...
Heap dump file created [11681362 bytes in 0.076 secs]
#
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="/usr/lib64/cmf/service/common/killparent.sh"
# Executing /bin/sh -c "/usr/lib64/cmf/service/common/killparent.sh"...
(可左右滑动)
接下里Fayson就介绍下怎么合理的设置Kafka的Heap大小。
3.Kafka Heap Size配置建议
要知道Kafka Broker至少需要多少的Java Heap大小,我们需要知道Kafka的相关信息,主要有如下几点:
1.每个Kafka Broker有多少个Partitions,关于Broker中的Partition数量可通过CM进行查看
2.通过CM配置界面查看replica.fetch.max.bytes的大小(默认为1MB)
3.通过CM配置界面查看message.max.bytes的大小(默认为1000000bytes)
知道上面的三个信息后,通过replica.fetch.max.bytes和分区数来计算Java Heap大小:不小于(replica.fetch.max.bytes * 分区数),确保分区数乘以最大消息的大小不超过你设置的heap。当然在Broker分区数比较少的情况下该方式也不适用,尤其在刚安装Kafka服务或者topic比较少的时候,这时可以采用cdh的默认值1GB。
Kafka Broker设置准则,有如下需要注意的地方:
1.replica.fetch.max.bytes必须大于message.max.bytes。
2.对于Kafka的生产集群,建议Heap的大小不低于4GB,因为较小的Heap可能会导致更频繁的GC暂停问题,反而会导致Broker的不稳定性和性能问题。
3.同样也建议Heap的大小不要超过8GB,因为Heap过大会导致更长的GC暂停。如果确定Heap要超过8GB,则应该考虑添加更多的Broker并在集群中进行Partiton的重分配。可参考Fayson前面的文章《如何实现Kafka的Partition重分配》
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操