服务nodejs连接容器kafka laradock结果超时

问题描述 投票:0回答:1

使用 Node js 上的这段代码,我创建了简单的测试数据来生成消息:

const kafka = require('kafka-node');

// Create a Kafka client with the Kafka broker's hostname (kafka) and port (9092)
const client = new kafka.KafkaClient({ kafkaHost: '0.0.0.0:9092', connectTimeout: 5000 }); // 5000 milliseconds = 5 seconds

// Create a Kafka producer using the client
const producer = new kafka.Producer(client);

// Handle producer ready event
producer.on('ready', () => {
    console.log('Kafka producer is ready');
});

// Handle producer error event
producer.on('error', (err) => {
    console.error('Error with Kafka producer:', err);
});

// Example usage: send a message to a Kafka topic
const payload = {
    topic: 'test-topic',
    messages: 'Hello Kafka!'
};

// Send the message
producer.send([payload], (err, data) => {
    if (err) {
        console.error('Error sending message:', err);
    } else {
        console.log('Message sent:', data);
    }
});

// 当我 docker ps 时

CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS        PORTS                                                                       Names
4fabb4858464   wurstmeister/kafka     "start-kafka.sh"         2 months ago   Up 13 hours   0.0.0.0:9092->9092/tcp, :::9092->9092/tcp                                   laradock_kafka_1
a648aff4197b   laradock_zookeeper     "/docker-entrypoint.…"   2 months ago   Up 13 hours   2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp     laradock_zookeeper_1

运行代码时会返回错误和日志

Kafka producer is ready
Error sending message: TimeoutError: Request timed out after 30000ms
    at new TimeoutError (/home/rns/Documents/project-js/new-kafka-task/node_modules/kafka-node/lib/errors/TimeoutError.js:6:9)
    at Timeout._onTimeout (/home/rns/Documents/project-js/new-kafka-task/node_modules/kafka-node/lib/kafkaClient.js:1012:16)
    at listOnTimeout (internal/timers.js:554:17)
    at processTimers (internal/timers.js:497:7)

任何人都可以帮助我的问题吗?

node.js docker kafka-producer-api laradock
1个回答
0
投票

我没有用 wurstmeister/kafka 进行测试。但是您的 node.js 代码可以使用这个 docker-compose 文件。您只需将端口更改为29092

const client = new kafka.KafkaClient({ kafkaHost: '0.0.0.0:29092', connectTimeout: 5000 });

docker-compose.yml

version: "3.9"
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.3.3
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
  kafka:
    image: confluentinc/cp-kafka:7.3.3
    depends_on:
      - zookeeper
    ports:
      - "29092:29092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://127.0.0.1:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
© www.soinside.com 2019 - 2024. All rights reserved.