demos/kafka/training
2 years agoWordcount-Implementierung mit Kafka-Boardmitteln und MongoDB als Storage
Kai Moritz [Sun, 24 Jul 2022 19:34:43 +0000 (21:34 +0200)]
Wordcount-Implementierung mit Kafka-Boardmitteln und MongoDB als Storage

* Zählt die Wörter pro Benutzer.
* Simple Implementierung mit Maps.
* Verwendet die bereits für das Speichern der Nachrichten-Zählung und
  der Offsets verwendete MonogoDB-Anbindung zum speichern.
* Typisierung zurückgenommn: Immer String für Key/Value
* Verwendet aus Bequemlichkeit den Seen-Endpoint von der Zählung.

2 years agoUmstellung des Nachrichten-Datentyps auf Long zurückgenommen
Kai Moritz [Sun, 24 Jul 2022 15:18:33 +0000 (17:18 +0200)]
Umstellung des Nachrichten-Datentyps auf Long zurückgenommen

* Im Branch 'deserialization' wurde der Datentyp der Nachricht von `String`
  auf `Long` umgestellt, um eine `DeserializationException` vorzuführen, die
  innerhalb des Kafka-Codes geworfen wird.
* Diese Änderung wurde schon dort nicht in dem `README.sh`-Skript
  reflektiert.
* Hier stört sie jetzt die Experimente mit dem `EndlessProducer`, der
  Nachrichten vom Typ `String` erzeugt, so dass der Consumer kein einzige
  Nachricht annehmen kann.
* Daher wird der Nachrichten-Datentyp hier wieder auf `String` zurück
  umgestellt.
* Dafür musste auch der Testfall angepasst und der Test entfernt werden, der
  die Exception kontrolliert.

2 years agoAuf den `CooperativeStickyAssignor` umgestellt
Kai Moritz [Sun, 24 Jul 2022 17:32:51 +0000 (19:32 +0200)]
Auf den `CooperativeStickyAssignor` umgestellt

2 years agoDas Speichern der Daten und Offsets erfolgt nicht mehr nach jedem `poll()`
Kai Moritz [Sun, 24 Jul 2022 16:39:05 +0000 (18:39 +0200)]
Das Speichern der Daten und Offsets erfolgt nicht mehr nach jedem `poll()`

* Statdessen kann eine `Duration` konfiguriert werden.
* Ähnlich wie in der Client-Library von Kafka, wird ein Zeitstempel für
  den letzten Commit gespeichert und die Daten werden immer dann
  gespeichert, wenn dieser weiter als das eingestellte
  `consumer.commit-interval` in der Vergangenheit liegt.

2 years agoWenn kein gespeicherter Offset vorliegt, auto.offset.reset von Kafka nutzen
Kai Moritz [Sun, 24 Jul 2022 16:22:00 +0000 (18:22 +0200)]
Wenn kein gespeicherter Offset vorliegt, auto.offset.reset von Kafka nutzen

* Es wird jetzt nur noch dann ein expliziter Seek durchgeführt, wenn eine
  gespeicherte Offset-Position gefunden wurde.
* Andernfalls wird der von Kafka initialisierte Ausgansgs-Offset verwendet.
* Welchen Offset Kafka vorgibt, hängt von `auto.offset.rest` ab!

2 years agoFehler im Shutdown-Code korrigiert: Shutdown von `EndlessConsumer` zu spät
Kai Moritz [Sun, 24 Jul 2022 15:40:36 +0000 (17:40 +0200)]
Fehler im Shutdown-Code korrigiert: Shutdown von `EndlessConsumer` zu spät

2 years agomongo-express sollte erst nach der MongoDB gestartet werden
Kai Moritz [Sun, 24 Jul 2022 15:18:02 +0000 (17:18 +0200)]
mongo-express sollte erst nach der MongoDB gestartet werden

2 years agoAusgabe der verarbeiteten Nachrichten im Revoke-Callback entfernt
Kai Moritz [Sun, 24 Jul 2022 14:15:23 +0000 (16:15 +0200)]
Ausgabe der verarbeiteten Nachrichten im Revoke-Callback entfernt

* Es musste allein für diese Ausgabe eine Map mit den zuletzt eingelesenen
  Offset-Positionen gepflegt werden.
* Das ist zu viel Overhead, für die Randmeldung im Log.

2 years agoFehler in Logging-Ausgabe korrigiert
Kai Moritz [Sun, 24 Jul 2022 14:12:04 +0000 (16:12 +0200)]
Fehler in Logging-Ausgabe korrigiert

* Der über den Merge hinzugefügt Test hat einen Fehler aufgedeckt.
* In onPartitionsRevoked() wurde bei der Berechnung der verarbeiteten
  Nachrichten für die Log-Ausgabe ein Nullzeiger dereferenziert.
* Ursache dafür war, dass die Map `offsets` in der Version, die die Offsets
  speichert gar nicht mehr gepflegt wurde.

2 years agoMerge der Refaktorisierung des EndlessConsumer (Branch 'stored-state')
Kai Moritz [Sun, 24 Jul 2022 13:35:14 +0000 (15:35 +0200)]
Merge der Refaktorisierung des EndlessConsumer (Branch 'stored-state')

* Die `commtSync()`-Aufrufe machen beim Speichern der Offsets außerhalb
  von Kafka keinen Sinn mehr.
* Der Testfall musste an die extern gespeicherten Offsets angepasst
  werden: Die gesehenen Offsets müssen aus der MongoDB gelesen werden,
  anstatt über einen separaten Consumer aus Kafka.
* Der mit dem Merge hinzugefügte Test schlägt fehl, da er einen Fehler
  aufdeckt (NPE bei einer Log-Ausgabe zur Offset-Verarbeitung).

2 years agoTest prüft ungültige und unbekannte Nachrichten springified-consumer--serialization
Kai Moritz [Tue, 26 Jul 2022 14:21:17 +0000 (16:21 +0200)]
Test prüft ungültige und unbekannte Nachrichten

2 years agoVerbesserungen des Testfalls gemerged (Branch 'deserialization')
Kai Moritz [Tue, 26 Jul 2022 14:11:45 +0000 (16:11 +0200)]
Verbesserungen des Testfalls gemerged (Branch 'deserialization')

2 years agoVerhalten des Testfalls kontrollierbarer gemacht
Kai Moritz [Tue, 26 Jul 2022 14:03:10 +0000 (16:03 +0200)]
Verhalten des Testfalls kontrollierbarer gemacht

* Die Awaitility-Aufrufe pollen den zu prüfenden Zustand wenn nicht anders
  angegeben so häufig, wie es die CPU zulässt - also ohne Verzögerung
  zwischen den Überprüfungen.
* Das kann den Rechner temporär so überlasten, dass der erwartete Zustand
  in der abgewarteten Zeit gar nicht eintritt!
* Z.B. aufgetreten, wenn wie hier das Commit-Interval auf 1 Sekunde
  gesetzt ist, das Polling von Awaitility aber noch ungebremst durchgeführt
  wird.
* Um diese Quelle für falsche Fehler auszuschließen, wurde jetzt
  durchgängig ein Poll-Intervall von 1 Sekunde für Awaitility gesetzt.

2 years agoTestfall überarbeitet
Kai Moritz [Tue, 26 Jul 2022 13:37:43 +0000 (15:37 +0200)]
Testfall überarbeitet

* Abhängigkeit der Testergebnisse von Ausführreihenfolge beseitigt.
* Die Abhängigkeit bestand, da die Offset-Positionen als Zustand die
  Testausführung überdauert haben.
* Daher konnte kein weiterer Test mehr ausgeführt werden, nachdem einmal
  eine Poison-Pill in das Topic geschrieben wurde, über die der
  implementierte Consumer stolpert.
* Um das zu umgehen, werden die Offset-Positionen jetzt nach jedem Test
  auf das Ende der Partitionen verschoben. D.h., wenn in dem Test eine
  Poision-Pill geschrieben wird, über die der implementierte Consumer
  nicht hinweglesen kann, werden die Offests vor der Ausführung des
  nächsten Tests über diese Poision-Pill hinweg gesetzt.
* Dadurch ist wurde ein Fehler / eine Schwäche in der Testlogik aufgedeckt:
  In dem Test für das erfolgreiche Schreiben wurde nur deswegen ein Commit
  ausgeführt, weil zuvor noch kein Commit durchgeführt wurde, so dass der
  Default-Wert für das Commit-Interval immer überschritten war.
* Um das zu umgehen, wurde eine Konfigurations-Option für das Setzen des
  Parameters `auto.commit.interval` eingeführt, so dass im Test
  sichergestellt werden kann, dass auf jeden Fall in dem beobachteten
  Zeitraum ein automatischer Commit ausgelöst wird.
* Außerdem: Weniger verwirrende Ausgabe des Offset-Fortschritts.

2 years agoDeserialisierung von Nachrichten unterschiedlichen Typs
Kai Moritz [Tue, 26 Jul 2022 09:38:54 +0000 (11:38 +0200)]
Deserialisierung von Nachrichten unterschiedlichen Typs

2 years agoRefaktorisierungen des Testfalls gemerged (Branch 'deserialization')
Kai Moritz [Tue, 26 Jul 2022 10:52:23 +0000 (12:52 +0200)]
Refaktorisierungen des Testfalls gemerged (Branch 'deserialization')

2 years agoVerwendung eines weniger verwirrenden Key in Tests (fachlich irrelevant)
Kai Moritz [Tue, 26 Jul 2022 10:42:45 +0000 (12:42 +0200)]
Verwendung eines weniger verwirrenden Key in Tests (fachlich irrelevant)

2 years agoErzeugung von ProducerRecord in Test refaktorisiert
Kai Moritz [Tue, 26 Jul 2022 10:40:45 +0000 (12:40 +0200)]
Erzeugung von ProducerRecord in Test refaktorisiert

2 years agoMerge der Refaktorisierung des EndlessConsumer (Branch 'deserialization')
Kai Moritz [Sun, 24 Jul 2022 10:34:53 +0000 (12:34 +0200)]
Merge der Refaktorisierung des EndlessConsumer (Branch 'deserialization')

* Um die Implementierung besser testen zu können, wurde die Anwendung
  in dem Branch 'deserialization' refaktorisiert.
* Diese Refaktorisierung werden hier zusammen mit den eingeführten
  Tests gemerged.
* Der so verfügbar gemachte Test wurde so angepasst, dass er das Speichern
  des Zustands in einer MongoDB berücksichtigt.

2 years agoMerge der überarbeiteten Compose-Konfiguration ('deserialization')
Kai Moritz [Sat, 23 Jul 2022 14:17:42 +0000 (16:17 +0200)]
Merge der überarbeiteten Compose-Konfiguration ('deserialization')

2 years agoMerge der überarbeiteten Compose-Konfiguration ('rebalance-listener')
Kai Moritz [Sat, 23 Jul 2022 14:15:29 +0000 (16:15 +0200)]
Merge der überarbeiteten Compose-Konfiguration ('rebalance-listener')

2 years agoMerge der überarbeiteten Compose-Konfiguration ('stored-state')
Kai Moritz [Sat, 23 Jul 2022 13:58:44 +0000 (15:58 +0200)]
Merge der überarbeiteten Compose-Konfiguration ('stored-state')

2 years agoREADME.sh startet MongoDB und Mongo-Express
Kai Moritz [Sat, 23 Jul 2022 13:58:16 +0000 (15:58 +0200)]
README.sh startet MongoDB und Mongo-Express

2 years agoMerge der überarbeiteten Compose-Konfiguration ('rebalance-listener')
Kai Moritz [Sat, 23 Jul 2022 13:41:57 +0000 (15:41 +0200)]
Merge der überarbeiteten Compose-Konfiguration ('rebalance-listener')

* Dabei auch die letzten Verbesserungen aus 'rebalance-listener' übernommen.

2 years agoMerge der überarbeiteten Compose-Konfiguration ('counting-consumer')
Kai Moritz [Sat, 23 Jul 2022 13:35:01 +0000 (15:35 +0200)]
Merge der überarbeiteten Compose-Konfiguration ('counting-consumer')

2 years agoMerge der überarbeiteten Compose-Konfiguration ('endless-stream-consumer')
Kai Moritz [Sat, 23 Jul 2022 11:49:23 +0000 (13:49 +0200)]
Merge der überarbeiteten Compose-Konfiguration ('endless-stream-consumer')

* Die letzten Änderungen an 'endless-stream-consumer' sind länger nicht
  mehr gemerged worden.

2 years agoCompose-Konfiguration unabhängig von Default-Konfiguration gemacht
Kai Moritz [Sat, 23 Jul 2022 11:26:29 +0000 (13:26 +0200)]
Compose-Konfiguration unabhängig von Default-Konfiguration gemacht

* Damit Instanzen parallel über die IDE (mit voreingestelltem Default-Port)
  und Compose gestartet werden können, wurden den einzelnen Komponenten
  (Producer, Consumer etc.) jeweils unterschiedliche explizite
  Default-Ports zugewiesen.
* Dies führt leicht zu fehlern, in den Compose-Setups, da dort i.d.R.
  Port-Mappings für die gestarteten Instanzen definiert werden.
* Daher werden die Compose-Setups jetzt so umgestellt, dass sie den
  einkompilierten Default-Port der Komponenten explizit mit dem Port `8080`
  überschreiben, so dass alle Komponenten _innerhalb_ von Compose
  einheitlich (und so wie bei Spring-Boot standard) über `8080` ansprechbar
  sind.

2 years agoMerge der Upgrades für Confluent/Spring-Boot (Branch 'first-contact')
Kai Moritz [Sat, 23 Jul 2022 08:37:24 +0000 (10:37 +0200)]
Merge der Upgrades für Confluent/Spring-Boot (Branch 'first-contact')

2 years agoUpgrade von Spring Boot und den Confluent-Kafka-Images
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

2 years agoMerge branch 'deserialization' into springified-consumer--serialization
Kai Moritz [Sat, 30 Apr 2022 09:38:26 +0000 (11:38 +0200)]
Merge branch 'deserialization' into springified-consumer--serialization

2 years agoFehler in Shutdown-Logik für den `ExecutorService` korrigiert
Kai Moritz [Sat, 30 Apr 2022 09:36:13 +0000 (11:36 +0200)]
Fehler in Shutdown-Logik für den `ExecutorService` korrigiert

2 years agoMerge branch 'rebalance-listener' into deserialization
Kai Moritz [Sat, 30 Apr 2022 09:34:38 +0000 (11:34 +0200)]
Merge branch 'rebalance-listener' into deserialization

2 years agoMerge branch 'endless-stream-consumer' into rebalance-listener
Kai Moritz [Sat, 30 Apr 2022 09:24:34 +0000 (11:24 +0200)]
Merge branch 'endless-stream-consumer' into rebalance-listener

2 years agoHealthIndicator implementiert: Implementierung selbst vergessen :/
Kai Moritz [Sat, 30 Apr 2022 09:22:41 +0000 (11:22 +0200)]
HealthIndicator implementiert: Implementierung selbst vergessen :/

2 years agoRefactor: `EndlessConsumer` ist selbst ein `ConsumerRebalanceListener`
Kai Moritz [Fri, 22 Apr 2022 15:53:41 +0000 (17:53 +0200)]
Refactor: `EndlessConsumer` ist selbst ein `ConsumerRebalanceListener`

* Vorbereitung für die Übernahme der Funktionalität in der springifizierten
  Version.

2 years agoSpringify: Nachrichten-Typ wird über den Type-Info-Header bestimmt
Kai Moritz [Sun, 17 Apr 2022 11:44:49 +0000 (13:44 +0200)]
Springify: Nachrichten-Typ wird über den Type-Info-Header bestimmt

2 years agoSpringify: Der Payload ist eine als JSON gerenderte Klasse
Kai Moritz [Sun, 17 Apr 2022 11:33:40 +0000 (13:33 +0200)]
Springify: Der Payload ist eine als JSON gerenderte Klasse

* Als Nachricht wird eine Instanz der Klasse `ClientMessage` erwartet
* Die Instanz wird mit Hilfe des `JsonDeserializer` von Spring Kafka
  deserialisiert.

2 years agoTests: Refaktorisiert - Durcheinander bei Assertions aufgeräumt
Kai Moritz [Mon, 18 Apr 2022 10:41:47 +0000 (12:41 +0200)]
Tests: Refaktorisiert - Durcheinander bei Assertions aufgeräumt

* Zuvor wurden die Assertions von JUnit Jupiter und AssertJ durcheinander
  gewürfelt verwendet.
* Jetzt werden stringent nur noch die Assertions von AssertJ verwendet.

2 years agoTests: Refaktorisiert - Serialisierung des Payloads konfigurierbar gemacht
Kai Moritz [Sun, 17 Apr 2022 11:15:07 +0000 (13:15 +0200)]
Tests: Refaktorisiert - Serialisierung des Payloads konfigurierbar gemacht

2 years agoTests: Tests prüfen den Status des Consumers
Kai Moritz [Fri, 15 Apr 2022 11:14:19 +0000 (13:14 +0200)]
Tests: Tests prüfen den Status des Consumers

2 years agoTests: Refaktorisiert - Nachrichten werden für alle Tests aufgezeichnet
Kai Moritz [Fri, 15 Apr 2022 10:22:57 +0000 (12:22 +0200)]
Tests: Refaktorisiert - Nachrichten werden für alle Tests aufgezeichnet

2 years agoTests: Fehlerfall-Test prüft, dass nicht alle Nachrichten gelesen wurden
Kai Moritz [Fri, 15 Apr 2022 10:17:23 +0000 (12:17 +0200)]
Tests: Fehlerfall-Test prüft, dass nicht alle Nachrichten gelesen wurden

2 years agoTests: Assert-Beschreibungen korrigiert/ergänzt
Kai Moritz [Fri, 15 Apr 2022 10:08:50 +0000 (12:08 +0200)]
Tests: Assert-Beschreibungen korrigiert/ergänzt

2 years agoTests: Geprüft, dass der Fehler nach einem Neustart neu vorliegt
Kai Moritz [Mon, 11 Apr 2022 14:19:44 +0000 (16:19 +0200)]
Tests: Geprüft, dass der Fehler nach einem Neustart neu vorliegt

2 years agoTests: Umbau für einen Commit im Fehlerfall und Anpassung des Tests
Kai Moritz [Sun, 10 Apr 2022 12:50:50 +0000 (14:50 +0200)]
Tests: Umbau für einen Commit im Fehlerfall und Anpassung des Tests

2 years agoTests: Refaktorisiert - Methoden-Reihenfolge aufgeräumt und kommentiert
Kai Moritz [Mon, 11 Apr 2022 08:04:53 +0000 (10:04 +0200)]
Tests: Refaktorisiert - Methoden-Reihenfolge aufgeräumt und kommentiert

2 years agoTests: Der Test wartet, bis die Offsets regulär committed wurden
Kai Moritz [Mon, 11 Apr 2022 07:41:40 +0000 (09:41 +0200)]
Tests: Der Test wartet, bis die Offsets regulär committed wurden

* Zuvor wurde der Offset-Commit erzwungen, indem der EndlessConsumer
  über den Aufruf von `stop()` beendet wurde.
* Jetzt wird die Überprüfung der Erwartungen über awaitility aufgeschoben,
  bis die Erwartungen beobachtet werden können - oder eine Zeitschranke
  gerissen wird.

2 years agoTests: Der EndlessConsumer wird jetzt doch asynchron ausgeführt
Kai Moritz [Sun, 10 Apr 2022 20:50:44 +0000 (22:50 +0200)]
Tests: Der EndlessConsumer wird jetzt doch asynchron ausgeführt

* Der Test-Code wird verständlicher, wenn der Consumer asynchron läuft
* Für die Überprüfung der Erwartungen wird dann awaitility benötigt
** Da der Consumer in einem separaten Thread läuft, muss auf diesen
   gezielt gewartet werden
** Dafür wird es deutlicher/verständlicher, auf welche der auch aus dem
   regulären Betrieb des EndlessConsumer bekannten Zustandsänderungen
   der Test wartet
* Da die Offsets für die Controlle (ggf.) abgefragt werden, während der
  EndlessConsumer noch läuft, wird ein separater KafkaConsumer benötigt,
  um die Offsets abzurufen.
  BEACHTE: Um die Änderungen in dem Offsets-Topic zu greifen zu bekommen,
  muss dieser KafkaConsumer für jede Abfrage ein `assign()` durchführen,
  damit er gezwungen ist, die Offsets neu vom Broker zu erfragen.

2 years agoTests: Refaktorisiert - DRY für Test auf Offset-Fortschritt
Kai Moritz [Sun, 10 Apr 2022 13:54:26 +0000 (15:54 +0200)]
Tests: Refaktorisiert - DRY für Test auf Offset-Fortschritt

2 years agoTests: Überprüft, ob überhaupt ein Offset-Fortschritt vorliegt
Kai Moritz [Sun, 10 Apr 2022 13:25:58 +0000 (15:25 +0200)]
Tests: Überprüft, ob überhaupt ein Offset-Fortschritt vorliegt

2 years agoTests: Offsets werden unter TopicPartition abgelegt
Kai Moritz [Sun, 10 Apr 2022 13:25:57 +0000 (15:25 +0200)]
Tests: Offsets werden unter TopicPartition abgelegt

2 years agoTests: Test-Reihenfolge definiert, da das Topic nicht geleert wird
Kai Moritz [Sun, 10 Apr 2022 14:02:07 +0000 (16:02 +0200)]
Tests: Test-Reihenfolge definiert, da das Topic nicht geleert wird

2 years agoTests: Erste Version eines synchronen Integration-Test implementiert
Kai Moritz [Sat, 9 Apr 2022 14:14:47 +0000 (16:14 +0200)]
Tests: Erste Version eines synchronen Integration-Test implementiert

2 years agoDemonstration der RecordDeserializationException
Kai Moritz [Sat, 9 Apr 2022 16:30:22 +0000 (18:30 +0200)]
Demonstration der RecordDeserializationException

* EndlessConsumer wird mit dem Value-Type `Long` anstatt `String` erzeugt
* Setup für die Demonstration der DeserializationException überarbeitet

2 years agoRefaktorisierung für Tests - EndlessConsumer typisiert
Kai Moritz [Sat, 9 Apr 2022 14:04:02 +0000 (16:04 +0200)]
Refaktorisierung für Tests - EndlessConsumer typisiert

2 years agoRefaktorisierung für Tests - Record-Handler als Bean konfigurierbar
Kai Moritz [Sat, 9 Apr 2022 11:40:47 +0000 (13:40 +0200)]
Refaktorisierung für Tests - Record-Handler als Bean konfigurierbar

* Ein Handler für die Verarbeitung der einzelnen ConsumerRecord's kann
  jetzt ein `java.util.function.Consumer` als Bean definiert werden
* Die Nachricht wird erst nach dem Aufruf des Handlers als konsumiert
  gezählt, damit der Handler die Nachricht über eine Exception ablehnen
  kann.

2 years agoDie Spring-Boot App wird nun sauber herunter gefahren
Kai Moritz [Mon, 11 Apr 2022 08:51:01 +0000 (10:51 +0200)]
Die Spring-Boot App wird nun sauber herunter gefahren

* Zuvor wurde die App nicht richtig beendet, weil der ExecutorService nicht
  beendet wurde und sich die JVM deswegen nicht beenden konnte.
* Dies ist erst durch die Aktivierung des shutdown-Endpoints aufgefallen.
* Jetzt wurde in `Application` eine `@PreDestroy`-Methode ergänzt, die
  den ExecutorService nach allen Regeln der Kunst ordentlich beendet.

2 years agoRefaktorisierung für Tests - ExecutorService als separate Bean erzeugt
Kai Moritz [Sat, 9 Apr 2022 11:21:43 +0000 (13:21 +0200)]
Refaktorisierung für Tests - ExecutorService als separate Bean erzeugt

2 years agoRefaktorisierung für Tests - Start des EndlessConsumer in ApplicationRunner
Kai Moritz [Sat, 9 Apr 2022 09:36:29 +0000 (11:36 +0200)]
Refaktorisierung für Tests - Start des EndlessConsumer in ApplicationRunner

* Bisher wurde der EndlessConsumer beim erzeugen der Bean gestartet
* Dies ist für das Aufsetzen von Tests ungünstig, da die erzeugte Bean
  dort nicht unbedingt direkt gestartet werden soll
* Daher wurde der Start des EndlessConsumer in einen ApplicationRunner
  ausgelagert

2 years agoRefaktorisierung für Tests - Bean-Definition in Config-Klasse verschoben
Kai Moritz [Sat, 9 Apr 2022 09:46:51 +0000 (11:46 +0200)]
Refaktorisierung für Tests - Bean-Definition in Config-Klasse verschoben

2 years agoRefaktorisierung für Tests - KafkaConsumer als eigenständige Bean
Kai Moritz [Sat, 9 Apr 2022 09:21:43 +0000 (11:21 +0200)]
Refaktorisierung für Tests - KafkaConsumer als eigenständige Bean

* Der KafakConsumer wird als eigenständige Bean erzeugt
* Die Bean wird dem EndlessConsumer im Konstruktor übergeben
* Dafür muss der Lebenszyklus der KafkaConsumer-Bean von dem der
  EndlessConsumer-Bean getrennt werden:
** close() darf nicht mehr im finally-Block im EndlessConsumer aufgerufen
   werden
** Stattdessen muss close() als Destry-Methode der Bean definiert werden
** Für start/stop muss stattdessen unsubscribe() im finally-Block aufgerufen
   werden
** Da unsubscribe() die Offset-Position nicht commited, muss explizit
   ein Offsset-Commit beauftragt werden, wenn der Consumer regulär
   gestoppt wird (WakeupException)

2 years agoDie Offsets werden ausgegeben, wenn eine Partition zugeteilt/entzogen wird
Kai Moritz [Sat, 9 Apr 2022 16:29:44 +0000 (18:29 +0200)]
Die Offsets werden ausgegeben, wenn eine Partition zugeteilt/entzogen wird

2 years agoGesehene Schlüssel sollten als long gezählt werden
Kai Moritz [Sat, 9 Apr 2022 16:00:48 +0000 (18:00 +0200)]
Gesehene Schlüssel sollten als long gezählt werden

2 years agoMerge branch 'endless-stream-consumer' into rebalance-listener
Kai Moritz [Sun, 10 Apr 2022 20:15:34 +0000 (22:15 +0200)]
Merge branch 'endless-stream-consumer' into rebalance-listener

2 years agoHealthIndicator implementiert
Kai Moritz [Sun, 10 Apr 2022 19:56:37 +0000 (21:56 +0200)]
HealthIndicator implementiert

2 years agoshutdown-Endpoint aktiviert
Kai Moritz [Sun, 10 Apr 2022 18:55:56 +0000 (20:55 +0200)]
shutdown-Endpoint aktiviert

2 years agoInformationen zur Kafka-Konfiguration im info-Endpoint sichtbar gemacht
Kai Moritz [Sun, 10 Apr 2022 18:55:42 +0000 (20:55 +0200)]
Informationen zur Kafka-Konfiguration im info-Endpoint sichtbar gemacht

2 years agoInformationen zur Java-Umgebung im info-Endpoint aktiviert
Kai Moritz [Sun, 10 Apr 2022 18:55:13 +0000 (20:55 +0200)]
Informationen zur Java-Umgebung im info-Endpoint aktiviert

2 years agoDas Git-Commit-Id-Plugin generiert eine git.properties
Kai Moritz [Sun, 10 Apr 2022 18:27:49 +0000 (20:27 +0200)]
Das Git-Commit-Id-Plugin generiert eine git.properties

2 years agoDas Spring-Boot-Maven-Plugin generiert Build-Info
Kai Moritz [Sun, 10 Apr 2022 18:25:28 +0000 (20:25 +0200)]
Das Spring-Boot-Maven-Plugin generiert Build-Info

2 years agoDefault-Konfiguration überarbeitet
Kai Moritz [Sun, 10 Apr 2022 17:52:09 +0000 (19:52 +0200)]
Default-Konfiguration überarbeitet

* Eine über die IDE bzw. Maven gestartete Instanz soll klar als solche
  erkennbar sein (`client.id` = DEV), darf dafür aber im Compose-Setup
  mitspielen (`group.id` = my-group).
* Bisher gab es häufig Port-Konflikte, wenn über die IDE bzw. über Maven
  parallel zu einem Compose-Setup eine Instanz gestartet wurde. Daher wird
  jetzt hier explizit auf einen abweichenden Port (8881) ausgewichen.
* Im Compose-Setup auch den neuen Port für den Producer übernommen

2 years agoFalschen Status-Code bei start/stop-Fehler korrigiert
Kai Moritz [Sun, 10 Apr 2022 17:49:44 +0000 (19:49 +0200)]
Falschen Status-Code bei start/stop-Fehler korrigiert

2 years agoVerständliche Fehlermeldungen für DriverController
Kai Moritz [Fri, 25 Mar 2022 14:20:00 +0000 (15:20 +0100)]
Verständliche Fehlermeldungen für DriverController

2 years agoMerge branch 'endless-stream-consumer' into rebalance-listener
Kai Moritz [Sun, 10 Apr 2022 17:03:38 +0000 (19:03 +0200)]
Merge branch 'endless-stream-consumer' into rebalance-listener

2 years agoThread-Synchronisation bei start/stop überarbeitet
Kai Moritz [Sun, 10 Apr 2022 16:58:16 +0000 (18:58 +0200)]
Thread-Synchronisation bei start/stop überarbeitet

2 years agoFehlerbehandlung in EndlessConsumer.destroy() korrigiert
Kai Moritz [Sat, 9 Apr 2022 16:50:43 +0000 (18:50 +0200)]
Fehlerbehandlung in EndlessConsumer.destroy() korrigiert

2 years agoValidierung erfolgt über spring-boot-starter-validation
Kai Moritz [Sat, 9 Apr 2022 07:52:59 +0000 (09:52 +0200)]
Validierung erfolgt über spring-boot-starter-validation

2 years agoMerge branch rebalance-listener into counting-consumer
Kai Moritz [Fri, 8 Apr 2022 10:44:37 +0000 (12:44 +0200)]
Merge branch rebalance-listener into counting-consumer

* Nur wegen der Rück-Umbenennung des counting-consumer in endless-consumer
* Die anderen Änderungen aus dem Branch wurden entfernt

2 years agoMerge branch 'stored-state' into stored-offsets
Kai Moritz [Thu, 7 Apr 2022 23:19:01 +0000 (01:19 +0200)]
Merge branch 'stored-state' into stored-offsets

2 years agoMongoDB Express zum Compose-Setup hinzugefügt
Kai Moritz [Thu, 7 Apr 2022 19:40:52 +0000 (21:40 +0200)]
MongoDB Express zum Compose-Setup hinzugefügt

2 years agoConsumer aus der IDE spielt mit
Kai Moritz [Thu, 7 Apr 2022 10:49:09 +0000 (12:49 +0200)]
Consumer aus der IDE spielt mit

* Sonst läuft bei Experimenten die MongoDB auseinander
* Denn in die schreiben die Docker-Instanzen und die IDE-Instanz
* Deswegen gehört jetzt auch die IDE-Instanz zu der Consumer-Group, die
  in Docker-Compose verwendet wird.
* *ANMERKUNG:*
** Da die gezählten Keys jetzt in der MongoDB gespeichert werden, wird
   jetzt die Störung der Partitionierung durch die Änderung der Anzahl
   der Partitionen wieder sichtbar, _obwohl_ zwischendurch ein Wechsel
   der zuständigen Consumer-Instanz erfolgt
** D.h., es wird deutlich, wie sehr Zustand, der aus einer Partition
   aufgebaut wird, unter einer Änderung der Partitions-Anzahl leidet!

2 years agoMerge branch 'rebalance-listener' into stored-state
Kai Moritz [Thu, 7 Apr 2022 23:13:01 +0000 (01:13 +0200)]
Merge branch 'rebalance-listener' into stored-state

2 years agoRückbau auf verschachtelte Maps
Kai Moritz [Thu, 7 Apr 2022 07:25:41 +0000 (09:25 +0200)]
Rückbau auf verschachtelte Maps

* Die zuvor erfundenen fachlichen Klassen passen nicht zu dazu, dass man
  sie - wie gedacht - direkt in MongoDB stopfen könnte.
* Daher hier erst mal der Rückbau auf Maps, da das dan für die Übungen
  einfacher ist.

2 years agoOffset-Position in der MongoDB wird vor jedem `poll()` aktualisiert
Kai Moritz [Wed, 6 Apr 2022 22:00:57 +0000 (00:00 +0200)]
Offset-Position in der MongoDB wird vor jedem `poll()` aktualisiert

2 years agoSetup für die Übung "Offsets" überarbeitet
Kai Moritz [Wed, 6 Apr 2022 21:45:17 +0000 (23:45 +0200)]
Setup für die Übung "Offsets" überarbeitet

2 years agoOffset-Position wird in der MongoDB gespeichert
Kai Moritz [Wed, 6 Apr 2022 21:35:27 +0000 (23:35 +0200)]
Offset-Position wird in der MongoDB gespeichert

2 years agoDie Key-Statistiken werden in einer MongoDB gespeichert
Kai Moritz [Wed, 6 Apr 2022 18:54:37 +0000 (20:54 +0200)]
Die Key-Statistiken werden in einer MongoDB gespeichert

2 years agocounting-consumer ist eine Verbesserung von endless-consumer
Kai Moritz [Wed, 6 Apr 2022 17:51:35 +0000 (19:51 +0200)]
counting-consumer ist eine Verbesserung von endless-consumer

2 years agoBenennung der neuen fachlichen Klassen verbessert
Kai Moritz [Wed, 6 Apr 2022 06:45:57 +0000 (08:45 +0200)]
Benennung der neuen fachlichen Klassen verbessert

2 years agoVerschachtelte Map gegen fachliche Datenstruktur ausgetauscht
Kai Moritz [Wed, 6 Apr 2022 06:34:18 +0000 (08:34 +0200)]
Verschachtelte Map gegen fachliche Datenstruktur ausgetauscht

2 years agoReport über gesehene Schlüssel wiederbelebt
Kai Moritz [Tue, 5 Apr 2022 20:37:55 +0000 (22:37 +0200)]
Report über gesehene Schlüssel wiederbelebt

* An der alten Stelle war die Map ja jetzt nur noch leer, da dem Consumer
  zu dem Zeitpunkt, an dem die gesehen Schlüssel ausgegeben wurden, bereits
  alle Partitionen entzogen worden sind.
* Daher werden die gesehenen Schlüssel jetzt ausgegeben, wenn eine
  Partition entzogen wird.

2 years agoRebalance-Listener anstatt Wegwerfen der Map
Kai Moritz [Tue, 5 Apr 2022 20:25:47 +0000 (22:25 +0200)]
Rebalance-Listener anstatt Wegwerfen der Map

2 years agoHTTPie gibt nicht nur den Response, sondern auch den Request aus
Kai Moritz [Sun, 3 Apr 2022 10:19:47 +0000 (12:19 +0200)]
HTTPie gibt nicht nur den Response, sondern auch den Request aus

2 years agoMerge des Upgrades der Confluent-Images auf 7.0.2
Kai Moritz [Sun, 3 Apr 2022 06:19:26 +0000 (08:19 +0200)]
Merge des Upgrades der Confluent-Images auf 7.0.2

2 years agoMerge des Upgrades der Confluent-Images auf 7.0.2
Kai Moritz [Sun, 3 Apr 2022 06:18:08 +0000 (08:18 +0200)]
Merge des Upgrades der Confluent-Images auf 7.0.2

2 years agoUpgrade der Images von Confluent 6.2.0 auf 7.0.2
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

2 years agoDer Consumer erkennt die Änderung der Partitionierung schneller
Kai Moritz [Sat, 2 Apr 2022 15:18:06 +0000 (17:18 +0200)]
Der Consumer erkennt die Änderung der Partitionierung schneller

* `metadata.max.age.ms` auf 1000 heruntergesetzt (Default 5 min)
* Dadurch wird die Änderung der Anzahl an Partitionen zeitnah erkannt

2 years agoFür null-Keys wird der String NULL gezählt
Kai Moritz [Sat, 2 Apr 2022 13:11:40 +0000 (15:11 +0200)]
Für null-Keys wird der String NULL gezählt

2 years agoREADME.sh zeigt die Auswirkung einer geänderten Partitions-Anzahl
Kai Moritz [Sat, 2 Apr 2022 08:42:05 +0000 (10:42 +0200)]
README.sh zeigt die Auswirkung einer geänderten Partitions-Anzahl

2 years agoDer Consumer zählt jetzt die Nachrichten pro Key für jedes Topic
Kai Moritz [Fri, 1 Apr 2022 20:02:28 +0000 (22:02 +0200)]
Der Consumer zählt jetzt die Nachrichten pro Key für jedes Topic

* Die Ergebnisse werden beim Beenden des Consumer ausgegeben
* Wenn der Consumer neu gestartet wird, werden die Ergebnisse zurückgesetzt
* Über /seen können Zwischenstände abgefragt werden