]> juplo.de Git - demos/kafka/training/commit
Version des Consumers, die bei Last an Dauer des Poll-Loop scheitert consumer/simple-consumer--max-poll-interval-ms--2026-06-lvm
authorKai Moritz <kai@juplo.de>
Wed, 10 Jun 2026 15:06:06 +0000 (17:06 +0200)
committerKai Moritz <kai@juplo.de>
Wed, 10 Jun 2026 15:21:02 +0000 (17:21 +0200)
commit088f8dd11ec718a9c2010cb764938913d54fe3ee
treed6546fe376476a426229771699c6bbedff1b52d7
parentfa20ef49547fab9f8c9160b160655c6a9343508e
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.
src/main/java/de/juplo/kafka/ExampleConsumer.java