我们可以将独立的 Spring Cloud Schema Registry 与 Confluent 的 KafkaAvroSerializer 一起使用吗?
Can we use standalone Spring Cloud Schema Registry with Confluent's KafkaAvroSerializer?
我有一个使用 Spring 云流和 Kafka Streams 活页夹的项目。对于流的输出,我使用的是 Avro,以及 Confluent(io.confluent.kafka.streams.serdes.avro.SpecificAvroSerde
).
提供的 Serde
我可以将它与 Confluent Schema Registry 一起使用。序列化和反序列化正确进行。
但是,我想看看我们是否可以使用 Spring Cloud Schema Registry Server 而不是 Confluent。我配置了一个独立的 Schema Registry 服务器,并将项目中的 schema registry 设置为它(更改了 schemaRegistryClient.endpoint
和 schema.registry.url
属性)。
当我尝试时,似乎 Spring Cloud 能够与独立服务器一起工作。它将资源文件夹中可用的架构注册为 .avsc 文件。但是,当我发送一条消息时,Confluent 序列化程序似乎继续将其作为 Confluent Schema Registry(它具有与 Spring Schema Registry 不同的 REST 端点)来处理它。结果,它得到一个 405 响应代码。
我们得到以下异常(部分堆栈跟踪)
org.apache.kafka.common.errors.SerializationException: Error registering Avro schema: <my-avro-schema>
Caused by: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: Unexpected character ('<' (code 60)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: (sun.net.www.protocol.http.HttpURLConnection$HttpInputStream); line: 1, column: 2]; error code: 50005
at io.confluent.kafka.schemaregistry.client.rest.RestService.sendHttpRequest(RestService.java:230)
我觉得有两种可能:
- Spring Schema Registry Server 只能使用 Spring 提供的内容类型(指定为
content-type: application/*+avro
),不能使用 Confluent 提供的本机 Serde,或者
- 项目配置有问题。
谁能帮我看看是哪一个?如果是第二个,谁能指出哪里不对?
每个模式注册表提供程序都需要一个专有的 SerDe 库。例如,如果您想要 integrate AWS Glue Schema Registry with Kafka,那么您将需要 Amazon 的 SerDe 东西。因此,Confluent 的 SerDe 库期望在 schema.registry.url
属性.
中指定的地址处使用 Confluent 的模式注册表
我有一个使用 Spring 云流和 Kafka Streams 活页夹的项目。对于流的输出,我使用的是 Avro,以及 Confluent(io.confluent.kafka.streams.serdes.avro.SpecificAvroSerde
).
我可以将它与 Confluent Schema Registry 一起使用。序列化和反序列化正确进行。
但是,我想看看我们是否可以使用 Spring Cloud Schema Registry Server 而不是 Confluent。我配置了一个独立的 Schema Registry 服务器,并将项目中的 schema registry 设置为它(更改了 schemaRegistryClient.endpoint
和 schema.registry.url
属性)。
当我尝试时,似乎 Spring Cloud 能够与独立服务器一起工作。它将资源文件夹中可用的架构注册为 .avsc 文件。但是,当我发送一条消息时,Confluent 序列化程序似乎继续将其作为 Confluent Schema Registry(它具有与 Spring Schema Registry 不同的 REST 端点)来处理它。结果,它得到一个 405 响应代码。
我们得到以下异常(部分堆栈跟踪)
org.apache.kafka.common.errors.SerializationException: Error registering Avro schema: <my-avro-schema>
Caused by: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: Unexpected character ('<' (code 60)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: (sun.net.www.protocol.http.HttpURLConnection$HttpInputStream); line: 1, column: 2]; error code: 50005
at io.confluent.kafka.schemaregistry.client.rest.RestService.sendHttpRequest(RestService.java:230)
我觉得有两种可能:
- Spring Schema Registry Server 只能使用 Spring 提供的内容类型(指定为
content-type: application/*+avro
),不能使用 Confluent 提供的本机 Serde,或者 - 项目配置有问题。
谁能帮我看看是哪一个?如果是第二个,谁能指出哪里不对?
每个模式注册表提供程序都需要一个专有的 SerDe 库。例如,如果您想要 integrate AWS Glue Schema Registry with Kafka,那么您将需要 Amazon 的 SerDe 东西。因此,Confluent 的 SerDe 库期望在 schema.registry.url
属性.