2017-03-03 3 views
1

Ich habe Setup einen kafka Cluster auf einer Maschine und Testen mit kafka-console-producer.bat und kafka-console-producer.batKafka nicht Nachrichten abrufen, die gesendet werden, wenn es offline ist

I zookeeper begann kafka-server und erzeugt einige Testnachrichten mit kakfa-console-producer, gefolgt von kakfa-console-consumer, es wurden keine Nachrichten gedruckt.

Wenn ich jedoch zoekeeper, kakfa-server, kakfa-console-consumer und zuletzt kakfa-console-producer starte und die Testnachrichten produziere, werden die Nachrichten auf dem kakfa-console-consumer ausgedruckt.

Warum kann Kafka Nachrichten nicht empfangen, wenn sie offline sind? Ich benutze nur 1 Makler.

Antwort

2

Kafka hat ein Konzept namens Verbrauchergruppen, jeder Verbraucher, wenn es sich an einen Broker anschließt. Kafka verfolgt für jede Verbrauchergruppe den letzten gelesenen Nachrichtenoffset. Wenn eine Verbrauchergruppe an den Makler nicht bekannt ist, eine so genannte Verbraucher Parameter auto.offset.reset Einflüsse, was passiert:

  • frühestens: start Lesen von Nachrichten vom Anfang des Themas
  • zuletzt: Start aus der Lektüre das aktuelle Ende des Themas (so erzeugt Meldungen, nachdem der Verbraucher gestartet wurde)

die Standardeinstellung für diesen Parameter neuesten und da die Konsole Verbraucher randomisiert seine Verbrauchergruppe ist, ist es das, was in Ihrem Fall passieren wird und warum Sie keine Nachrichten sehen, die vor dem Start des Konsumenten erstellt wurden. Sie können den Parameter --from-beginning zu Ihrem Konsolenkonsumentenbefehl hinzufügen, mit dem dieses Verhalten für dieses Tool gesteuert wird. Dann sollten Sie alle Nachrichten sehen.

Update: Wenn Sie Sie, um sicherzustellen, wollen zu wählen, wo Ihre Verbraucher von links, die Sie benötigen, um eine Verbrauchergruppe manuell eingestellt und halten diese die gleiche jedes Mal, wenn Sie Ihre Verbraucher nennen. Sie können dies tun, indem Sie eine Textdatei mit diesem Parameter erstellen und diese an Ihren Konsolenbenutzer weitergeben.

echo "group.id=test" > consumer.config 
./kafka-console-consumer --topic test --new-consumer --bootstrap-server 127.0.0.1:9092 --consumer.config consumer.config 
+0

Ich möchte nicht die Nachrichten, die verbraucht werden, erneut verarbeitet werden. Ich schaue mir die Nachrichten an, die gesendet wurden, als mein Konsument offline war. – youcanlearnanything

+0

Ich habe meine Antwort aktualisiert, um diesen Teil hinzuzufügen. –

+0

Kafka behält standardmäßig Offsets für 24 Stunden bei. Die Broker-Konfiguration "offsets.retention.minutes" steuert die Aufbewahrungsfrist für Offsets. Wenn der Konsument offline ist und in diesem Zeitraum keine neuen Offsets vorgenommen hat, löscht Kafka möglicherweise die Offsets für diese Konsumentengruppe. –

Verwandte Themen