2

我在笔记本电脑上旋转了 Docker 中的 Kafka(使用 docker-compose)。

之后,创建了新的 kafka 主题:

kafka-topics --zookeeper localhost:2181  --create --topic simple    --replication-factor 1 --partitions 1

(尚未在模式注册表中创建模式)。

现在尝试生成(基于此示例 - 第 3 步 - https://docs.confluent.io/4.0.0/quickstart.html):

kafka-avro-console-producer \
         --broker-list localhost:9092 --topic simple \
         --property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}'

输入值:

{"f1": "value1"}

错误:

{"f1": "value1"}
org.apache.kafka.common.errors.SerializationException: Error registering Avro schema: {"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}
Caused by: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 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:191)
    at io.confluent.kafka.schemaregistry.client.rest.RestService.httpRequest(RestService.java:218)
    at io.confluent.kafka.schemaregistry.client.rest.RestService.registerSchema(RestService.java:307)
    at io.confluent.kafka.schemaregistry.client.rest.RestService.registerSchema(RestService.java:299)
    at io.confluent.kafka.schemaregistry.client.rest.RestService.registerSchema(RestService.java:294)
    at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.registerAndGetId(CachedSchemaRegistryClient.java:61)
    at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.register(CachedSchemaRegistryClient.java:100)
    at io.confluent.kafka.serializers.AbstractKafkaAvroSerializer.serializeImpl(AbstractKafkaAvroSerializer.java:79)
    at io.confluent.kafka.formatter.AvroMessageReader.readMessage(AvroMessageReader.java:166)
    at kafka.tools.ConsoleProducer$.main(ConsoleProducer.scala:59)
    at kafka.tools.ConsoleProducer.main(ConsoleProducer.scala)

如何解决这个问题?
可能是因为 Kafka 集群使用 SSL 但错误是虚假的吗?谢谢。

4

2 回答 2

0

我有同样的错误,但在我的情况下解决方案不同。我在这里发帖以防其他人发现这很有用。

此错误与访问模式注册表和预期响应有关。因此,要么配置不正确,要么客户端无法评估模式注册表,要么无法识别响应。

  1. 因此,请检查您是否提供了正确的配置,--property schema.registry.url在这种情况下,正如Giorgos所提到的。另请参阅:https ://docs.confluent.io/5.5.1/schema-registry/serdes-develop/serdes-avro.html

  2. 您还可以curl通过模式注册表查看是否收到任何响应,例如

    curl -X GET http://localhost:8081/subjects
    

    另请参阅:https ://docs.confluent.io/5.5.1/schema-registry/develop/using.html


  1. 就我而言,问题是过滤流量的网络代理。所以检查:

    • NO_PROXY,no_proxy以及
    • HTTP_PROXY,http_proxy
    • HTTPS_PROXY,https_proxy

    以确保没有任何东西会拦截对注册表的调用。如果您正在创建 jvm 应用程序,则相应的标志是:

    • http.nonProxyHosts,
    • http.proxyHosthttp.proxyPort, 或
    • https.proxyHosthttps.proxyPort
于 2020-07-02T11:00:33.610 回答
0

kafka-avro-console-producer,默认情况下,假定 Schema Registry 正在侦听 port http://localhost:8081。但是,如果另一个进程正在侦听该端口,则可能会出现奇怪的错误。

为了克服这个问题,您可以在运行生产者时指定架构 URL,使用--property schema.registry.url=http://localhost:18081

例如,

kafka-avro-console-producer \
         --broker-list localhost:9092 --topic simple \
         --property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}' \
         --property schema.registry.url=http://localhost:18081
于 2018-04-24T06:46:08.450 回答