4

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

4

1 回答 1

8

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

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

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

于 2017-09-19T17:19:23.620 回答