【问题标题】:Convert Kafka connect Struct to POJO将 Kafka 连接结构转换为 POJO
【发布时间】:2022-01-26 04:25:01
【问题描述】:

我正在开发从数据库捕获数据更改 (CDC) 的组件,对数据应用一些业务逻辑,然后将它们发送到一个新主题,该主题是一个天蓝色的事件中心主题。

我的堆栈包括:

  • 骆驼管道
  • 嵌入式 Debezium(用于 CDC)

这个来自 debezium 的 article 是我开始工作的基础。 Converter 用于将 Struct 转换为 POJO。

  @Converter
  public static class Converters {

    @Converter
    public static Question questionFromStruct(Struct struct) {                   
      return new Question(struct.getInt64("id"), struct.getString("text"),
          struct.getString("email"));
    }

    @Converter
    public static Answer answerFromStruct(Struct struct) {                       
      return new Answer(struct.getInt64("id"), struct.getString("text"),
          struct.getString("email"), struct.getInt64("question_id"));
    }
  }

就我而言,我正在处理的 POJO 是 Avro 生成的。它还包括 20 多个我不想手动设置的属性。

我考虑过 MapStruct 或 Dozer 等映射器。但是不处理这种映射。

关于如何更自动化地处理struct 有什么见解吗?

【问题讨论】:

    标签: java apache-kafka apache-camel apache-kafka-connect debezium


    【解决方案1】:

    如 Debezium 引擎文档中所述

    在内部,引擎使用适当的 Kafka Connect 转换器实现,转换被委托给它

    这意味着,您需要反转 Converter 方法,然后使用 Kafka Deserializer 类将数据返回到最初生成的 POJO。


    假设您使用了 Confluent 的 AvroConverter,那么您应该能够使用 AvroConverter#fromConnectData 返回 byte[] 作为键/值。不过,您首先需要为您的Struct 使用 Connect Schema 实例。

    从那里,您可以将字节传递给KafkaAvroDeserializer#deserialize 并将响应转换为您生成的类。


    另外,在 Debezium/Kafka Connect 中转换数据的正确方法是使用 Simple-Message-Transforms 并保留在 Struct/Schema API 中。

    【讨论】:

    • 我实际上在使用 debezium embedeed,如果你看看我发布的 debezium 文章。此外,结构是管道的一部分,由 debezium 触发。您指出我需要一个主题的方法是不是。
    • 您使用什么框架并不重要。 “主题名称”只是在 Schema Registry 中执行主题名称查找,实际上并不对 Kafka 客户端做任何事情
    • 我可能是错的,但它迫使我拥有一个模式注册表和一个 kafka 连接器,这是我不想拥有的两件事。还有其他的转换方式吗?
    • Debezium 是一个 Kafka 连接器,无论是否嵌入。我对您如何生成数据做出了假设。如果您没有使用 Confluent AvroConverter,那么 Debezium/Camel 没有我所知道的内置 Avro 函数,那么在构建 Structs 之前如何创建这些数据?
    • 查看源代码,使用了 Confluent 转换器,它需要一个模式注册表(我猜它可以嵌入到引擎中)-github.com/debezium/debezium/commit/…
    猜你喜欢
    • 2014-11-17
    • 2020-03-06
    • 2017-12-04
    • 2018-10-01
    • 2016-09-15
    • 1970-01-01
    • 2019-07-06
    • 2013-11-11
    • 1970-01-01
    相关资源
    最近更新 更多