gpt4 book ai didi

apache-kafka - 发布无法反序列化为 DLT 主题的消息

转载 作者:行者123 更新时间:2023-12-04 10:33:48 26 4
gpt4 key购买 nike

我不明白如何使用 spring kafka 将无法反序列化的消息写入 DLT 主题。

我根据 spring kafka docs 配置了消费者这对于在消息反序列化后发生的异常很有效。

但是当消息不可反序列化时,org.apache.kafka.common.errors.SerializationException在轮询消息时抛出。

随后,SeekToCurrentErrorHandler.handle(Exception thrownException, List<ConsumerRecord<?, ?>> records, ...)使用此异常调用,但记录列表为空,因此无法向 DLT 主题写入内容。

我如何将这些消息也写入 DLT 主题?

最佳答案

问题是异常是由 Kafka 客户端本身抛出的,因此 Spring 无法看到失败的实际记录。

这就是我们添加 ErrorHandlingDeserializer2 的原因可用于包装实际的解串器;失败被传递到监听器容器并作为 DeserializationException 重新抛出.

the documentation .

When a deserializer fails to deserialize a message, Spring has no way to handle the problem, because it occurs before the poll() returns. To solve this problem, version 2.2 introduced the ErrorHandlingDeserializer2. This deserializer delegates to a real deserializer (key or value). If the delegate fails to deserialize the record content, the ErrorHandlingDeserializer2 returns a null value and a DeserializationException in a header that contains the cause and the raw bytes. When you use a record-level MessageListener, if the ConsumerRecord contains a DeserializationException header for either the key or value, the container’s ErrorHandler is called with the failed ConsumerRecord. The record is not passed to the listener.


DeadLetterPublishingRecoverer具有检测异常并发布失败记录的逻辑。

关于apache-kafka - 发布无法反序列化为 DLT 主题的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60284409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com