Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置Kafka的Java选项?_Java_Apache Kafka - Fatal编程技术网

如何设置Kafka的Java选项?

如何设置Kafka的Java选项?,java,apache-kafka,Java,Apache Kafka,我一直在试用Kafka,从主站点上的文档中可以看到,您可以为jvm设置不同的选项,比如堆大小和它使用的垃圾收集器: 但是,它没有说明如何/在何处设置这些选项。该应用程序附带了一个/config目录,其中包含许多用于配置的文件,但没有一个用于Java。它还附带了一个/bin目录,其中包含一系列Kafka脚本,但同样,并没有真正指明如何配置Java 所以我的问题是,如何配置Kafka使用的Java选项?它是通过文件完成的还是有其他方法?您可以从命令行传递java参数。例如 java -server

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

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


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

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

java -server -Xms3072m -Xmx3072m -XX:NewSize=256m -XX:MaxNewSize=256m  -classpath <long list of jars> foo.class
然后提供给producerConfig

ProducerConfig config = new ProducerConfig(props);

另一种方法是修改
/bin/kafka server start.sh中写入的信息:

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true"
# Generic jvm settings you want to add
if [ -z "$KAFKA_OPTS" ]; then
  KAFKA_OPTS=""
fi
或者在
/bin/kafka run class.sh中:

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true"
# Generic jvm settings you want to add
if [ -z "$KAFKA_OPTS" ]; then
  KAFKA_OPTS=""
fi

bin
目录中修改脚本是极不可取的。将卡夫卡升级到下一个版本时,提取新的二进制文件将覆盖脚本中所做的更改

首选的方法应该是在脚本外部设置环境变量
KAFKA\u HEAP\u OPTS

export KAFKA\u HEAP\u OPTS=“-Xmx1G-Xms1G”


如果在通过脚本启动Kafka之前设置了var,则将使用var而不是在
/bin/Kafka server start.sh

中定义的默认值查看Kafka-run-classh.sh-Kafka使用以下变量:

  • $KAFKA_HEAP_选项
  • $KAFKA\u JVM\u性能\u选项
  • $KAFKA\u GC\u LOG\u选项
  • $KAFKA_JMX_选项
  • $KAFKA_LOG4J_选项
您可以通过以下方式运行它:

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

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

[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

要添加通用JVM设置(例如用户时区),可以使用
KAFKA运行类.sh
中的
KAFKA\u OPTS
环境变量:

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true"
# Generic jvm settings you want to add
if [ -z "$KAFKA_OPTS" ]; then
  KAFKA_OPTS=""
fi

对于属性文件,从文件本身以及启动服务器的角度来看,它是什么样子的?对于“代码”选项,此代码将精确到哪里?这都是假设我正在使用kafka-server-start.sh脚本来启动kafka。@massivedynamic
ProducerConfig
不是关于Hanks的问题!这就是我最后做的,我同意这一点。回想一下,当我问这个问题时,我找不到一份文档来解释如何修改默认值,这就是为什么当时修改启动脚本似乎是唯一的选择。似乎情况并非如此,因为这可以在脚本之外设置。谢谢你指出这一点。但是你如何为卡夫卡连接做同样的事情?我有点盲目。深入挖掘后,您会发现
connect distributed
使用了
kafka run类
,该类使用了完全相同的
kafka_HEAP_OPTS
var。将此项留给其他像我这样的盲人。我正在运行Confluent 5.0.0,默认值设置为“-Xmx1G-Xms1G”
if[“x$kafka_HEAP_OPTS”=“x”];然后导出KAFKA_HEAP_OPTS=“-Xmx1G-Xms1G”fi
您可以通过sudo KAFKA_HEAP_OPTS=“-Xmx1G-Xms1G”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.ssl=false“bin/kafka-server-start.sh-daemon config/server.properties类似于ppl,显示它的使用位置。所以如果有一天他们改变了这个变量的名字,我就有一个地方可以调查。谢谢