首页 > 解决方案 > kafka 生产者 docker 无法连接到代理 docker - AWS

问题描述

yml是用于在 AWS 实例中为 kafka 和 zookeeper 启动 docker 容器的文件:

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
    - "2181:2181"
  kafka:
    build: .
    ports:
    - "9092:9092"
  environment:
    KAFKA_ADVERTISED_HOSTNAME: <machines private ip>
    KAFKA_LISTENERS: PLAINTEXT://:9092
    KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://<machines private ip>:9092


    KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock

当我docker-compose使用上述文件运行命令时,它会导致创建一个kafka-docker使用 kafka 容器和 zookeeper 容器调用的 docker 网络。

现在,在默认bridge的 docker 网络中,我有另一个容器,其中包含以下 nodejs 代码:

const Producer = kafka.Producer;
const client = new kafka.Client("<machines private ip>:2181");

const producer = new Producer(client);
const kafka_topic = 'hello-topic';

event = ...
event_payload = ...
let payloads = [{topic:kafka_topic ,messages:JSON.stringify(event_payload),  partition: 0 }]
let push_status = producer.send(payloads, (err, data) => {
       if (err) {
            console.log(err);
       } else {
            console.log('[kafka-producer -> '+kafka_topic+']: broker update success');
            }
        });

console.log(err)给了我错误“经纪人不可用”。有人可以告诉我我的设置有什么问题吗?

标签: dockerapache-kafka

解决方案


注意这一行:

const client = new kafka.Client("<machines private ip>:2181");

这不是 Kafka 正在侦听的端口。Kafka 正在侦听端口 9092 上的连接:

const client = new kafka.Client("<machines private ip>:9092");

它应该在此更改后工作。


推荐阅读