在没有 Confluent Schema Registry 的情况下在 KafkaConnect 中使用 Avro
Posted
技术标签:
【中文标题】在没有 Confluent Schema Registry 的情况下在 KafkaConnect 中使用 Avro【英文标题】:Use Avro in KafkaConnect without Confluent Schema Registry 【发布时间】:2019-02-19 08:11:21 【问题描述】:我们在当前的基础设施中设置了 vanilla apache Kafka,并开始记录一些我们想要使用 Kafka Connect 处理的数据。目前我们使用 Avro 作为我们的消息格式,但我们的基础设施中没有 Schema Registry。 将来,我们计划用 Confluent 替换当前的堆栈并使用 Schema Registry 和 Connect,但有一段时间我们只需要为此部署 Connect。
是否可以以某种方式配置 Connect 接收器,以便它们使用显式 avsc 文件或架构,而不连接到架构注册表,并且不使用带有魔术字节和架构 ID 的 Confluent 格式?
【问题讨论】:
【参考方案1】:是的,可以在 Github 上使用 registryless-avro-converter。
按照那里的构建说明,在加载其他连接器时将 JAR 添加到您的 plugin.path
文件夹,然后像这样进行设置
key.converter=me.frmr.kafka.connect.RegistrylessAvroConverter
key.converter.schema.path=/path/to/schema/file.avsc
value.converter=me.frmr.kafka.connect.RegistrylessAvroConverter
value.converter.schema.path=/path/to/schema/file.avsc
请注意,这需要您在所有 Connect 工作人员上存储/维护/同步架构文件,但是
或者,您可以使用您的普通 Kafka 设置架构注册表 - 没有理由进行一些“融合迁移”,因为除了您的序列化器和反序列化器配置之外,注册表不需要任何基础架构更改。
【讨论】:
是否有可能将架构作为字符串或其他东西提供而不是使用路径从文件中提供 我从未使用过该代码。您必须在该仓库中发布问题或查看代码【参考方案2】:是的,但是您必须实现自己的Converter 来处理香草avro 记录。然后,您将指定 avsc 文件的位置,或者可以使用 [value|key].converter
命名空间在连接器配置中提供架构的服务。
例如,Confluent AvroConverter
需要一个属性来告诉它架构注册表在哪里:
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://schema-registry:8081
所以您可以复制Confluent AvroConverter,但也许可以提供 avsc 文件的路径?
【讨论】:
以上是关于在没有 Confluent Schema Registry 的情况下在 KafkaConnect 中使用 Avro的主要内容,如果未能解决你的问题,请参考以下文章
将 Spark 结构化流与 Confluent Schema Registry 集成
Kafka 与 Confluent Kubernetes Helm Charts = Schema Registry WakeupException