Kafka Connect Schemas背后的原因是什么?

时间:2017-09-19 13:06:46

标签: apache-kafka avro apache-kafka-connect confluent-schema-registry

我们正在编写一个自定义接收器连接器,用于将带有avro消息的主题内容写入CEPH存储。

为此,我们提供了SinkRecords,它具有Kafka Connect架构,它是我们的avro架构的映射版本。由于我们要将avro写入CEPH,因此我们使用connect API方法将Connect架构转换回Avro。为什么我们需要这样做?引入Kafka Connect Schema而不使用更常用的Avro Schema有什么好处?

仅供参考:我问这个是因为我们与Avro工会有一些问题。他们与Kafka Connect Schema的映射仍然存在一些问题,例如: https://github.com/confluentinc/schema-registry/commit/31648f0d34b10c1b36e8ec6f4c1236ed3fe86495#diff-0a8d4f17f8d4a68f2f0d2dcd9211df84

1 个答案:

答案 0 :(得分:6)

Kafka Connect定义了自己的架构结构,因为该框架将连接器与Kafka中消息序列化的任何知识隔离开来。这使得任何转换器都可以使用任何连接器。如果没有这种分离,那么连接器会希望消息以特定的形式被序列化,这使得它们更难以重用。

如果您知道所有消息都使用特定的Avro架构进行序列化,则始终可以将接收器连接器配置为使用ByteArrayConverter来获取密钥和值,然后您的连接器可以处理序列化形式的消息。

但是,请注意,如果使用Confluents Avro序列化程序(或源连接器中的Avro Converter)序列化消息,则键和值的二进制形式将包括前导字节中的魔术字节和Avro架构标识符( S)。字节数组的剩余内容将是Avro序列化形式。