我一直在尝试使用Kafka,并从主站点上的文档中看到,您可以为jvm设置不同的选项,例如堆大小和它使用的垃圾收集器:
http://kafka.apache.org/documentation.html#java
然而,它没有说是如何/在何处设置这些选项。该应用程序附带一个/ config目录,其中包含许多用于配置目的但没有用于Java的文件。它还带有一个/ bin目录,其中包含一堆用于Kafka的脚本,但同样没有真正说明如何配置Java。
所以我的问题是,如何配置Kafka使用的Java选项?它是通过文件完成还是以不同的方式完成?
答案 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使用以下变量:
您可以通过以下方式运行:
:)
答案 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);