Kafka最佳实践+如何为JVM设置建议的配置

6
一种推荐的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


是的,你可以,在/bin/kafka-server-start.sh中看一下它是如何完成的。 - Paizo
Paizo,我有点困惑,请看@Michael的回答,他建议将其余的值放在KAFKA_JVM_PERFORMANCE_OPTS="-XX:MetaspaceSize=96m -XX:+UseG1GC-XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M-XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80"中。 - enodmilvado
@cricket_007非常感谢你的更新,我真的很感激。 - enodmilvado
2个回答

5
您可以查看kafka-run-class.sh,在这里您可以看到kafka用于启动Java进程的环境变量:

  • $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....

基本上环境变量的内容会被直接附加到命令中,只要JVM参数按正确顺序设置即可,实际上放置设置的位置并不重要。

所以,您可以简单地更改$KAFKA_HEAP_OPTS,但为了保持变量名称与其内容一致性,我建议将-Xmx8g -Xms8g放入KAFKA_HEAP_OPTS中,将其余优化放入KAFKA_JVM_PERFORMANCE_OPTS中。


1
你认为在kafka-env模板中设置以下内容怎么样,export KAFKA_JVM_PERFORMANCE_OPTS="-Xmx8g -Xms8g -XX:MetaspaceSize=96m -XX:+UseG1GC-XX:MaxGCPauseMillis=20 - XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M-XX:MinMetaspaceFreeRatio=50 - XX:MaxMetaspaceFreeRatio=80",这种语法是否正确,而不是将值分别放在两个变量中? - enodmilvado
不是因为默认会应用空值,而是因为如果为空,则会执行以下操作:if [ -z "$KAFKA_HEAP_OPTS" ]; then KAFKA_HEAP_OPTS="-Xmx256M" fi - Paizo
在这种情况下,我会更喜欢执行以下操作 - 导出KAFKA_HEAP_OPTS="-Xmx8g -Xms8g" 和导出KAFKA_JVM_PERFORMANCE_OPTS=" -XX:MetaspaceSize=96m -XX:+UseG1GC-XX:MaxGCPauseMillis=20 - XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M-XX:MinMetaspaceFreeRatio=50 - XX:MaxMetaspaceFreeRatio=80"。 - enodmilvado
你是否接受以上内容?(由于我使用Ambari,我将在kafka-env模板中设置两个变量) - enodmilvado
1
你可以放心,你可以使用 ps -aux | grep java 命令来验证实际调用情况。 - Paizo

3
正如您所提到的,应使用KAFKA_HEAP_OPTS设置-Xmx8G -Xms8G
对于您列出的其他配置,您应该使用KAFKA_JVM_PERFORMANCE_OPTS
我不知道所有支持的环境变量都清楚地描述在哪里。最好检查kafka-run-class.sh工具,因为它被所有工具调用,包括kafka-server-start.sh
例如:

@Michael,你能回答一下Paizo的问题吗?他好像不同意你的看法。 - enodmilvado
@enodmilvado 这里没有分歧。 - OneCricketeer
@Michael,你的回答也很好,我点了一个赞。 - enodmilvado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接