【问题标题】:Zookeeper connection failing cp-rest-proxy with spotify kafka imageZookeeper 连接失败 cp-rest-proxy 与 spotify kafka 图像
【发布时间】:2018-12-28 04:33:02
【问题描述】:

我一直在使用spotify提供的kafka镜像在本地运行kafka。我目前正在尝试将它与cp-kafka-restschema-registry 图像一起使用。

我需要帮助解决这个问题:

错误(日志组:kafka_rest_1_609fd108dcf4

[main-SendThread(zookeeper:2181)] WARN org.apache.zookeeper.ClientCnxn - 服务器 zookeeper:2181 的会话 0x0,意外错误,关闭套接字连接并尝试重新连接

java.nio.channels.UnresolvedAddressException 
  at sun.nio.ch.Net.checkAddress(Net.java:101)
  at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622)
  at org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java:277)
  at org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:287)
  at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021)
  at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1064)

Docker 编写

version: '3.5'
services:
  kafka:
    image: 'spotify/kafka'
    hostname: kafka
    environment:
      - ADVERTISED_HOST=kafka
      - ADVERTISED_PORT=9092
    ports:
      - "9092:9092"
      - "2181:2181"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - one
  kafka_rest:
    image: 'confluentinc/cp-kafka-rest:5.1.0'
    hostname: kafka_rest
    environment:
      - KAFKA_REST_ZOOKEEPER_CONNECT=zookeeper:2181
      - KAFKA_REST_LISTENERS=http://0.0.0.0:8082
      - KAFKA_REST_SCHEMA_REGISTRY_URL=http:schema-registry:8081
      - KAFKA_REST_HOST_NAME=kafka-rest
    networks:
      - one
  schema_registry:
    hostname: schema-registry
    image: 'confluentinc/cp-schema-registry:5.1.0'
    environment:
      - SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL=zookeeper:2181
      - SCHEMA_REGISTRY_HOST_NAME=schema-registry
      - SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8081
    networks:
      - one
networks:
  one:
    name: rest_network

【问题讨论】:

    标签: java docker apache-kafka docker-compose kafka-rest


    【解决方案1】:

    您没有 zookepeer 容器 - 它实际上是您的“kafka”服务映像,包括 Zookeeper 和 Kafka 服务器,因此 zookeeper:2181 应该是 kafka:2181


    但是,我建议不要使用 Spotify 图片,因为它们已经过时了

    您可以找到一个功能齐全的 Docker Compose 示例 entire Confluent 5.1.0 Platform on Github

    这是您正在寻找的相关配置

    ---
    version: '2'
    services:
      zookeeper:
        image: confluentinc/cp-zookeeper:5.1.0
        hostname: zookeeper
        container_name: zookeeper
        ports:
          - "2181:2181"
        environment:
          ZOOKEEPER_CLIENT_PORT: 2181
          ZOOKEEPER_TICK_TIME: 2000
    
      broker:
        image: confluentinc/cp-enterprise-kafka:5.1.0
        hostname: broker
        container_name: broker
        depends_on:
          - zookeeper
        ports:
          - "9092:9092"
          - "29092:29092"
        environment:
          KAFKA_BROKER_ID: 1
          KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092,PLAINTEXT_HOST://localhost:29092
          KAFKA_METRIC_REPORTERS: io.confluent.metrics.reporter.ConfluentMetricsReporter
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
          KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
          CONFLUENT_METRICS_REPORTER_BOOTSTRAP_SERVERS: broker:9092
          CONFLUENT_METRICS_REPORTER_ZOOKEEPER_CONNECT: zookeeper:2181
          CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1
          CONFLUENT_METRICS_ENABLE: 'true'
          CONFLUENT_SUPPORT_CUSTOMER_ID: 'anonymous'
    
      schema-registry:
        image: confluentinc/cp-schema-registry:5.1.0
        hostname: schema-registry
        container_name: schema-registry
        depends_on:
          - zookeeper
          - broker
        ports:
          - "8081:8081"
        environment:
          SCHEMA_REGISTRY_HOST_NAME: schema-registry
          SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181'
    
      rest-proxy:
        image: confluentinc/cp-kafka-rest:5.1.0
        depends_on:
          - zookeeper
          - broker
          - schema-registry
        ports:
          - 8082:8082
        hostname: rest-proxy
        container_name: rest-proxy
        environment:
          KAFKA_REST_HOST_NAME: rest-proxy
          KAFKA_REST_BOOTSTRAP_SERVERS: 'broker:9092'
          KAFKA_REST_LISTENERS: "http://0.0.0.0:8082"
          KAFKA_REST_SCHEMA_REGISTRY_URL: 'http://schema-registry:8081'
    

    【讨论】:

    • 我在创建控制台生产者时收到一条错误消息 Error connecting to node broker:9092 (id: 1 rack: null) (org.apache.kafka.clients.NetworkClient) java.io.IOException: Can't resolve address: broker:9092。在我将broker 添加到/etc/hostslocalhost 后,它起作用了
    • 其余代理不应该给出那个错误...请不要编辑您的主机文件!这只是一个黑客。在 Docker 网络之外,您需要使用localhost:29092。阅读rmoff.net/2018/08/02/kafka-listeners-explained
    【解决方案2】:

    您需要将 zookeeper 服务添加到您的 docker compose 文件中

    zookeeper:
    image: confluent/zookeeper
    ports:
      - "2181:2181"
    environment:
      zk_id: "1"
    network_mode: "host"
    

    【讨论】:

    • spotify/kafka 容器包括 Zookeeper
    猜你喜欢
    • 1970-01-01
    • 2020-09-29
    • 2018-12-23
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2016-06-07
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多