我们正在编写一个自定义接收器连接器,用于将带有avro消息的主题内容写入ceph存储器。
为了做到这一点,我们提供了sinkrecords,它有一个kafka连接模式,它是avro模式的Map版本。因为我们想将avro写入ceph,所以我们使用connectapi方法将connect模式转换回avro。我们为什么要这么做?引入kafka连接模式而不使用更常用的avro模式有什么好处?
仅供参考:我问这个问题是因为我们与avro工会有一些问题。它们到kafka连接模式的Map仍然存在一些问题,例如。https://github.com/confluentinc/schema-registry/commit/31648f0d34b10c1b36e8ec6f4c1236ed3fe86495#diff-0a8d4f17f8d4a68f2f0d2dcd9211df84型
1条答案
按热度按时间iqih9akk1#
kafka connect定义了自己的模式结构,因为该框架将连接器与kafka中消息如何序列化的任何知识隔离开来。这使得可以将任何连接器与任何转换器一起使用。如果没有这种分离,那么连接器将期望消息以特定的形式序列化,从而使它们更难重用。
如果您知道所有消息都是用特定的avro模式序列化的,那么您可以始终将接收器连接器配置为使用
ByteArrayConverter
,然后连接器可以处理序列化形式的消息。但是,请注意,如果消息是使用confluents avro serializer(或源连接器中的avro converter)序列化的,则键和值的二进制形式将在前导字节中包括幻码字节和avro模式标识符。字节数组的剩余内容将是avro序列化形式。