如何为Kafka设置Java选项?

时间:2014-12-28 23:03:08

标签: java apache-kafka

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

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

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

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

6 个答案:

答案 0 :(得分:55)

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

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

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

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

答案 1 :(得分:13)

另一种方法是修改用/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"

答案 2 :(得分:5)

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

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

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

:)

答案 3 :(得分:1)

您还可以通过服务定义来设置此参数,如下所示。

[Unit]
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
Environment="KAFKA_HEAP_OPTS=-Xmx4G"
Environment="KAFKA_JMX_OPTS=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true"
Environment="JMX_PORT=9999"

[Install]
WantedBy=multi-user.target

答案 4 :(得分:1)

要添加通用JVM设置(例如用户时区),可以使用KAFKA_OPTS中的kafka-run-class.sh环境变量:

# Generic jvm settings you want to add
if [ -z "$KAFKA_OPTS" ]; then
  KAFKA_OPTS=""
fi

答案 5 :(得分:0)

您可以从命令行传递java参数。 E.g。

java -server -Xms3072m -Xmx3072m -XX:NewSize=256m -XX:MaxNewSize=256m  -classpath <long list of jars> foo.class

对于`生产服务器配置,您可以创建属性文件或通过创建

在Code中设置它们
 Properties props = new Properties();
 props.put("serializer.class", "kafka.serializer.StringEncoder");

然后将它们提供给producerConfig

ProducerConfig config = new ProducerConfig(props);