Thanks Sophie, I can write something in the KIP on how KStreams solves that issue, but as I can't create a Wiki account, I will have to find someone to do this on my behalf (if someone can work on solving that wiki account creation, it would be great).
The biggest difference between Record and ConsumerRecord is that data are stored respectively using ByteBuffer and Byte array. For the Record option, the object already exists in the parsing method, so it's roughly just a parameter type change in the Exception. The point is just about exposing the Record class externally. By the way, the name Record is also making some IDE a bit crazy by confusing it with the new Java Record feature. An alternative could be to create another wrapper type of just include key and value ByteBuffer in the RecordDeserializationException itself. For the ConsumerRecord option, it requires to allocate Byte arrays, even if the user does not need it (skip the poison pill for example). This might have some extra cost on GC for some specific use case. Fred