Kafka 1.0.0 - Serialized.with()使用默认的serde而不是提供的serde

时间:2018-05-16 20:55:05

标签: serialization apache-kafka apache-kafka-streams

我们最近将我们的kafka版本从0.10更新为1.0,我正在更新已弃用的代码

KTable<Long, myClass> myKTable = this.streamBuilder
            .stream(Serdes.Long(), mySerde, sub_topic)
            .groupByKey(Serdes.Long(), mySerde)
            .reduce(myReducer, my_store);

到这个

KTable<Long, myClass> myKTable = this.streamBuilder
            .stream(sub_topic, Consumed.with(Serdes.Long(), mySerde))
            .groupByKey(Serialized.with(Serdes.Long(), mySerde))
            .reduce(myReducer, Materialized.as(my_store));

我的流在groupByKey中序列化时抛出错误。 Serialized.with()未使用提供的keySerde,默认返回byteArray。然后这个byteArray serde遇到我的密钥Long并抛出一个强制转换错误。

有没有其他人在kafka的1.0.0版本中遇到此错误。具有过时版本的kafka的第一个代码工作正常。但更新代码以使用Serialized.with()似乎不起作用。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你能分享堆栈跟踪吗?我实际上认为问题出在reduce() - 您需要再次通过Serdes指定Materialized

这是对新API的回归,最近在trunk得到修复:https://github.com/apache/kafka/pull/4919因此,即将推出的2.0版本将包含修复程序。