Springify: BatchListener konfiguriert - Hilft nicht wirklich...
authorKai Moritz <kai@juplo.de>
Thu, 14 Apr 2022 16:56:04 +0000 (18:56 +0200)
committerKai Moritz <kai@juplo.de>
Fri, 15 Apr 2022 08:29:58 +0000 (10:29 +0200)
commit9b3731e4a7aeca27f7ba11502bc7f0a66c1d22b8
treea707947838bfdf5b8a4d8108674a5919b25c049e
parentceb3caf09c5b8594493c6d98a1dd06f178b5f2d0
Springify: BatchListener konfiguriert - Hilft nicht wirklich...

* Unerwartete aber eigentlich logische Folge:
** Es werden weiterhing alle 100 Nachrichten abgeholt
** Der Testfall schlägt trotzdem nicht fehl, da die Erwartung an die
   gespeicherten Offsets dynamisch aus den tatsächlich vom Listener
   bezogenen Nachrichten bestimmt wird.
* Der Effekt tritt ein, weil der `ErrorHandlingDeserializer` ja die
  verursachende Exception schluckt und dafür eine Behandlung des Fehlers
  vornimmt, die den Fehler für die nachfolgenden Komponenten transparenter
  machen soll.
* Es ist aber eher das Gegenteil der Fall, da die Folge ist, dass der
  `poll()`-Aufruf alle Nachrichten - _auch die nach dem Fehler!_ - abholt.
* D.h., es ist nicht mehr so simpel und elegant erkennbar, an welcher
  Stelle die `RecordDeserializationException` aufgetreten ist
* Wenn man - wie hier beabsichtigt - die Konsumption beim Auftreten des
  dieser Sorte Ausnahme-Fehler stoppen und die Offsets für alle _vor_ dem
  Auftreten des Fehlers fehlerfrei empfangenen Nachrichten dafür speichern
  will, dann ist dies ohne eine umständliche Offset-Verwaltung und vielen
  `seek()`-Aufrufen nicht mehr möglich!
* Eine einfache Abhilfe scheint nicht möglich, da der
  `KafkaMessageListenerContainer` nicht damit umgehen kann, wenn _in_ dem
  `poll()` eine Exception geworfen wird und dann - wie beobachtet - in
  einer Endlosschleife hängen bleibt.
src/main/java/de/juplo/kafka/ApplicationConfiguration.java
src/main/java/de/juplo/kafka/EndlessConsumer.java