【问题标题】:How to solve Kafka Avro deserializing problem如何解决 Kafka Avro 反序列化问题
【发布时间】:2019-02-12 22:00:22
【问题描述】:

我们在使用 kafka avro 消费者和生产者的应用程序中出现了一个非常奇怪的行为。

我们有一台正在运行融合安装的服务器。全部都是手动配置的,所以没有使用 confluent cli。

在第二台服务器上,有一个应用程序正在运行,它使用这个融合安装来通过 Kafka 主题接收请求。该请求被转换为数据库查询,并返回一个包含特定数据的回复主题。

在第三台服务器上有另一个应用程序,该应用程序将此请求发送到服务器 2 上的应用程序并接收回复主题。

总结一下: 服务器 1(融合安装) 服务器 2(请求消费者和回复生产者应用程序) 服务器 3(请求发送者和回复消费者应用程序)

我为我们开发了一个 kafka API,所有这些 API 都使用带有融合 avro 序列化器和反序列化器的消费者和生产者。 当我现在从服务器 3 上的应用程序生成请求主题时,服务器 2 上的应用程序接收请求,将其转换为数据库查询并发送回与请求主题不同的回复主题。 现在我在服务器 3 上的应用应该会收到 test-reply-topic 并对其进行反序列化。

我的 test-reply-topic 包含一个“union{null, bytes} 文件”字段。所以该字段是可选的,默认值为空,然后在注册表中注册模式。现在,如果文件值为 null,它会给我一个错误:

在反序列化分区 test-reply-topic-0 的键/值时出错 偏移量0。如果需要,请寻找过去的记录继续 消费。原因:反序列化 id 6 的 Avro 消息时出错 详细:发现为空,需要字节

如果它包含字节,它正在工作。

奇怪的是,如果我在本地计算机上尝试相同的操作,它正在使用 file=null 和 file=some 字节。所以我在生产者和消费者中使用相同的 kafka 代理、相同的 API 和相同的值。 它正在从服务器和本地计算机上的注册表中请求相同的模式 ID。

也许有人有一些提示可能是什么问题,我从几天以来一直在寻找这个问题并没有找到解决方案。

非常感谢!

【问题讨论】:

  • 如果您可以为生产者和消费者共享完整的架构和代码,那将会很有用
  • 您可能想尝试清除主题并尝试重新消费。这个错误一般发生在producer发送的和SR中注册的schema不匹配时。
  • 抱歉我的回复晚了。事实证明,存在反序列化问题的应用程序使用了旧生成的 java 类。所以它使用了旧的模式,以前没有联合类型。

标签: java apache-kafka avro confluent-platform confluent-schema-registry


【解决方案1】:

对不起,我的回复晚了。事实证明,存在反序列化问题的应用程序使用了旧生成的 java 类。所以它使用了以前没有联合类型的旧模式。

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 2017-01-22
    • 2019-03-03
    • 2019-09-18
    • 2020-10-15
    • 1970-01-01
    • 2017-11-20
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多