Как установить параметры 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, это будет лучший размер кучи!