0

Von der letzten Version von Kafka (0.11.0.0) am 28. Juni 2017 hat das kafka Team neue Funktionen zur Verfügung gestellt, um genau einmal die Lieferung zu unterstützen. Nachdem ich die neueste Version heruntergeladen habe, habe ich versucht, den Producer zu konfigurieren (ausgeführt über kafka-console-producer.sh), wie in Producer configs beschrieben: Ich setze enable.idempotence=true und transactional.id=0A0A.Kafka - Idempotenter Produzent in "genau einmal Lieferung" semantisch

Das Problem ist, dass, wenn ich die Produzenten starten bekomme ich ein ConfigException sagen, dass acks muss all oder -1 eingestellt wird (auch wenn ich es in der producer.properties-Datei festgelegt, die ich als Argument an der Konsole Skript übergeben).

Konnte die Ursache dafür sein, dass die Idempotenz nicht mit dem Konsolenskript festgelegt werden kann? Gibt es außerdem eine Möglichkeit, eine unteilbare Transaktion auszuführen, die Nachrichten über das bereitgestellte Konsolenskript erzeugt?

Details:

In sythesis wird die angenommene Lösung auf zwei Hauptkonzepte:

  • Idempotent Producer Lage ein schreiben spezifisches ich Ssage nur einmal, dank der Einführung von transaktionalen IDs in Hersteller Config , die Garantie Atomity-Eigenschaft auch im Falle von mehreren Partitionen für ein einzelnes Thema);
  • auf der Verbraucherseite, durch die Eigenschaft isolation.level=read_committed, können wir jetzt Nachrichten nur lesen, nachdem die Transaktion festgeschrieben ist.
+0

Console Producer ist standardmäßig auf acks = 1 gesetzt, also überprüfen Sie, ob Sie dies korrekt in "all" oder -1 ändern. –

Antwort

2

Konsolenhersteller legt seine eigenen Standardeinstellungen fest. Versuchen Sie, --request-required-acks "all" oder --request-required-acks -1 hinzuzufügen, um alle anstelle des Standardwerts von 1 zu setzen.

+0

Danke! Ich bekomme die Ausnahme nicht mehr. Das Problem ist jetzt: Wenn ich das gleiche Schlüssel-Wert-Paar mehrmals erzeuge, erscheint es auch mehrfach im Protokoll. Ich hatte erwartet, das Paar nur einmal zu sehen. Ist es möglich dies zu erreichen und mit den Konsolenskripten zu testen? Die Dokumentation besagt, dass 'enable.idempotenz' _" Wenn der Wert 'true' ist, stellt der Producer sicher, dass genau eine Kopie jeder Nachricht in den Stream geschrieben wird. "_ – rh0x

+4

Wenn Sie denselben Inhalt zweimal veröffentlichen, sind das immer noch zwei separate Nachrichten mit eindeutigen Nachrichten-IDs, so dass EOS nicht gilt. Es gibt viele Anwendungen, in denen Sie ähnliche Nachrichten mehrmals veröffentlichen können. EOS dedupliziert nur mehrere Kopien * der gleichen Nachricht *, die bei Fehlern und Wiederholungen ungewöhnlich entstehen. –

Verwandte Themen