2014-12-28 16 views
15

ho avuto modo di sperimentare con Kafka e vide dalla documentazione sul sito principale che siete in grado di impostare diverse opzioni per la JVM come dimensione heap e il garbage collector che usa:Come imposto le opzioni Java per Kafka?

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

Ciò che non dice, tuttavia, è come/dove impostare queste opzioni. L'applicazione viene fornita con una directory/config contenente molti file utilizzati per scopi di configurazione ma nessuno per Java. Inoltre viene fornito con una directory/bin contenente un gruppo di script per Kafka ma, ancora una volta, nulla indica realmente come configurare Java.

Quindi la mia domanda è, come posso configurare le opzioni Java utilizzate da Kafka? È fatto attraverso un file o c'è un modo diverso?

risposta

29

Non sono d'accordo con la risposta accettata. La modifica di uno script nella directory bin non è consigliata. Quando si aggiorna Kafka alla prossima versione, l'estrazione dei nuovi binari annullerebbe le modifiche apportate allo script.

Il modo migliore dovrebbe essere impostare la variabile di ambiente KAFKA_HEAP_OPTS al di fuori dello script.

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

Se il var è impostata prima di iniziare Kafka tramite lo script che utilizzerà il var invece dei valori di default definiti in /bin/kafka-server-start.sh

+0

Sono d'accordo con questo. Ripenso a quando ho fatto questa domanda, non sono riuscito a trovare un singolo pezzo di documentazione che spiegasse come modificare i valori predefiniti, motivo per cui ricorrere alla modifica dello script di avvio sembrava l'unica opzione al momento. Sembra che non sia il caso poiché questo può essere impostato al di fuori dello script. Grazie per averlo indicato. –

+0

Come si fa lo stesso per Kafka Connect? – eddyP23

+0

Sono un po 'cieco. Dopo aver scavato un po 'più a fondo, si scopre che 'connect-distributed' usa' kafka-run-class' che usa la stessa identica 'KAFKA_HEAP_OPTS' var. Lasciando questo qui per altre persone cieche come me. – eddyP23

2

È possibile passare i parametri java dalla riga di comando. Per esempio.

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

Per una configurazione server di `di produzione è possibile creare un file di proprietà o impostarle in codice con la creazione di

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

E poi fornirli a producerConfig

ProducerConfig config = new ProducerConfig(props); 
+0

Per le proprietà del file, che cosa sarebbe che assomigliano in termini di fi le stesso e insieme all'avvio del server? Per l'opzione di codice, dove andrebbe esattamente questo codice? Tutto ciò presuppone che io stia usando lo script kafka-server-start.sh per avviare Kafka. –

+0

@massivedynamic http://www.programcreek.com/java-api-examples/index.php?api=kafka.producer.ProducerConfig – sol4me

11

Un altro modo per farlo questo è modificando le informazioni scritte in /bin/kafka-server-start.sh:

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" 

o in /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" 
+0

Grazie! Questo è quello che ho finito per fare. –

3

Guardando kafka-run-classh.sh - Kafka usa la seguenti variabili:

$KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS è possibile eseguirlo tramite: 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.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" bin/kafka-server-start.sh -daemon config/server.properties

+0

Ma come viene eseguita esattamente la configurazione? – yakobom

+0

È possibile eseguire tramite _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.authenticate = false -Dcom.sun.management.jmxremote.ssl = false " bin/kafka-server-start.sh -daemon config/server.properties_ – mfedko

+0

Mi piace mostrare ppl dove viene utilizzato. Quindi se un giorno cambiano il nome di questa var, ho un posto dove guardare. Grazie. – FaithReaper

Problemi correlati