【问题标题】:Problem producing Avro serialized object through kafka-avro-console-producer通过 kafka-avro-console-producer 生成 Avro 序列化对象的问题
【发布时间】:2020-02-25 17:10:04
【问题描述】:

我通过 使用 kafka-avro-console-producer 二进制文件生成消息:

kafka-avro-console-producer --broker-list broker:9092 --topic example-topic --property schema.registry.url='http://schema-registry:8081 --property value.schema='{"type": "record","name": "test","fields": [{"name": "before", "type": ["null", {"type": "record", "name": "columns", "fields":[{"name": "name", "type": "string"}]}],"default": "null"},{"name": "after", "type": ["null", "columns"],"default": "null"}]}'
{"before": null,"after": {"name": "John"}}'

发送以下消息

{"before": null,"after": {"name": "John"}}

并通过应用以下 Avro 架构

{
    "type": "record",
    "name": "test",
    "fields": [{
        "name": "before",
        "type": ["null", {
            "type": "record",
            "name": "columns",
            "fields": [{
                "name": "name",
                "type": "string"
            }]
        }],
        "default": "null"
    }, {
        "name": "after",
        "type": ["null", "columns"],
        "default": "null"
    }]
}

错误我得到的回报如下:

Caused by: org.apache.avro.AvroTypeException: Unknown union branch name
    at org.apache.avro.io.JsonDecoder.readIndex(JsonDecoder.java:445)
    at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
    at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
    at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
    at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:178)
    at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:152)
    at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:240)
    at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:230)
    at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:174)
    at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:152)
    at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:144)
    at io.confluent.kafka.formatter.AvroMessageReader.jsonToAvro(AvroMessageReader.java:213)
    at io.confluent.kafka.formatter.AvroMessageReader.readMessage(AvroMessageReader.java:180)
    at kafka.tools.ConsoleProducer$.main(ConsoleProducer.scala:55)
    at kafka.tools.ConsoleProducer.main(ConsoleProducer.scala)

对于那些愿意深入兔子洞的人,我正在使用 Oracle Golden Gate 大数据连接器在 Oracle Golden Gate 和 Apache Kafka 之间进行集成。我目前在使用此处描述的等效模型时遇到问题:

https://www.ateam-oracle.com/oracle-goldengate-big-data-adapter-apache-kafka-producer

当尝试将上述网页中描述的模式应用于其相应的模型(并在完成 JSON 模型之后)时,我遇到了与我得到了问题中的模型和架​​构。


非常感谢大家。

【问题讨论】:

    标签: apache-kafka avro oracle-golden-gate


    【解决方案1】:

    这就是问题

    "type": ["null", "columns"]
    

    您不能引用其他记录类型。您需要像在其他字段中那样扩展它

    【讨论】:

    • 非常感谢您的回答@cricket_007。我将测试复制模型的架构,而不是引用“列”类型。
    • 再次感谢您,我已经测试了您的解决方案并且成功了!
    猜你喜欢
    • 2021-11-25
    • 2018-03-23
    • 2020-10-15
    • 2021-12-18
    • 2018-08-11
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2020-09-15
    相关资源
    最近更新 更多