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?)
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
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"
En regardant kafka-run-classh.sh - kafka utilise les variables suivantes:
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
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);