Apache kafka 将无法反序列化的消息发布到DLT主题
我不明白如何使用SpringKafka将无法反序列化的消息写入DLT主题 我根据配置了使用者,这对于消息反序列化后发生的异常非常有效 但是当消息不可反序列化时,轮询消息时会抛出Apache kafka 将无法反序列化的消息发布到DLT主题,apache-kafka,spring-kafka,Apache Kafka,Spring Kafka,我不明白如何使用SpringKafka将无法反序列化的消息写入DLT主题 我根据配置了使用者,这对于消息反序列化后发生的异常非常有效 但是当消息不可反序列化时,轮询消息时会抛出org.apache.kafka.common.errors.SerializationException 随后,SeekToCurrentErrorHandler.handle(Exception thrownException,List问题在于异常是由Kafka客户端本身引发的,因此Spring无法看到失败的实际记录
org.apache.kafka.common.errors.SerializationException
随后,
SeekToCurrentErrorHandler.handle(Exception thrownException,List问题在于异常是由Kafka客户端本身引发的,因此Spring无法看到失败的实际记录
这就是为什么我们添加了ErrorHandlingDeserializer2
,它可以用来包装实际的反序列化程序;失败被传递到侦听器容器,并作为反序列化异常重新抛出
看
当反序列化程序无法反序列化消息时,Spring无法处理此问题,因为它发生在poll()返回之前。为了解决此问题,版本2.2引入了ErrorHandlingDeserializer2。此反序列化程序委托给真正的反序列化程序(键或值)。如果委托未能反序列化记录内容,ErrorHandlingDeserializer2将在包含原因和原始字节的标头中返回空值和反序列化异常。使用记录级MessageListener时,如果ConsumerRecord包含键或值的反序列化异常标头,则容器使用失败的ConsumerRecord调用的ErrorHandler。该记录不会传递给侦听器
DeadLetterPublishingRecoverer
具有检测异常并发布失败记录的逻辑