当前位置: 首页 > 知识库问答 >
问题:

向架构注册表发送HTTP请求失败

朱修德
2023-03-14

我正在尝试使用docker compose设置本地kafka connect堆栈,但我的scala producer出现问题,它应该使用schema registry向kafka主题发送avro消息。

在我的生产者(scala)代码中,我执行以下操作:

  val kafkaBootstrapServer = "kafka:9092"
  val schemaRegistryUrl = "http://schema-registry:8081"
  val topicName = "test"

  val props = new Properties()
  props.put("bootstrap.servers", kafkaBootstrapServer)
  props.put("schema.registry.url", schemaRegistryUrl)
  props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
  props.put("value.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer")
  props.put("acks", "1")

我的docker-comment脚本写着:

---
version: '2'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:5.5.0
    hostname: zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: confluentinc/cp-kafka:5.5.0
    hostname: kafka
    container_name: kafka
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka:9092"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_CREATE_TOPICS: "test:1:1"

  schema-registry:
    image: confluentinc/cp-schema-registry:5.5.0
    hostname: schema-registry
    container_name: schema-registry
    depends_on:
      - zookeeper
      - kafka
    ports:
      - "8081:8081"
    environment:
      SCHEMA_REGISTRY_HOST_NAME: schema-registry
      SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: zookeeper:2181

  producer:
   image: producer-app:1.0
   depends_on:
     - schema-registry
     - kafka

编辑:现在架构注册表似乎已启动:

schema-registry    | [2021-01-17 22:27:27,704] INFO HV000001: Hibernate Validator 6.0.17.Final (org.hibernate.validator.internal.util.Version)
kafka              | [2021-01-17 22:27:27,918] INFO [Controller id=1001] Processing automatic preferred replica leader election (kafka.controller.KafkaController)
kafka              | [2021-01-17 22:27:27,919] TRACE [Controller id=1001] Checking need to trigger auto leader balancing (kafka.controller.KafkaController)
kafka              | [2021-01-17 22:27:27,923] DEBUG [Controller id=1001] Topics not in preferred replica for broker 1001 Map() (kafka.controller.KafkaController)
kafka              | [2021-01-17 22:27:27,924] TRACE [Controller id=1001] Leader imbalance ratio for broker 1001 is 0.0 (kafka.controller.KafkaController)
schema-registry    | [2021-01-17 22:27:28,010] INFO JVM Runtime does not support Modules (org.eclipse.jetty.util.TypeUtil)
schema-registry    | [2021-01-17 22:27:28,011] INFO Started o.e.j.s.ServletContextHandler@22d6f11{/,null,AVAILABLE} (org.eclipse.jetty.server.handler.ContextHandler)
schema-registry    | [2021-01-17 22:27:28,035] INFO Started o.e.j.s.ServletContextHandler@15eebbff{/ws,null,AVAILABLE} (org.eclipse.jetty.server.handler.ContextHandler)
schema-registry    | [2021-01-17 22:27:28,058] INFO Started NetworkTrafficServerConnector@2698dc7{HTTP/1.1,[http/1.1]}{0.0.0.0:8081} (org.eclipse.jetty.server.AbstractConnector)
schema-registry    | [2021-01-17 22:27:28,059] INFO Started @4137ms (org.eclipse.jetty.server.Server)
schema-registry    | [2021-01-17 22:27:28,059] INFO Server started, listening for requests... (io.confluent.kafka.schemaregistry.rest.SchemaRegistryMain)

但在此之前,在脚本的执行过程中,我得到:

schema-registry    | ===> Launching ...
schema-registry    | ===> Launching schema-registry ...
producer_1         | [main] ERROR io.confluent.kafka.schemaregistry.client.rest.RestService - Failed to send HTTP request to endpoint: http://schema-registry:8081/subjects/test-value/versions
producer_1         | java.net.ConnectException: Connection refused (Connection refused)

这可能是因为依赖性问题吗?它就像是在完全启动模式注册表之前运行producer!我确实为生产者放置了依赖于-schema注册表。。。


共有1个答案

邵胜涝
2023-03-14

看起来这里的原因是您的应用程序在完成启动之前试图调用架构注册表。也许你的应用程序应该包括一些错误处理这种情况,也许在退避期后重试第一个x故障?

 类似资料:
  • 我有一个docker容器运行AWS弹性容器服务(Fargate)中的confluentinc/cp模式注册表:5.5.0。只有一个容器正在运行。通过该模式注册表获取当前注册模式的API调用正在工作(例如,

  • 很多时候我们需要在页面打开的时候,读取远程的内容,然后在当前页面显示. 这就需要用到 http请求了. vue页面调用http请求 vuejs 内置了对发送http请求的支持. 只需要在对应页面的script 标签内加上对应的代码就好. 例如: 我们新增一个页面,叫 "博客列表页" : src/components/BlogList.vue, 内容如下: <template> <div >

  • 我的本地dev-Kafka模式注册表正在运行,我能够从我的生产者发布模式并获得一个ID。我使用自动注册=false,与我的生产服务器相同。但我对模式进行了更新,添加了一个字符串。 POST以404失败 org.apache.kafka.common.errors。SerializationException:检索Avro架构时出错:由io.confluent.kafka.schemaregistr

  • 嘿,我想将ConFluent模式注册表与Avro Serializers一起使用:留档现在基本上是说:不要为多个不同的主题使用相同的模式 谁能解释一下原因吗?我重新搜索了源代码,它基本上将模式存储在Kafka主题中,如下所示(topicname,magicbytes,version- 因此,除了冗余之外,我看不到多次使用模式的问题?

  • 我正在尝试从模式注册表中检索给定kafka主题的模式主题版本。我可以使用成功发布新版本,但我不确定如何检索版本。我在下面尝试使用curl请求,但结果立即命中-1(空)。 我如何修复这个GET请求,或者更好的是,我应该如何使用模式注册中心来检索一个模式?

  • 我想将带有JSON对象的POST请求发送到指定的URL,但总是失败。 我已经检查了每个数据,以确保它们是正确的,但当我发送它们时,它们似乎被更改了,因此目标服务器无法正确处理我的请求。 我想这可能是appid中的错误。回复总是告诉我appid不正确,即使我百分之百确定它是正确的。下面是appid参数的格式:name:appid type:INT,但17位数字的INT完全超出范围。 响应:{“err