Beim Definieren einer Topologie in Kafka-Streams kann ein globaler Statusspeicher hinzugefügt werden. Es wird ein Quellthema sowie ein ProcessorSupplier
. Der Prozessor empfängt Datensätze und kann sie theoretisch transformieren, bevor er sie dem Speicher hinzufügt. Im Falle einer Wiederherstellung werden die Datensätze jedoch direkt aus dem Quellthema (Änderungsprotokoll) in den globalen Statusspeicher eingefügt, wobei eine eventuelle Transformation im Prozessor übersprungen wird.
+-------------+ +-------------+ +---------------+
| | | | | global |
|source topic -------------> processor +--------------> state |
|(changelog) | | | | store |
+-------------+ +-------------+ +---------------+
| ^
| |
+---------------------------------------------------------+
record directly inserted during restoration
StreamsBuilder # addGlobalStore (StoreBuilder storeBuilder, Zeichenfolgenthema, Verbrauchter Verbrauch, ProcessorSupplier stateUpdateSupplier) Fügt der Topologie einen globalen StateStore hinzu.
Gemäß Dokumentation
HINWEIS: Sie sollten den Prozessor nicht zum Einfügen transformierter Datensätze in den globalen Statusspeicher verwenden . Dieser Speicher verwendet das Quellthema als Änderungsprotokoll und fügt während der Wiederherstellung Datensätze direkt aus der Quelle ein . Dieser ProcessorNode sollte verwendet werden, um den StateStore auf dem neuesten Stand zu halten.
Parallel dazu ist derzeit ein schwerwiegender Fehler im kafka-Bug-Tracker geöffnet: Der auf addGlobalStore bereitgestellte benutzerdefinierte Prozessor KAFKA-7663 wird nicht verwendet, wenn der Status aus einem Thema wiederhergestellt wird, das genau erklärt, was in der Dokumentation angegeben ist, aber ein akzeptierter Fehler zu sein scheint.
Ich frage mich, ob KAFKA-7663 tatsächlich ein Fehler ist oder nicht. Der Dokumentation zufolge scheint es so konzipiert worden zu sein. In diesem Fall habe ich Schwierigkeiten, den Anwendungsfall zu verstehen.
Kann jemand die wichtigsten Anwendungsfälle dieser Low-Level-API erklären? Ich kann mir nur vorstellen, Nebenwirkungen zu verarbeiten, z. B. einige Protokollierungsvorgänge im Prozessor.
Bonusfrage: Wenn das Quellthema als Änderungsprotokoll des globalen Speichers fungiert und ein Datensatz aus dem Thema gelöscht wird, weil die Aufbewahrung abgelaufen ist, wird er dann aus dem globalen Statusspeicher entfernt? Oder erfolgt die Entfernung erst im Geschäft nach einer vollständigen Wiederherstellung des Geschäfts aus dem Änderungsprotokoll.