2017-01-06 5 views
1

Ich mache einen Testlauf mit Kafka mit dem Kommandozeilengenerator und Consumer.Kafka Command Line Producer/Consumer haben 1 Sekunde Latenz

Ich laufe dies in einem Terminal-Fenster

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic tag7 

und diese in einem anderen

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic tag7 --zookeeper localhost:2181 

aber es dauert mehr als 1 Sekunde für die Daten, die ich durch den Verbraucher gedruckt gesendet werden sollte. Die Daten, die ich sende ist, was ich beim Produzenten eintippe, also grundsätzlich alle paar Sekunden eine Nachricht. Gibt es Konfigurationsmöglichkeiten, die ich ändern kann, damit der Kafka-Broker nur sehr wenige Nachrichten pro Sekunde erwartet und dadurch die Nachrichten wesentlich schneller transportiert werden?

Ich verwende die Standardkonfigurationen von Zookeeper und Kafka, also habe ich nicht viel konfiguriert.

Vielen Dank im Voraus!

Antwort

1

Es gibt zwei Konfigurationsparameter für Kafka: Einer legt die minimale Datenmenge fest, die vor der Beantwortung der Kundenanfrage empfangen wird, und die andere legt die maximale Wartezeit fest, bis diese Daten ankommen, bevor die Anfrage beantwortet wird.

können Sie versuchen, folgende Optionen hinzuzufügen:

--consumer-property fetch.max.wait.ms=0 --consumer-property fetch.min.bytes=0 

Für weitere Informationen:

2

Da die Antwort von Ivan Georgiev nicht für mich arbeiten (und nicht nur, weil es über die Verbraucher und nicht der Hersteller ist), I another question here in StackOverFlow geöffnet, und schließlich auch Apache's Jira und ppatierno (vielen Dank) in beantwortet, warum es ist passiert und wie man es löst.

für die Konsole Hersteller Eigenschaften ändern linger.ms (1000 ms Standardeinstellung) und batch.size (16384 Standardeinstellung) müssen Sie es in der Befehlszeile mit --timeout und --max-partition-memory-bytes jeweils angeben, zum Beispiel, wenn Sie in dem Kafkas Hauptordnern sind:

./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testConsole --timeout 100 
+0

Eigentlich sind beide Antworten richtig. Ivans Antwort ist, wie Sie die Verbraucherlatenz einstellen und diese Antwort ist, wie Sie die Producer-Latenz einstellen. Zufälligerweise gibt es auf der Produzentenseite mehr Spielraum für Verbesserungen. Wenn Sie beides tun, sollten Sie die besten Ergebnisse für die Ende-zu-Ende-Latenz erhalten. –

+0

Ja, ich weiß (ich werde es zu meiner Antwort hinzufügen, danke!), Die Sache ist, dass es (mindestens in der Version 0.10.2.1) nicht notwendig ist, irgendeinen Ton im Verbraucher zu tun, um weniger als eine Sekunde Verzögerung zu haben was vom Produzenten herbeigeführt wird. – Franmoti

+0

Auch Konsole-Hersteller standardmäßig auf acks = 1, die Latenz reduziert, aber auch zu Nachrichtenverlust führen kann, also nicht überrascht, wenn Sie Nachricht Verlust beim Töten von Brokern und Testen Failover bei Verwendung von Standardeinstellungen sehen. –