Apache kafka 如何为Confluent Schema Registry配置主题命名策略?

Apache kafka 如何为Confluent Schema Registry配置主题命名策略?,apache-kafka,avro,confluent-schema-registry,Apache Kafka,Avro,Confluent Schema Registry,我正在使用Avro的Confluent Schema Registry,我想在一个Kafka主题中使用多个模式 默认主题命名策略TopicNameStrategy不允许这样做,因为它将架构主题名称与主题名称耦合。显然可以覆盖此选项,并将主题命名策略设置为RecordNameStrategy或TopicRecordNameStrategy 不幸的是,文档中并不是很清楚主题命名策略可以被覆盖的方式或位置 这表明您可以在创建或修改主题时提供配置: 从Confluent Platform 5.5.0开始

我正在使用Avro的Confluent Schema Registry,我想在一个Kafka主题中使用多个模式

默认主题命名策略
TopicNameStrategy
不允许这样做,因为它将架构主题名称与主题名称耦合。显然可以覆盖此选项,并将主题命名策略设置为
RecordNameStrategy
TopicRecordNameStrategy

不幸的是,文档中并不是很清楚主题命名策略可以被覆盖的方式或位置

这表明您可以在创建或修改主题时提供配置:

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

在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 topics
应用程序返回以下错误:

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 console producer
通过属性
value.subject.name.strategy
将记录写入卡夫卡时配置subject name策略,正如本文所示。但是,控制台生产者会忽略此属性,并使用默认策略为主题创建一个新主题

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控制台制作人\
--经纪人列表kafka-broker-0.kafka经纪人:9092\
--属性schema.registry.url='1http://kafka-schema-registry:8081' \
--属性值。架构=“”\
--属性值.subject.name.strategy='io.confluent.kafka.serializers.subject.TopicRecordNameStrategy'\
--主题我的主题
显然,过去有一种方法可以在代理本身上配置策略,但我也找不到任何文档说明如何进行配置

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

其他背景:

  • 我正在Docker中使用图像
    confluentinc/cp kafka:6.0.0
    confluentinc/cp模式注册表:6.0.0
    ,以及
    confluentinc/cp zookeeper:6.0.0
  • kafka主题
    kafka avro控制台制作人
    版本也设置为
    6.0.0

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


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

Confluent Platform 6.1.0已经推出,kafka avro console producer现在支持命名策略。但是,我还发现您需要配置连接器以使用备用命名策略(
key.converter.key.subject.name.strategy
&
value.converter.value.subject.name.strategy
)。