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

What is the reasoning behind Kafka Connect Schemas?

我们正在编写自定义接收器连接器,用于将带有 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

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

如果您知道所有消息都使用特定的 Avro 模式序列化,您始终可以将接收器连接器配置为使用 ByteArrayConverter 作为键和值,然后您的连接器可以处理序列化形式。

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