summary |
shortlog | log |
commit |
commitdiff |
tree
first ⋅ prev ⋅ next
Kai Moritz [Sat, 2 Nov 2024 19:38:04 +0000 (20:38 +0100)]
TX-kompatibler Weg zur Prüfung auf eine abgeschlossene Wiederherstellung
* Der bisher verwendete Vergleich der Offset-Positionen schlägt fehl, wenn
die Implementierung um Transaktionen erweitert wird
* _Grund:_ Dann stimmt die Offset-Position nicht mehr überein, weil nach
der letzten Zustands-Nachricht noch eine, von der Transaktion erzeugte,
versteckte Nachricht folgt, die die Anwendung nie zu sehen bekommt!
Kai Moritz [Sat, 2 Nov 2024 17:38:18 +0000 (18:38 +0100)]
Setup mit 3 Konsumern und ein bischen mehr Dampf (`README.sh` angepasst)
Kai Moritz [Sat, 2 Nov 2024 17:37:31 +0000 (18:37 +0100)]
Effekte des Log-Compaction in dem Topic `state` sichtbar gemacht
Kai Moritz [Sat, 2 Nov 2024 16:11:14 +0000 (17:11 +0100)]
Refactor: Enum `PartitionState` in `State` umbenannt
Kai Moritz [Sat, 2 Nov 2024 16:05:23 +0000 (17:05 +0100)]
Refactor: Zustand muss `CounterState` vollständig übergeben werden
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 [Sat, 2 Nov 2024 12:58:35 +0000 (13:58 +0100)]
Refactor: Handling von pause/resume vollständig in State-Change-Methoden
Kai Moritz [Sat, 2 Nov 2024 12:37:38 +0000 (13:37 +0100)]
DRY für state-change zu RESTORING
Kai Moritz [Sat, 2 Nov 2024 10:34:38 +0000 (11:34 +0100)]
Refactor: Neue, klarere ``switch``-Syntax
Kai Moritz [Sat, 2 Nov 2024 10:33:53 +0000 (11:33 +0100)]
Refactor: DRY für state-change zu UNASSIGNED
Kai Moritz [Sat, 2 Nov 2024 10:21:28 +0000 (11:21 +0100)]
Refactor: DRY für state-change zu ASSIGNED
Kai Moritz [Sat, 2 Nov 2024 09:21:56 +0000 (10:21 +0100)]
Refactor: Logik für Counter in Klasse `CounterState` extrahiert
Kai Moritz [Mon, 28 Oct 2024 09:28:50 +0000 (10:28 +0100)]
Der Zustand wird aus dem ``state``-Topic wiederhergestellt
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 10:13:05 +0000 (11:13 +0100)]
Fehler im Logging der aktiven Phase korrigiert und Meldungen verbessert
Kai Moritz [Mon, 28 Oct 2024 09:50:00 +0000 (10:50 +0100)]
Fix: Der Rebalance-Listener wurde nie registriertgit diff
Kai Moritz [Mon, 28 Oct 2024 09:49:26 +0000 (10:49 +0100)]
Log-Meldungen für das Senden des Zählerstands ergänzt
Kai Moritz [Mon, 28 Oct 2024 09:49:26 +0000 (10:49 +0100)]
Log-Meldungen zum Fortschritt beim Versenden des Zähler-Status ergänzt
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 07:00:48 +0000 (08:00 +0100)]
Der Value-Typ in dem Topic `state` ist jetzt auch vom Typ `String`
* Dadurch wird die Kontrolle der Ergebnisse einfacher, da alle Nachrichten
auch einfach mit `kafkacat` gelesen werden können.
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, 27 Oct 2024 12:03:25 +0000 (13:03 +0100)]
Die Counter werden mit dem ``String``-Key indiziert
* Vorbereitung auf eine Poison-Pill Übung ist hier noch out-of-scope...
Kai Moritz [Sun, 27 Oct 2024 11:03:06 +0000 (12:03 +0100)]
Der Consumer zählt, wie oft die Schlüssel auftreten
Kai Moritz [Sun, 10 Nov 2024 12:50:32 +0000 (13:50 +0100)]
Das Docker-Setup verwendet den `spring-producer`
* Die Konfiguration wurde außerdem so überarbeitet, dass der Producer
mehr Nachrichten verschickt (ca. 10 Nachrichten pro Sekunde) und diese
in Batches à ca. 6 Nachrichten verpackt.
Kai Moritz [Sat, 2 Nov 2024 22:19:40 +0000 (23:19 +0100)]
Ungefangene Exceptions im `ExampleConsumer` lösen das Beenden der App aus
Kai Moritz [Sat, 2 Nov 2024 21:23:16 +0000 (22:23 +0100)]
Fix: `close()` muss noch vom `ExampleConsumer` aufgerufen werden
* Der Aufruf von `close()` löst die Abmeldung der Instanz bei dem
GroupCoordinator aus.
* Dieser Vorgang sollte noch unter der Kontrolle des Anwendungscodes
erfolgen!
* Wenn die Methode erst von Spring aufgerufen wird, werden dann ggf. noch
Seiteneffekte ausgelöst, die dann noch im Kontext der Instanz laufen,
obwohl diese eigentlich schon beendet wurde!
Kai Moritz [Mon, 28 Oct 2024 07:46:58 +0000 (08:46 +0100)]
Consumerspezifische Properties werden in eigener nested Class verwaltet
* Dadurch wird der Code übersichtlicher, wenn spätere Implementierungen
_sowohl_ als Consumer, _als auch_ als Producer agieren!
Kai Moritz [Sun, 27 Oct 2024 21:08:53 +0000 (22:08 +0100)]
`ExampleConsumer` in eine Spring-Boot App umgebaut (ohne Spring Kafka)
Kai Moritz [Sun, 29 Sep 2024 12:30:42 +0000 (14:30 +0200)]
Handling der Records wie in abgeleiteten Versionen in eigener Methode
Kai Moritz [Sat, 28 Sep 2024 10:00:20 +0000 (12:00 +0200)]
`metadata.maxage.ms` auf 5 Sekunden heruntergesetzt
Kai Moritz [Thu, 26 Sep 2024 13:21:01 +0000 (15:21 +0200)]
`simple-producer` in `simple-consumer` verwandelt -- ALIGN
Kai Moritz [Mon, 28 Oct 2024 13:14:51 +0000 (14:14 +0100)]
`simple-producer` in `simple-consumer` verwandelt -- COPY
Kai Moritz [Sat, 28 Sep 2024 09:58:11 +0000 (11:58 +0200)]
`metadata.maxage.ms` auf 5 Sekunden heruntergesetzt
Kai Moritz [Fri, 1 Nov 2024 14:53:17 +0000 (15:53 +0100)]
Bei einem unerwarteten Fehler wird auch der Stacktrace mit ausgegeben
Kai Moritz [Thu, 31 Oct 2024 23:52:44 +0000 (00:52 +0100)]
Der Nachrichten-Wert wird in allen Log-Meldungen mit ausgegeben
Kai Moritz [Mon, 28 Oct 2024 11:03:50 +0000 (12:03 +0100)]
Logging-Pattern überarbeitet
Kai Moritz [Sun, 29 Sep 2024 07:44:09 +0000 (09:44 +0200)]
Unnötige Kommandos aus der `README.sh` entfernt
Kai Moritz [Sat, 28 Sep 2024 05:49:04 +0000 (07:49 +0200)]
`docker` in `simple-producer` verwandelt`
Kai Moritz [Sat, 26 Oct 2024 17:42:02 +0000 (19:42 +0200)]
`log.retention.check.interval.ms` auf 10 Sekunden gesetzt
Kai Moritz [Sat, 28 Sep 2024 09:08:51 +0000 (11:08 +0200)]
``version``-Eintrag in `docker-compose.yml` entfernt
Kai Moritz [Sat, 28 Sep 2024 07:42:36 +0000 (09:42 +0200)]
"Final Newline" in `.editorconfig` gefordert (scheint vim zu entsprechen)
Kai Moritz [Sat, 28 Sep 2024 06:35:51 +0000 (08:35 +0200)]
`.gitignore` und `.editorconfig` hinzugefügt
Kai Moritz [Sat, 28 Sep 2024 05:43:48 +0000 (07:43 +0200)]
Schreibweise des CLI-Kommandos für Docker-Compose korrigiert
Kai Moritz [Wed, 25 Sep 2024 12:26:14 +0000 (14:26 +0200)]
Upgrade der verwendeten Kafka-Images auf 7.7.1
Kai Moritz [Sun, 8 Oct 2023 13:23:57 +0000 (15:23 +0200)]
ZooNavigator in den Demo-Stack aufgenommen
Kai Moritz [Sat, 14 Oct 2023 17:25:10 +0000 (19:25 +0200)]
`README.sh` bricht ab, wenn `setup` nicht erfolgreich ist!
Kai Moritz [Fri, 13 Oct 2023 11:39:45 +0000 (13:39 +0200)]
Start von Service `setup` startet auch `cli`
Kai Moritz [Sat, 14 Oct 2023 16:44:10 +0000 (18:44 +0200)]
Der Service `setup` wartet bereits auf den Cluster
Kai Moritz [Fri, 13 Oct 2023 08:17:23 +0000 (10:17 +0200)]
Grace-Period für Broker und cli/setup gesetzt
Kai Moritz [Fri, 6 Oct 2023 17:13:41 +0000 (19:13 +0200)]
Schönere YAML-Syntax für `setup`-Service
Kai Moritz [Fri, 6 Oct 2023 14:28:46 +0000 (16:28 +0200)]
Services `schema-registry` und `connect` hinzugefügt
Kai Moritz [Fri, 6 Oct 2023 13:12:37 +0000 (15:12 +0200)]
Hilfs-Services `setup` überarbeitet
Kai Moritz [Mon, 16 Oct 2023 19:13:52 +0000 (21:13 +0200)]
Volumes für die Log-/Config-Daten und Zookeeper hinzugefügt
Kai Moritz [Mon, 16 Oct 2023 19:05:08 +0000 (21:05 +0200)]
Setup zurück auf Confluent (Version 7.5.1) mit Zookeeper umestellt
Kai Moritz [Mon, 12 Jun 2023 19:21:06 +0000 (21:21 +0200)]
AKHQ auf einen eindeutigeren Port verlegt
Kai Moritz [Sun, 11 Jun 2023 21:14:51 +0000 (23:14 +0200)]
Automatisches entfernen von Orphans beim Start
Kai Moritz [Sun, 11 Jun 2023 12:46:07 +0000 (14:46 +0200)]
Docker-Setup in das Unterverzeichnis `docker` verschoben
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 [Thu, 8 Dec 2022 17:38:43 +0000 (18:38 +0100)]
`docker-compose up setup` startet auch die cli
Kai Moritz [Thu, 8 Dec 2022 17:37:08 +0000 (18:37 +0100)]
AKHQ zu dem Basis-Setup hinzugefügt
Kai Moritz [Mon, 21 Nov 2022 21:58:22 +0000 (22:58 +0100)]
Compose-Setup auf bitnami mit KRAFT umgestellt
* Setup aus Unterschied zu `spring-consumer--json--adder` übernommen.
* Auch das `README.sh` entsprechend angepasst.
Kai Moritz [Tue, 26 Jul 2022 17:58:49 +0000 (19:58 +0200)]
Für ordering-Übung werden zwei Partitionen benötigt!
Kai Moritz [Tue, 26 Jul 2022 17:52:28 +0000 (19:52 +0200)]
Setup mit 3 Broker und Topic-Erzeugung mit Setup für acks-Übung
Kai Moritz [Fri, 22 Jul 2022 18:50:15 +0000 (20:50 +0200)]
Merge der Upgrades für Confluent/Spring-Boot (Branch 'first-contact')
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
Kai Moritz [Sun, 3 Apr 2022 07:26:56 +0000 (09:26 +0200)]
Setup aus der Intro-Übung übernommen
Kai Moritz [Sun, 3 Apr 2022 07:23:57 +0000 (09:23 +0200)]
Setup "entkernt": Implementierungen entfernt
Kai Moritz [Sun, 3 Apr 2022 06:15:30 +0000 (08:15 +0200)]
Upgrade der Images von Confluent 6.2.0 auf 7.0.2
Kai Moritz [Fri, 1 Apr 2022 09:56:34 +0000 (11:56 +0200)]
README.sh verwendet den cli-Service für Kommandos
Kai Moritz [Fri, 25 Mar 2022 14:27:50 +0000 (15:27 +0100)]
Fälschlich hartkodiertes Topic gegen Variable getauscht
Kai Moritz [Fri, 25 Mar 2022 10:19:03 +0000 (11:19 +0100)]
Code reorganisiert, um Änderungen vergleichbarer zu machen
Kai Moritz [Fri, 25 Mar 2022 08:25:54 +0000 (09:25 +0100)]
Upgrade für Spring Boot 2.6.0 -> 2.6.5
* Kafka: 3.0.1
* Spring Kafka: 2.8.4
Kai Moritz [Tue, 14 Dec 2021 17:55:02 +0000 (18:55 +0100)]
First Contact: Simple Producer & Consumer