当前位置: 首页 > 知识库问答 >
问题:

如何为融合模式注册表配置主题命名策略?

廖绍辉
2023-03-14

我正在使用融合模式注册表和Avro,我想在一个Kafka主题中使用多个模式。

默认主题命名策略TopicNameStrategy不允许这样做,因为它将模式主题名称与主题名称耦合。显然可以覆盖它并将主题命名策略设置为RecordNameStrategyTopicRecordNameStrategy

不幸的是,留档不太清楚如何或在哪里可以覆盖主题命名策略。

本文档建议您在创建或修改主题时提供配置:

从Confluent Platform 5.5.0开始,命名策略与主题相关联。因此,您现在可以选择在每个主题的基础上为模式主题键和带有confluent.key.subject.name的值配置命名策略,而不是默认的命名策略。策略和合流。值。主题。名称。策略。

在ConFluent CLI中,使用--config选项创建或修改具有指定命名策略的主题。例如:

要创建使用RecordNameStrategy作为值的主题:

./bin/kafka-topics --create --bootstrap-server localhost:9092 \
--replication-factor 1 --partitions 1 --topic my-other-cool-topic \
--config confluent.value.schema.validation=true --config confluent.value.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy

当我尝试此操作时,Kafka主题应用程序返回以下错误:

Error while executing topic command : Unknown topic config name: confluent.value.subject.name.strategy
[2020-10-31 10:17:00,947] ERROR org.apache.kafka.common.errors.InvalidConfigurationException: Unknown topic config name: confluent.value.subject.name.strategy
 (kafka.admin.TopicCommand$)

正如本文档所建议的,我还尝试在使用kafka-avro-concore-生产者通过属性value.subject.name.strategy向Kafka写入记录时配置主题名称策略。但是,控制台生产者忽略此属性并使用默认策略为主题创建一个新主题。

kafka-avro-console-producer \
    --broker-list kafka-broker-0.kafka-broker:9092 \
    --property schema.registry.url='http://kafka-schema-registry:8081' \
    --property value.schema='<MYSCHEMA>' \
    --property value.subject.name.strategy='io.confluent.kafka.serializers.subject.TopicRecordNameStrategy' \
    --topic mytopic

显然,过去有一种方法可以在代理本身上配置策略,但我也找不到任何文档说明如何做到这一点。

配置命名策略的正确方法是什么?它应该在哪里配置?在主题上,在主题生成器上(在本例中是kafka avro控制台生成器),还是在其他地方?

其他上下文:

  • 我正在Docker中运行一切,使用图像confluentinc/cp kafka:6.0.0、confluentinc/cp模式注册表:6.0.0和confluentinc/cp zookeeper:6.0.0

共有1个答案

胡天佑
2023-03-14

kafka avro console producer尚不支持指定命名策略。您可以使用其他工具,如zoe:https://adevinta.github.io/zoe/advanced/avro/

它可以在生产者中定义为属性(key.subject.name.strategy和value.subject.name.strategy)。你可以从现有的策略中选择一种,也可以制定自己的策略。

 类似资料:
  • 我现在一直在查看Spring Cloud模式注册表和汇合模式注册表。我可以看到一些区别,例如Spring Cloud模式注册表将模式保存在普通数据库中,默认情况下保存在h2中,而汇合模式注册表保存在kafka主题中。 spring云模式注册表的这种方法是否会对性能产生任何影响。据我所知,即使数据保留在主题上,以防汇合,查询它时仍然会有延迟。但会有重大影响吗? 我还可以看到,spring云模式注册表

  • 我使用来自Confluent的Kafka Connect来使用Kafka流并以拼花格式写入HDFS。我正在1个节点中使用架构注册表服务,它运行良好。现在我想将模式注册表分发到集群模式以处理故障转移。关于如何实现这一点的任何链接或片段都将非常有用。

  • 我正在与Avro/Kafka和Confluent的Avro模式注册中心合作。 我使用avsc文件和avdl制作了一些基本模式和具有基本类型的主题。 我正在查看Confluent制作的API文档,以尝试将模式发展到版本2。特别是本部分: https://docs.confluent.io/current/schema-registry/using.html#register-a-new-versio

  • 融合模式注册表底层存储在Kafka中_schema主题下的所有模式。是否可以将此后端存储主题拆分为_schema1和_schema2等倍数? 为什么因为在我的生产用例中我想存储1000多个模式,所以分离后端存储会使主题的负载更少。 此外,融合模式注册表是否支持Kafka主题以外的后端存储?

  • 我们正在开发并尝试删除主题的模式,因为更改与旧模式不兼容。 我们删除了模式/主题,并尝试使用相同的主题名称创建新模式,成功创建了模式。 然而,当我们运行应用程序时,它仍然指向相同的模式ID。 旧模式ID(主题“topic1”):51 新架构ID(主题“topic1”):52 应用程序在反序列化消息时出错 <代码>root@bas:/#curl-khttps://schemaregistry:443

  • Kafka流之外的应用程序可以使用融合模式注册表吗?我特别感兴趣的是将此组件用于Apache Kafka以外的消息队列,例如云发布/订阅。根据调查,该组件似乎与使用融合平台的应用程序紧密耦合。