如何为Kafka设置Java选项?

我一直在尝试使用Kafka,并从主站点上的文档中看到,您可以为jvm设置不同的选项,例如堆大小和它使用的垃圾收集器:

http://kafka.apache.org/documentation.html#java

然而,它没有说的是如何/在何处设置这些选项。 该应用程序附带一个/ config目录,其中包含许多用于配置目的但没有用于Java的文件。 它还带有一个/ bin目录,其中包含一堆用于Kafka的脚本,但同样没有真正说明如何配置Java。

所以我的问题是,如何配置Kafka使用的Java选项? 是通过文件完成还是有不同的方式?

我不同意接受的答案。 修改bin目录中的脚本是非常不推荐的。 将Kafka升级到下一版本时,提取新二进制文件将覆盖脚本中所做的更改。

首选方法是在脚本外部设置环境变量KAFKA_HEAP_OPTS

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

如果在通过脚本启动Kafka之前设置了var,它将使用var而不是/bin/kafka-server-start.sh定义的默认值

另一种方法是修改/bin/kafka-server-start.sh写的/bin/kafka-server-start.sh

 export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" 

或者在/bin/kafka-run-class.sh

 KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true" 

查看kafka-run-classh.sh – kafka使用以下变量:

  • $ KAFKA_HEAP_OPTS
  • $ KAFKA_JVM_PERFORMANCE_OPTS
  • $ KAFKA_GC_LOG_OPTS
  • $ KAFKA_JMX_OPTS
  • $ KAFKA_LOG4J_OPTS

您可以通过以下方式运行:

 export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12346 -Dcom.sun.management.jmxremote.rmi.port=12346 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" bin/kafka-server-start.sh -daemon config/server.properties 

您可以从命令行传递java参数。 例如

 java -server -Xms3072m -Xmx3072m -XX:NewSize=256m -XX:MaxNewSize=256m -classpath  foo.class 

对于`生产服务器配置,您可以创建属性文件或通过创建在代码中设置它们

  Properties props = new Properties(); props.put("serializer.class", "kafka.serializer.StringEncoder"); 

然后将它们提供给producerConfig

 ProducerConfig config = new ProducerConfig(props);