Kai Moritz [Wed, 10 Jun 2026 15:06:06 +0000 (17:06 +0200)]
Version des Consumers, die bei Last an Dauer des Poll-Loop scheitert
* Der Consumer legt bei Nachrichten, deren Nachrichten-Inhalt (als Zahl
betrachtet) modulo 7 glatt aufgeht, eine zufällige Schaffens-Pause von
0 - 2000 ms ein.
* Außerdem wurde `max.poll.interval.ms` auf 5 s heruntergesetzt und
`max.poll.records` auf 30 Nachrichten.
* Die Werte wurden über fleißiges ausprobieren so abgestimmt, dass dieser
Consumer regelmäßig daran scheitert, alle Nachrichten innerhalb der
vorgegebenen 5000 ms zu verarbeiten, so dass man in den Logs sehr gut
den asynchron durch den Backrgound-Thread erzeugten Leave-Group Request
erkennen kann, der bereits erfolgt, _bevor_ der Consumer alle Nachrichten
verarbeitet hat, erneut `poll()` aufruft und _erst dann_ erfährt, dass
ihm die Partitionen inzwischen entzogen wurden.
* Um dies noch besser erkennen zu können, wurden außerdem Log-Meldungen vor
und nach der Schaffens-Pause und - insbesondere - nach der Verarbeitung
aller erhaltenen Nachrichten eingefügt.
* *BEACHTE:* Der Consumer scheitert nur, wenn sich zuvor ein gewisser
Rückstau gebildet hat. Solange er in "Echtzeit" eine Nachricht pro Sekunde
erhält, hat er natürlich keine Probleme.
* Um den Fehler auszulösen, muss der (ansonsten nicht angepasste) Producer
also mind. 30 Sekunden gelaufen sein, ohne dass ein anderer Consumer die
Nachrichten konsumiert hat.
.dockerignore und .maven-dockerinclude gehören zum alten
Dockerfile/fabric8-basierten Build-Workflow und werden von
Jib bzw. bootBuildImage nicht benötigt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 23 May 2026 06:55:54 +0000 (06:55 +0000)]
refactor: Dockerfile und manuelle Jar-Packaging-Konfiguration entfernen
Seit der Umstellung auf Jib ist das Dockerfile nicht mehr nötig.
maven-dependency-plugin und maven-jar-plugin-Konfiguration (Classpath-
Manifest) waren nur für den manuellen Docker-Build-Weg erforderlich.
Jib übernimmt das Packaging vollständig; mainClass ist nun explizit
in der Jib-Konfiguration gesetzt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Fri, 22 May 2026 12:39:00 +0000 (12:39 +0000)]
refactor: Docker-Build von fabric8/bmuschko auf Jib umstellen
Maven nutzte das io.fabric8:docker-maven-plugin mit einem handgepflegten
Dockerfile. Gradle kopierte das JAR umständlich in ein target/-Verzeichnis,
damit dasselbe Dockerfile funktioniert (COPY target/*.jar).
Beide Build-Systeme nutzen jetzt Jib (com.google.cloud.tools:jib-maven-plugin
bzw. com.google.cloud.tools.jib), das direkt aus den compilierten Klassen
und Abhängigkeiten ein OCI-Image erzeugt:
Maven: mvn package (jib:dockerBuild ist an package-Phase gebunden)
Gradle: ./gradlew jibDockerBuild
Für den Registry-Push:
Maven: mvn jib:build
Gradle: ./gradlew jib
Vorteile:
- Kein Dockerfile mehr nötig (kein Kopier-Hack in Gradle)
- Beide Build-Systeme verwenden dieselbe Methode
- Optimiertes Layering (Abhängigkeiten in separaten Layern)
- Kein laufender Docker-Daemon für den Build nötig
Außerdem: gradle-git-properties Plugin hinzugefügt, analog zum
git-commit-id-plugin in Maven.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Fri, 22 May 2026 12:38:32 +0000 (12:38 +0000)]
fix: Lombok in Maven korrekt als optional deklarieren
Lombok war mit <scope>compile</scope> deklariert, was dazu führt, dass
es als transitive Abhängigkeit weitergegeben wird. Da Lombok ein reines
Compile-Zeit-Tool (Annotation Processor) ist, muss es als <optional>true</optional>
markiert werden. Der Spring-Boot-Maven-Plugin schließt optionale
Abhängigkeiten automatisch aus dem fat-JAR aus.
Das Gradle-Setup ist in diesem Punkt bereits korrekt (compileOnly +
annotationProcessor).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 15 Mar 2026 09:00:49 +0000 (10:00 +0100)]
Limits für die Definition des Service `producer` ergänzt
* Dadurch wird die Gefahr eingegrenzt, dass der Arbeitsplatz eines TN
überlastet wird.
* Dies ist einigen TN passiert, weil sie den `ExampleProducer` ohne
`Thread.sleep(500)` als Image gebaut haben.
* Wenn dieser dann unbedacht im Hintergrund weiterläuft, kann das den
Rechner schnell lahm legen...
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