2014-12-28 16 views
15

Ich habe mit Kafka zu experimentieren und sah aus der Dokumentation auf der Haupt-Website, die Sie verschiedene Optionen für die Jvm wie Heap-Größe und der Garbage Collector zu setzen sind in der Lage, die es verwendet:Wie lege ich die Java-Optionen für Kafka fest?

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

Was es jedoch nicht sagt, ist wie/wo diese Optionen gesetzt werden. Die Anwendung wird mit einem Verzeichnis/config geliefert, das viele Dateien enthält, die für Konfigurationszwecke verwendet werden, aber keine, die für Java gedacht sind. Es kommt auch mit einem Verzeichnis/bin, das eine Reihe von Skripten für Kafka enthält, aber wiederum nichts, was wirklich angibt, wie Java zu konfigurieren ist.

Also meine Frage ist, wie konfiguriere ich die Java-Optionen, die Kafka verwendet? Ist es durch eine Datei oder gibt es einen anderen Weg?

Antwort

29

stimme ich mit der Antwort akzeptiert. Das Ändern eines Skripts im Verzeichnis bin ist sehr unrecommended. Wenn Kafka auf die nächste Version aktualisiert wird, werden durch das Extrahieren der neuen Binärdateien die im Skript vorgenommenen Änderungen überschrieben.

Der bevorzugte Weg sollte sein, die Umgebungsvariable KAFKA_HEAP_OPTS außerhalb des Skripts zu setzen.

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

Wenn die var gesetzt wird, bevor Kafka über das Skript starten wird es die var anstelle der Standardwerte in /bin/kafka-server-start.sh definiert verwenden

+0

Dem stimme ich zu. Ich denke zurück, als ich diese Frage gestellt hatte, konnte ich keine einzige Dokumentation finden, die erklärte, wie die Standardwerte geändert werden können, weshalb der Rückgriff auf das Ändern des Startskripts als die einzige Option zu der Zeit erschien. Es scheint, dass dies nicht der Fall ist, da dies außerhalb des Skripts gesetzt werden kann. Danke, dass du darauf hingewiesen hast. –

+0

Wie geht es dir bei Kafka Connect? – eddyP23

+0

Ich bin ein bisschen blind. Nachdem Sie etwas tiefer gegraben haben, finden Sie, dass 'connect-distributed'' 'kafka-run-class' 'verwendet, das exakt dieselbe' KAFKA_HEAP_OPTS' var verwendet. Das hier für andere blinde Menschen wie mich zu lassen. – eddyP23

2

Sie können Java-Parameter von der Befehlszeile übergeben. Z.B.

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

Für eine `Produktionsserverkonfiguration Sie eine Eigenschaft

indem Datei oder legen Sie sie in-Code erstellen können
Properties props = new Properties(); 
props.put("serializer.class", "kafka.serializer.StringEncoder"); 

Und dann, sie zu producerConfig liefern

ProducerConfig config = new ProducerConfig(props); 
+0

Für die Eigenschaftendatei, was das wie in Bezug auf die fi aussehen würde le selbst und in Verbindung mit dem Starten des Servers? Für die Code-Option, wo genau würde dieser Code gehen? Dies alles setzt voraus, dass ich das Skript kafka-server-start.sh verwende, um Kafka zu starten. –

+0

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

11

andere Art und Weise zu tun, Dies geschieht durch Ändern der in /bin/kafka-server-start.sh geschriebenen Informationen:

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" 

oder 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

Danke! Das ist, was ich getan habe. –

3

bei kafka-run-classh.sh Blick - kafka verwendet die folgenden Variablen:

$KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS Sie können es über laufen: 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

Aber wie genau wird die Konfiguration gemacht? – yakobom

+0

Sie können es laufen über _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

Ich mag es, wenn ppl anzeigt, wo es benutzt wird. Also, wenn sie eines Tages den Namen dieser Var ändern, habe ich einen Platz, in den ich mich begeben kann. Vielen Dank. – FaithReaper

Verwandte Themen