【问题标题】:Not able to connect to wurstmeister/kafka无法连接到 wurstmeister/kafka
【发布时间】:2017-03-12 20:30:26
【问题描述】:

我在 ubuntu 14.04 LTS 机器上运行 wurstmeister/kafka。 Kafka 容器运行良好。但是我无法将我的微服务连接到这个容器。

Kafka docker-compose.yml:

version: '2'
services:
  zookeeper:
    image: user1/zookeeper:3.4.9
    ports:
      - "2181:2181"
  kafka:
    image: my-kafka
    ports:
      - "9092:9092"
    hostname: kafka-01
    environment:
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ADVERTISED_HOST_NAME: "kafka-01"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_CREATE_TOPICS: "topic1:1:1,topic2:1:1"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

docker-compose 用于微服务(myapp):

version: '2'

services:
  myapp:
    network_mode: 'bridge'
    extends:
      file: myapp.base.yml
      service: myapp
    links:
      - kafka

  zookeeper:
    network_mode: 'bridge'
    extends:
      file: zookeeper.yml
      service: zookeeper

  kafka:
    network_mode: 'bridge'
    extends:
      file: kafka.yml
      service: kafka
    links:
      - zookeeper

我已经在一个环境中链接了 kafka:

kafkaHost=kafka-01:9092

如果需要更多信息,请告诉我我做错了什么。提前致谢。

【问题讨论】:

    标签: docker apache-kafka docker-compose


    【解决方案1】:

    hostname 字段不设置公共主机名,它设置内部容器主机名。它通常没那么有用。

    主机名由docker网络自动提供,使用kafka作为主机名。

    【讨论】:

    • 两种方式都试过了。从中删除主机名,然后将其设置为kafka。我得到:oakafka.common.network.Selector Selector.java:276 - 使用 kafka/172.17.42.10 java.net.ConnectException 的 I/O 出错:在 sun.nio.ch.SocketChannelImpl.checkConnect 处连接被拒绝(本机方法) 在 sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) 在 org.apache.kafka.common.network.Selector.poll(Selector.java:238) 在 org.apache.kafka.clients.NetworkClient。 poll(NetworkClient.java:192) 在 org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:191)
    • 您可能还必须重试连接,因为它不一定立即可用。 docs.docker.com/compose/startup-order
    【解决方案2】:

    主机名应该是您在“链接”中指定的,即。 “卡夫卡”。正如@dnephin 所说,不需要主机名。我认为您想要的实际上是 KAFKA_ADVERTISED_HOST_NAME 环境变量。

    你有什么版本的 docker?我在 Mac OS 上使用 docker 1.12.3 没有问题。

    您可能还想尝试 Confluent docker 映像:

    这是我的示例 docker compose 文件:

    version: "2"
    services:
      web:
        image: nginx:latest
        links: 
          - kafka
      zookeeper:
        extends:
          file: kafka-services.yml
          service: zookeeper
      kafka:
        extends:
          file: kafka-services.yml
          service: kafka
        depends_on:
          - zookeeper
    

    我的基础 kafka 服务编写文件 (kafka-services.yml):

    version: '2'
    services:
      zookeeper:
        image: confluentinc/cp-zookeeper:latest
        ports:
          - "32181:32181"
        environment:
          ZOOKEEPER_CLIENT_PORT: 32181
          ZOOKEEPER_TICK_TIME: 2000
    
      kafka:
        image: confluentinc/cp-kafka:latest
        ports:
         - "29092:29092"
        environment:
          KAFKA_BROKER_ID: 1
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:32181
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092
    

    【讨论】:

    • 我使用了 confluentinc kafka 和 zk 图像,并根据您的建议更新了我的撰写文件。现在,得到这个异常:[2016-11-02 06:54:58,267] WARN [Controller-1-to-broker-1-send-thread],控制器 1 与代理 kafka:29092 的连接(id:1 rack:null ) 不成功 (kafka.controller.RequestSendThread) kafka_1 | java.io.IOException: 连接到 kafka:29092 (id: 1 rack: null) 失败
    • @falcon01:你的 docker 版本是多少?
    • I $ docker-compose 版本 docker-compose 版本 1.9.0-rc3,构建 fcd38d3 docker-py 版本:1.10.6 CPython 版本:2.7.9 OpenSSL 版本:OpenSSL 1.0.1t 2016 年 5 月 3 日
    • 这是我的版本
    • $ docker-compose 版本 docker-compose 版本 1.9.0-rc3,构建 fcd38d3 docker-py 版本:1.10.6 CPython 版本:2.7.9 OpenSSL 版本:OpenSSL 1.0.1t 2016 年 5 月 3 日
    猜你喜欢
    • 1970-01-01
    • 2018-09-21
    • 2015-04-24
    • 2015-09-03
    • 2019-12-20
    • 2018-04-28
    • 2018-11-04
    • 2021-03-10
    • 1970-01-01
    相关资源
    最近更新 更多