簡體   English   中英

MongoSinkConnector 期望找到一個不存在的模式主題

[英]MongoSinkConnector expect to find a schema subject that doesn't exist

我正在嘗試使用連接 MongoDB kafka 連接器接收器 (mongodb-kafka-connect-mongodb-1.7.0) 將 avro 事件從 kafka 寫入 MongoDB。

我設置了一個與 kafka 消費者示例或我的自定義示例一起使用的模式注冊表,它們都能夠反序列化事件並打印它們。

另一方面,當我運行連接器時,出現以下異常:

Subject '<my-avro-schema-name>-value' not found.; error code: 40401

更高級別的堆棧跟蹤消息是:

  • 由以下原因引起:org.apache.kafka.common.errors.SerializationException:檢索 id 11 的 Avro 值模式版本時出錯

  • 由以下原因引起:org.apache.kafka.connect.errors.DataException:無法將主題客戶端訂單請求的數據反序列化到 Avro:

事實上,這個主題或這個 id 不存在於架構注冊表中,實際上我擁有的最高 id 是 10,我確實有一個名為<my-avro-schema-name>-key的主題。

為什么 MongoSinkConnector 試圖找到一個不存在的主題?

連接屬性:

bootstrap.servers=<value>
offset.storage.file.filename=/tmp/connect.offsets
offset.flush.interval.ms=10000
plugin.path=/git/1.libraries/kafka_2.12-2.2.0/plugins

MongoSink 屬性:

name=<my-avro-schema-name>-sink
connector.class=com.mongodb.kafka.connect.MongoSinkConnector
connection.uri=mongodb://<value>
database=Test
collection=test
topics=test
key.converter=org.apache.kafka.connect.storage.StringConverter

value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://<address>

模式-registry.properties:

listeners=http://0.0.0.0:8081
kafkastore.bootstrap.servers=<address>
kafkastore.topic=_schemas
debug=false
auto.register.schemas=false
use.latest.version=true

Kafka生產者配置:

Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "<broker-address>");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class);
props.put(ProducerConfig.CLIENT_ID_CONFIG, "Kafka Avro  Producer");
props.put("schema.registry.url", "<schema-registry>");

KafkaProducer<String, AllEventsUnion> producerRequest = new KafkaProducer<>(props);

AllEventsUnion clientOrderRequest = createClientOrderRequest();
            
final ProducerRecord<String, AllEventsUnion> producerOrderRequest = new ProducerRecord<>("all-events-union",
                    "ClientOrderRequest-" + calendar.getTimeInMillis(), clientOrderRequest);

AllEventsUnion 是多種類型的聯合 avro 模式。 我正在使用它向同一個 kafka 主題發送不同的事件類型,這就是為什么我認為我需要事先注冊它。 但顯然您不需要在模式注冊表中使用它們之前注冊模式?

我有一個名為<my-avro-schema-name>-key的主題

這表明您擁有 Avro 密鑰。

那為什么要用key.converter=org.apache.kafka.connect.storage.StringConverter而不是 AvroConverter?

實際上這個主題或這個 id 在模式注冊表中不存在

然后,連接器上游的 Avro 生產者(如果存在)出現問題,並且沒有使用模式注冊表注冊模式/主題或實際寫入 Avro 數據。

為什么 MongoSinkConnector 試圖找到一個不存在的主題?

因為您已經設置了它,並且主題中的數據包含一些不存在的主題的 ID。

value.converter=io.confluent.connect.avro.AvroConverter

在生成數據后注冊模式不會修改您正在與其他 Avro 信息一起使用的主題中已有的數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM