如何解决kafka-avro反序列化问题

5vf7fwbs  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(428)

我们有一个非常奇怪的行为与应用程序使用Kafkaavro消费者和生产者。
我们有一个正在运行合流安装的服务器。all是手动配置的,因此不使用汇合cli。
在第二台服务器上,有一个正在运行的应用程序,它使用这个合流安装通过kafka主题接收请求。这个请求被转换成一个数据库查询,并返回一个带有特定数据的回复主题。
在第三台服务器上有另一个应用程序,该应用程序将此请求发送到服务器2上的应用程序并接收回复主题。
综上所述:服务器1(合流安装)服务器2(请求使用者和回复生产者应用程序)服务器3(请求发送者和回复使用者应用程序)
我为我们开发了一个kafkaapi,所有人都在使用消费者和生产者以及合流的avro序列化程序和反序列化程序。当我现在从服务器3上的应用程序生成请求主题时,服务器2上的应用程序接收请求,将其转换为数据库查询并发回与请求主题不同的回复主题。现在我在服务器3上的应用程序应该接收测试回复主题并反序列化它。
我的测试回复主题包含一个“union{null,bytes}file”字段。因此该字段是可选的,默认值为null,然后在注册表中注册schema。现在,如果文件值为null,则会给我一个错误:
在偏移量0处反序列化分区test-reply-topic-0的键/值时出错。如有需要,请查询过去的记录继续消费。原因:反序列化id为6的avro消息时出错详细信息:发现null,应为字节
如果它包含字节,那么它正在工作。
奇怪的是,如果我在本地计算机上尝试同样的方法,它将使用file=null和file=some bytes。所以我在生产者和消费者中使用相同的kafka代理、相同的api和相同的值。它正在从服务器和本地计算机上的注册表请求相同的架构id。
也许有人暗示了问题可能是什么,我一直在寻找这个问题,但没有找到解决办法。
非常感谢!

6qfn3psc

6qfn3psc1#

对不起,我迟了答复。结果证明,有反序列化问题的应用程序使用了旧生成的java类。所以它使用了旧的模式,以前没有联合类型。

相关问题