Как установить параметры Java для Kafka?

Я экспериментировал с Kafka и видел из документации на главном сайте, что вы можете установить разные параметры для jvm, как размер кучи, и сборщик мусора, который он использует:

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

Однако он не говорит, как установить/установить эти параметры. Приложение поставляется с каталогом /config, содержащим большое количество файлов, используемых для целей конфигурации, но не для Java. Он также содержит каталог /bin, содержащий кучу скриптов для Kafka, но опять же, ничего действительно не указывает, как настроить Java.

Итак, мой вопрос: как настроить параметры Java, которые использует Kafka? Это делается через файл или есть другой способ?

Ответы

Ответ 1

Я не согласен с принятым ответом. Изменение script в каталоге bin крайне не рекомендуется. При обновлении Kafka до следующей версии извлечение новых двоичных файлов переопределит изменения, сделанные в script.

Предпочтительным способом является установка переменной среды KAFKA_HEAP_OPTS вне script.

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

Если var задан перед запуском Kafka через script, он будет использовать var вместо значений по умолчанию, определенных в /bin/kafka-server-start.sh

Ответ 2

Другой способ сделать это - изменить информацию, записанную в /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"

Ответ 3

Глядя на 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

Ответ 4

Вы можете передать java-параметры из командной строки. Например.

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

Для конфигурации сервера производства вы можете создать файл свойств или установить их в коде, создав

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

И затем подайте их производителюConfig

ProducerConfig config = new ProducerConfig(props);

Ответ 5

Каков наилучший способ расчета размера кучи?, я имею в виду, как мы пришли к выводу, как, скажем, для 16 ГБ оперативной памяти EC2, это будет лучший размер кучи!