JVM的推荐设置如下所示
-Xmx8g -Xms8g -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80
我的问题是 - 如何为Kafka设置上述Java选项?
我知道我们可以确定
export KAFKA_HEAP_OPTS="-Xmx8G -Xms8G"
但不确定我们是否可以附加整条线
"-Xmx8g -Xms8g -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80"
到KAFKA_HEAP_OPTS变量
参考 - https://community.hortonworks.com/articles/80813/kafka-best-practices-1.html
你可以查看kafka-run-class.sh
,在这里你可以看到kafka用来启动java进程的env变量:
$KAFKA_HEAP_OPTS
$KAFKA_JVM_PERFORMANCE_OPTS
$KAFKA_GC_LOG_OPTS
$KAFKA_JMX_OPTS
$KAFKA_LOG4J_OPTS
然后它运行java应用程序传递它们:
nohup $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS....
基本上env变量的内容只是按原样附加到命令中,只要jvm参数的顺序正确,放置设置的位置并不重要。
所以,你可以简单地改变$KAFKA_HEAP_OPTS
然后保持变量名称与他们的内容一致我将-Xmx8g -Xms8g
放在KAFKA_HEAP_OPTS
和剩余的优化到KAFKA_JVM_PERFORMANCE_OPTS
。
如你所述,-Xmx8G -Xms8G
应使用KAFKA_HEAP_OPTS
设置。
对于您列出的其他配置,您应该使用KAFKA_JVM_PERFORMANCE_OPTS
。
我不知道有清楚描述所有支持的环境变量的地方。最好的方法是检查kafka-run-class.sh
工具,因为它被所有工具调用,包括kafka-server-start.sh
。
例如:
KAFKA_HEAP_OPTS
用于https://github.com/apache/kafka/blob/trunk/bin/kafka-run-class.sh#L232-L234KAFKA_JVM_PERFORMANCE_OPTS
用于https://github.com/apache/kafka/blob/trunk/bin/kafka-run-class.sh#L236-L239