Kai Moritz [Sat, 2 Nov 2024 15:54:01 +0000 (16:54 +0100)]
Der Zählerzustand wird separat pro Partition verwaltet
* Dadurch ist es möglich, den Zustand für entzogene Partitionen zu löschen.
* D.h., bei der Ausgabe ist immer klar ersichtlich, über welchen Zustand
die angefragte Instanz gerade verfügt.
Kai Moritz [Sat, 2 Nov 2024 14:03:10 +0000 (15:03 +0100)]
Fix & Refactor: Restore-Behandlung wurde _allen_ aktiven Partitionen zuteil
* Durch das vorausgehende Refactoring wurde deutlich, dass die Behandlung,
die den _neu_ hinzugefügten Partitionen zugedacht war, allen in
`assignedPartitions` vermerkten Partitionen wiederfahren ist.
* Dies ist für den aktuellen Entwicklungsstand ggf. egal, da der wegen dem
Co-Partitioning (noch!) benötigte `RangeAssignor` eh _zuerst alle_
Partitionen entzieht, bevor er _dann alle_ neu zuteilt.
* Da der Code aber auch mit dem neuen Consumer-Rebalance Protokoll
funktionieren muss, wurde das Refactoring hier fortgeführt und so
vollendet, dass nun _alle_ Aktionenen _nur noch_ von den Callbacks
`onPartitionsAssigned()` und `onPartitionsRevoked()` ausgeht.
Kai Moritz [Mon, 28 Oct 2024 10:16:12 +0000 (11:16 +0100)]
Fix: `poll()` liefert nicht immer Nachrichten zu _allen_ Partitionen
* Ein Aufruf von `poll()` liefert _nicht unbedingt_ Nachrichten zu _jeder_
Partition, die der Instanz gerade zugeteilt ist.
* Daher konnte es auftreten, dass eine Phase nie beendet wurde, wenn
`poll()` nur Nachrichten zu einer Untermenge der aktiven Partitionen
geliefert hat.
Kai Moritz [Mon, 28 Oct 2024 10:14:31 +0000 (11:14 +0100)]
Fix: Nachrichten wurden ggf. doppelt verarbeitet
* Wenn man in einer Schliefe die Nachrichten pro Partition separat
verarbeitet...
* ...dann sollte man in jedem Schleifendurchlauf auch nur die Nachrichten
der gerade zu verarbeitenden Partition abrufen!
Kai Moritz [Mon, 28 Oct 2024 07:12:15 +0000 (08:12 +0100)]
Fix: Fehler müssen wie bestätigte Nachrichten behandelt werden
* Ohne explizite Fehlerbehandlung müssen auch die nicht bestätigten
Nachrichten als `acked` gezählt werden.
* Ansonsten würde die Verarbeitung in einem ``poll()``-Durchlauf mit Fehler
hängen bleiben, da niemals alles "gesehenen" Nachrichten auch als
"bestätigt" gezählt würden.
* Dabei: Producer-Code an den aus `producer/spring-producer` angeglichen.
Kai Moritz [Mon, 28 Oct 2024 08:39:10 +0000 (09:39 +0100)]
Der Zustand des Zählers wird in einem compacted Topic abgelegt
* Der Consumer zählt, welche Nachrichten gesendet und welche bestätigt
wurden.
* Über einen `Phaser` wird sichergestellt, dass alle Nachrichten von den
zuständigen Brokern bestätigt wurden, bevor der nächste ``poll()``-Aufruf
erfolgt.
Kai Moritz [Sun, 27 Oct 2024 12:38:47 +0000 (13:38 +0100)]
GET-Endpoint zum Abfragen der Schlüssel-Zählungen ergänzt
* Zugriff auf die `counterMap` in `ExampleConsumer` synchronisiert.
* `CounterStateController` kopiert die Map, um mögliche konkurierende
Zugriffe während des Erzeugens der Ausgabe zu vermeiden.
Kai Moritz [Sun, 11 Jun 2023 11:55:20 +0000 (13:55 +0200)]
Docker-Setup auf `bitnami/kafka:3.4` aktualisiert und vereinfacht
* Die Konfiguration musste an (undokumentierte?!) Änderungen in der
version 3.4 von `bitnami/kafka` angepasst werden.
* Die drei Broker spielen jetzt gleichzeitig Controller. D.h., der
Service `kafka-0`, der explizit Controller gespielt hat, fällt weg.
Kai Moritz [Thu, 8 Jun 2023 08:35:41 +0000 (10:35 +0200)]
Bedienbarkeit des Setups verbessert
* Setup starten mit `docker-compose up -t0 -d cli`
** Dabei wird _nicht_ automatisch das Topic `test` neu angelegt
** D.h., die Daten gehen nicht unbeabsichtigt verloren, wenn man mit
`up -d` prüft, ob noc alles läuft!
* Das Topic `test` kan mit `docker-compose restart -t0 setup` explizit
gelöscht und neu angelegt (aka geleert) werden.
Kai Moritz [Fri, 22 Jul 2022 18:04:07 +0000 (20:04 +0200)]
Upgrade von Spring Boot und den Confluent-Kafka-Images
* Upgrade der Kafk-Images von Confluent 7.0.2 auf 7.1.3
** Unterstützt Kafka 3.1.x (siehe https://docs.confluent.io/platform/current/installation/versions-interoperability.html[Versions-Matrix])
* Upgrade für Spring Boot von 2.6.5 auf 2.7.2
** Enthält Kafka: 3.1.1
** Enthält Spring Kafka: 2.8.8