Hi Yoda,
for certain cases, Kafka Streams allows you to specify handlers that
skip the problematic record. Those handlers are:
1. deserialization exception handler configured in
default.deserialization.exception.handler
2. time extractor set in default.timestamp.extractor and in the Consumed
object
3. production exception handler configured in
default.production.exception.handler
Kafka Streams provides implementations for handlers 1 and 2 to skip the
problematic records, that are LogAndContinueExceptionHandler and
LogAndSkipOnInvalidTimestamp, respectively.
For some more details have a look at
https://docs.confluent.io/platform/current/streams/faq.html#failure-and-exception-handling
If problematic records cause an exception in user code, the user code
needs to provide functionality to skip the problematic record.
Best,
Bruno
On 10.08.21 13:26, Yoda Jedi Master wrote:
Hi Bruno, thank you for your answer.
I mean that the message that caused the exception was consumed and replaced
thread will continue from the next message. How then does it handle
uncaught exceptions, if it will fail again?
On Tue, Aug 10, 2021 at 12:33 PM Bruno Cadonna <cado...@apache.org> wrote:
Hi Yoda,
What do you mean exactly with "skipping that failed message"?
Do you mean a record consumed from a topic that caused an exception that
killed the stream thread?
If the record killed the stream thread due to an exception, for example,
a deserialization exception, it will probably also kill the next stream
thread that will read that record. Replacing a stream thread does not
skip records but it can result in duplicate records depending on the
application’s processing mode determined by the
PROCESSING_GUARANTEE_CONFIG value as stated in the docs you cited.
Best,
Bruno
On 10.08.21 11:15, Luke Chen wrote:
Hi Yoda,
For your question:
If an application gets an uncaught exception, then the failed thread
will
be replaced with another thread and it will continue processing messages,
skipping that failed message?
--> Yes, if everything goes well after `replace thread`, you can ignore
this failed message. Just one reminder that you should check the failed
message to avoid this `uncaught exception` thrown again, because if this
happens frequently, it'll impact application performance.
Thank you.
Luke
On Tue, Aug 10, 2021 at 4:25 PM Yoda Jedi Master <yodaj...@gmail.com>
wrote:
"REPLACE_THREAD - Replaces the thread receiving the exception and
processing continues with the same number of configured threads. (Note:
this can result in duplicate records depending on the application’s
processing mode determined by the PROCESSING_GUARANTEE_CONFIG value)"
If an application gets an uncaught exception, then the failed thread
will
be replaced with another thread and it will continue processing
messages,
skipping that failed message?