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

融合kafka生产者avro架构错误ClientError:架构解析失败:未知命名架构

包德业
2023-03-14

我在Kafka的制作人那个里工作,推动主题中的信息。我用的是融合的Kafka。

github上的喜欢问题

下面是我的模式。avsc文件。

Keys.avsc

{
    "namespace": "io.codebrews.schema.test",
    "type": "record",
    "name": "Keys",
    "fields": [
        {
            "name": "name",
            "type": "string"
        },
        {
            "name": "email",
            "type": "string"
        }
    ]
}

测试.avsc

{
    "namespace": "io.codebrews.schema.test",
    "type": "record",
    "name": "Subscription",
    "fields": [
        {
            "name": "test",
            "type": "string"
        },
        {
            "name": "keys",
            "type": "io.codebrews.schema.test.Keys"
        }
    ]
}

生产者.py

key_schema, value_schema = load_avro_schema_from_file('Subscription.avsc')

try:
    producer = avro.AvroProducer(producer_config, default_key_schema=key_schema, default_value_schema=value_schema)
except Exception as e:
    raise e

def load_avro_schema_from_file(schema_file):
    key_schema_string = """
    {"type": "string"}
    """

    key_schema = avro.loads(key_schema_string)
    value_schema = avro.load("./avro/" + schema_file)

    return key_schema, value_schema

当我尝试注册Keys.avsc时,它工作正常,没有错误。但是当我尝试注册Test.avsc之后注册Keys.avsc。我得到以下错误。

confluent_kafka.avro.error。ClientError:架构分析失败:未知的命名架构“io.codebrews.Schema.test”。键,已知名称:[“io.codebrews.schema.test.Subscription”]。

手动注册架构后。

{
    "namespace": "io.codebrews.schema.test",
    "type": "record",
    "name": "Subscription",
    "fields": [
        {
            "name": "test",
            "type": "string"
        },
        {
            "name": "keys",
            "type": "Keys"
        }
    ]
}

当在我的主题推送消息时,我得到以下错误。

ClientError:不兼容的Avro架构:409消息:{error\u code:409,'消息':'正在注册的架构与主题“测试值”的早期架构不兼容。

我做错什么了吗?

还有谁能帮我停止python中的自动模式注册吗?

共有1个答案

夏建弼
2023-03-14

错误与解析器有关,而与注册表注册无关。。。

您的AVSC文件需要完全包含所有记录类型。当解析器读取一个文件时,它无法了解其他文件

如果您从一个AVDL文件开始,然后将其转换为AVSC,那么这些记录会正确地嵌入到外部记录中。

具体来说,

"fields" :[{
  "name": "keys",
  "type": {
       "type": "record", 
       "namespace": "io.codebrews.schema.test.Keys", 
       ... 
  } 
}
 类似资料:
  • 嘿,我想将ConFluent模式注册表与Avro Serializers一起使用:留档现在基本上是说:不要为多个不同的主题使用相同的模式 谁能解释一下原因吗?我重新搜索了源代码,它基本上将模式存储在Kafka主题中,如下所示(topicname,magicbytes,version- 因此,除了冗余之外,我看不到多次使用模式的问题?

  • 我有以下对象: Bu 有时我只是我正在尝试为此提出一个架构。但它似乎:(不起作用。 我尝试了以下两种: 但它失败了,线程“main”org.apache.avro中出现<code>异常。SchemaParseException:无类型: 我也尝试了同样的错误: 我真的不明白问题出在哪里,两者有什么区别。

  • 我正在尝试使用kafka-avro-convore-生产者发布一条具有键(带有模式)和值(带有模式)的消息。kafka环境(kafka的conFluent 6.2.0版本、连接、zoomaster、模式注册表)都正确启动,我可以确认我的连接器已安装。问题是当我发送消息时,我的Sink连接器失败并出现我无法诊断的错误。 感谢您的帮助: 我生成一条AVRO消息,如下所示: 并在连接日志中接收以下错误:

  • 我有一个docker容器运行AWS弹性容器服务(Fargate)中的confluentinc/cp模式注册表:5.5.0。只有一个容器正在运行。通过该模式注册表获取当前注册模式的API调用正在工作(例如,

  • 我有Kafka的以下配置 我试图通过版本得到主题,我得到如下 我使用插件<;代码>;avro-maven插件>;生成>;CreateBankAccount>;代码< 然后,我用一个字符串键和一个avro序列化的有效负载向主题推送一条消息,但是我有一个错误 轨道: ProducerConfig值: KafkaAvroSerializerConfig值:

  • 我有openapi合同: 在此结构中: 在主s.json我有一些参考另一个json这样: 当我尝试使用openapi-Generer-maven-plugin打包它时: 我得到一个警告和构建错误: openapi可以像我一样使用ref生成代码吗?或者我需要重构json模式并删除这个ref?也许将其连接在一个文件中或类似的东西中