[英]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.