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