web-dev-qa-db-fra.com

Comment définir les options Java pour Kafka?

J'ai expérimenté avec Kafka et vu de la documentation sur le site principal que vous êtes en mesure de définir différentes options pour le jvm comme la taille du tas et le garbage collector qu'il utilise:

http://kafka.Apache.org/documentation.html#Java

Ce qu'il ne dit pas, cependant, c'est comment/où définir ces options. L'application est livrée avec un répertoire/config contenant un grand nombre de fichiers utilisés à des fins de configuration, mais aucun pour Java. Il est également livré avec un répertoire/bin contenant un tas de scripts pour Kafka mais encore une fois, rien n'indique vraiment comment configurer Java.

Donc ma question est, comment puis-je configurer les options Java Java que Kafka utilise? Est-ce fait via un fichier ou existe-t-il une autre manière?)

34
Luis Medina

Je ne suis pas d'accord avec la réponse acceptée. La modification d'un script dans le répertoire bin est fortement déconseillée. Lors de la mise à niveau Kafka vers la prochaine version, l'extraction des nouveaux binaires remplacerait les modifications apportées dans le script.

La manière préférée devrait être de définir la variable d'environnement KAFKA_HEAP_OPTS en dehors du script.

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

Si le var est défini avant de démarrer Kafka via le script, il utilisera le var au lieu des valeurs par défaut définies dans /bin/kafka-server-start.sh

57
benny.la

Pour ce faire, vous pouvez également modifier les informations écrites en /bin/kafka-server-start.sh:

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

ou dans /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"
13
Salvador Dali

En regardant kafka-run-classh.sh - kafka utilise les variables suivantes:

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

Vous pouvez l'exécuter via:

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
5
mfedko

Vous pouvez passer les paramètres Java à partir de la ligne de commande. Par exemple.

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

Pour une configuration de serveur de production, vous pouvez créer un fichier de propriétés ou les définir dans Code en créant

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

Et puis les fournir au producteurConfig

ProducerConfig config = new ProducerConfig(props);
0
sol4me