kafka connect avro enums解析为字符串

时间:2018-02-07 18:10:43

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

我正在使用融合的kafka connect框架从我的应用程序服务器生成消息到kafka集群(zookeeper + brokers + schema注册表以获得avro支持)。

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

我的问题是kafka connect似乎将ENUMS解析为String。当我尝试使用时,我发现连接提交的模式不正确,因为它已将所有ENUMS转换为String。因此,我不能使用我的数据来实现从String到ENUMS的转换逻辑。

我想将我的逻辑信息保存为ENUM并使用kafka connect。我跳进了kafka-connect代码,似乎没有处理枚举类型,只有基本类型。

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

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

任何帮助或经验反馈都是热烈的, 谢谢!

1 个答案:

答案 0 :(得分:0)

在最近的Connect版本中,或者可能只是当前的主分支,有这些属性。 (我个人没有在文档中看到过,但我能够在源代码中找到它们,因为我也找到了与你相同的东西)

正如您所看到的,默认值为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版本