当前位置: 首页 > 知识库问答 >
问题:

Kafka streams GlobalKTable在Tombstone上引发反序列化异常-空值-记录

谷梁翰飞
2023-03-14

我有一个基于Spring cloud Streams的Kafka Streams应用程序,我将全局KTable绑定到一个紧凑的主题。当我将Tombstone记录推到主题(非空键,值为null)时-我的Kafka streams应用程序失败,出现反序列化异常。失败是因为我的反序列化程序不处理空记录。

从文档中,我认为GlobalKTable甚至不会“看到”空值记录。难道不是这样吗?我需要在反序列化程序中处理空记录吗?

org.apache.kafka.common.errors.SerializationException: Unable to deserialize
Caused by: java.lang.IllegalArgumentException: argument "src" is null
    at com.fasterxml.jackson.databind.ObjectMapper._assertNotNull(ObjectMapper.java:4693)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3511)
    at common.domain.serdes.MySerde$MyDeserializer.deserialize(MySerde.java:47)
    at common.domain.serdes.MySerde$MyDeserializer.deserialize(MySerde.java:39)
    at org.apache.kafka.streams.processor.internals.SourceNode.deserializeValue(SourceNode.java:63)
    at org.apache.kafka.streams.processor.internals.RecordDeserializer.deserialize(RecordDeserializer.java:66)
    at org.apache.kafka.streams.processor.internals.GlobalStateUpdateTask.update(GlobalStateUpdateTask.java:91)
    at org.apache.kafka.streams.processor.internals.GlobalStreamThread$StateConsumer.pollAndUpdate(GlobalStreamThread.java:240)
    at org.apache.kafka.streams.processor.internals.GlobalStreamThread.run(GlobalStreamThread.java:289)

共有1个答案

祁远
2023-03-14

是的;您必须检查null返回null。请参阅任何标准反序列化器。

kafkaconsumerfetcher(在调用之前检查null)不同,kafka-streams无条件调用它。参见

 at org.apache.kafka.streams.processor.internals.SourceNode.deserializeValue(SourceNode.java:63)
 类似资料:
  • 我反映了JSON.NET JavaScriptDateTimeConverter类代码,复制了它,并将该类重命名为3DateTimeConverter,以便修改它以更精确和强类型的庄园格式化DateTime对象。 我让它根据JSON.NET输出强类型对象的方式输出一个类型,如: 运行JsonConverter的重写WriteJson方法来生成该值。 但是,当我尝试使用与相同转换器完全相同的设置反序

  • 我正在开发一个应用程序,它使用Gson作为JSON反序列化器,需要从REST API反序列化多态JSON。在解释mi问题之前,请注意,我已经用Gson研究了多态反序列化,并在几个案例中成功地实现了它。这是我面临的一个具体问题。在问这个问题之前,我也读过这篇很棒的帖子和关于堆栈溢出的讨论。顺便说一下,我正在使用RuntimeTypeAdapterFactory来反序列化多态对象。 我遇到的问题是,G

  • 试图在Java中使用protobuf反序列化消息,并得到以下异常。 原因:com.google.protobuf.InvalidProtocolBufferException:在解析协议消息时,输入意外地在字段中间结束。这可能意味着输入被截断,或者嵌入的消息错误报告了自己的长度。在com.google.protobuf.InvalidProtocolBufferException.Truncate

  • 我正在尝试反序列化以下JSON: 通过此方法调用: 方法: 不幸的是,我得到了以下错误: System.Text.Json.JsonException:'JSON 值无法转换为 System.DateTime。路径:$。出版|行号: 0 |BytePositionInLine: 353.' JSON 来自对以下 API 方法的调用: 是正常的 属性 我做错了什么?如何将JSON的<code>pub

  • 下面是我的JSON响应, 原因:com.fasterxml.jackson.databind.JSONMappingException:无法反序列化[source:java.io.pushbackInputStream@bce1d9;行:1,列:556]处START_OBJECT标记外的java.util.ArrayList实例(通过引用链:com.totalhours[“data”]->com.

  • 我重构我的代码来使用kryo序列化。一切都很好,除了从某个类中反序列化一个土工属性。不会引发异常(我将“spark.kryo.registrationRequired”设置为true)。在调试时,我试图收集数据,但我看到geomtry中的数据只是空的。结果,我明白反序列化失败了。Geomtry来自-Any(scala)类型,因为它可能是一个复杂的属性。我的问题是为什么数据是空的,以及是否与属性的类