如何为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);