Kafka流GlobalKTable在逻辑删除上引发反序列化异常-空值-记录

问题描述

我有一个基于Spring云流的Kafka Streams应用程序,其中将全局KTable绑定到Compact主题。当我将逻辑删除记录推送到主题(具有空值的非空键)时,我的Kafka流应用程序失败,出现反序列化异常。失败的原因是我的解串器无法处理空记录。

从文档中,我认为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)

解决方法

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

KafkaConsumer的{​​{1}}(在调用之前检查Fetcher)不同,null无条件调用它。见

kafka-streams