現在、スキーマ レジストリ 1.0.1 から 2.0.1 へのアップグレードを試みています。これは、次のバージョンでアップグレードする前に機能していることがわかります: kafka_2.10 バージョン 0.9.0.2.4.0.0、kafka-avro-serializer バージョン 2.0.1、avro バージョン 1.7.7
アップグレード後、以前に成功した同じリクエストが HTTP 404 エラーで失敗するようになりました。
[2016-07-26 10:11:05,748] INFO - - [26/Jul/2016:10:11:05 +0000] "POST //subjects/thing-avro-key/versions HTTP/1.1" 404 49 4 (io.confluent.rest-utils.requests:77)
2016-07-26 11:23:00.908 b.s.d.executor [ERROR]
org.apache.kafka.common.errors.SerializationException: Error registering Avro schema: "string"
Caused by: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: HTTP 404 Not Found; error code: 404
at io.confluent.kafka.schemaregistry.client.rest.RestService.sendHttpRequest(RestService.java:157) ~[stormjar.jar:?]
CURL で確認したところ、例を使用してスキーマを投稿できました。
curl -X POST -i -H "Content-Type: application/vnd.schemaregistry.v1+json" --data '{"schema": "{\"type\": \"string\"}"}' http://localhost:8081/subjects/Kafka-value/versions
次に、Avro schema: "string" が問題である可能性があると考えたため、ThingKey スキーマを作成しましたが、同様のエラーが引き続き発生します。
2016-07-26 11:47:31.347 b.s.d.executor [ERROR]
org.apache.kafka.common.errors.SerializationException: Error registering Avro schema: {"type":"record","name":"ThingKey","namespace":"com.x.platform.messages","doc":"A thing identifier for partitioning","fields":[{"name":"thing_id","type":{"type":"string","avro.java.string":"String"},"doc":"Thing identifier"}]}
Caused by: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: HTTP 404 Not Found; error code: 404
次のコードを使用してメッセージを公開しています。
ProducerRecord<String, SpecificRecordBase> producerRecord = new ProducerRecord<>(topic, getMessageKey(msg), extractAvroMessage(msg));
producer.send(producerRecord);
public SpecificRecordBase extractAvroMessage(KafkaMessage msg)
public String getMessageKey(KafkaMessage msg)
アイデアや提案は大歓迎です。
ありがとう、ロス
更新: 修正済み - この問題は、バージョン 2.0.1 でのより厳密な検証のために失敗を引き起こしているリクエスト パスの追加のスラッシュが原因でした。完全な詳細: https://github.com/confluentinc/schema-registry/issues/388