【问题标题】:kafka connect avro enums parsed into stringkafka connect avro枚举解析成字符串
【发布时间】:2018-02-07 18:10:43
【问题描述】:

我正在使用来自 confluent 的 kafka 连接框架将消息从我的应用服务器生成到 kafka 集群(用于支持 avro 的 Zookeeper + 代理 + 模式注册表)。

我通过 connect 发送的数据是由 avro 模式定义的。我的架构表示包含 ENUMS 的结构化对象。事实上 Apache avro 支持枚举类型。 我不必将我的架构提交到注册表,因为 kafka 连接 API 会自动完成。

我的问题是 kafka connect 似乎将 ENUMS 解析为字符串。当我尝试使用时,我发现 connect 提交的模式不正确,因为它已将我的所有 ENUMS 转换为字符串。因此,如果不实现从 String 到 ENUMS 的转换逻辑,我就无法使用我的数据。

我想将我的逻辑信息保留为 ENUM 并使用 kafka 连接。我跳进了 kafka-connect 代码,它似乎不处理枚举类型,而只处理基本类型。

我目前的替代方案是构建自己的生产框架,通过模仿连接框架来保留 ENUMS,但这很耗时,我无法避免使用 ENUMS。

您是否设法使用 kafka-connect 生成和消费包含 ENUMS 到 kafka 的记录?

欢迎任何帮助或经验反馈, 谢谢!

【问题讨论】:

  • 在我工作的地方,我们的政策禁止 Avro 枚举,因为向枚举添加符号定义了一个新架构,使用旧架构的读者无法读取该架构。 Avro 规范说如果作者的符号不存在于读者的枚举中,则发出错误信号。因此,我们将它们表示为 Avro 字符串。
  • 您好,Chun Huang,感谢您的明确回答。您是否正在实施逻辑以将字符串转换回消费者级别和所有消费者的枚举?
  • 是的,生产者和消费者实现了在枚举和字符串之间转换的逻辑。

标签: enums apache-kafka avro apache-kafka-connect confluent-platform


【解决方案1】:

在更新的 Connect 版本(大约 4.2+)中,有这些属性。 (我个人没有在文档中看到,但是在源代码中能找到,因为我也发现了和你一样的东西)

如您所见,默认值为 false,并且在较新的版本中告诉我,它将设置为 true

public static final String ENHANCED_AVRO_SCHEMA_SUPPORT_CONFIG = "enhanced.avro.schema.support";
public static final boolean ENHANCED_AVRO_SCHEMA_SUPPORT_DEFAULT = false;
public static final String ENHANCED_AVRO_SCHEMA_SUPPORT_DOC =
  "Enable enhanced avro schema support in AvroConverter: Enum symbol preservation and Package"
      + " Name awareness";

就目前而言,您需要在工作人员/连接器级别设置这些以保留枚举,假设您正在运行具有这些的 Connect 版本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 2021-01-16
    相关资源
    最近更新 更多