我正在运行1个Zookeeper和1个Kafka合奏。我正在使用kafka-node
npm软件包连接到Kafka代理,生成和使用消息。以下是我用于该工作的简化的相关代码段。
const kafka = require('kafka-node');
const client = new kafka.KafkaClient({kafkaHost: '0.0.0.0:9092',connectTimeout:10000});
let Producer = kafka.Producer;
let producer = new Producer(client);
setTimeout(() => {
producer.on('ready', function () {
console.log("Producer is ready");
});
producer.on('error', function (err) {
console.error("Producer is not ready");
})
}, 5000);
以上代码不输出任何值,程序停止。脚本不会终止。我将setTimeout
函数的毫秒值更改为0
,程序输出了Producer is ready
,我发现这很奇怪。因此,我多次更改了该值,其结果是,给定函数值7
会产生所需的输出,但是给定值8
会导致程序停止。我不明白为什么。
以下是我的zookeeper和Kafka docker配置:
version: '3.3'
services:
zookeeper:
image: 'confluentinc/cp-zookeeper:5.0.0'
hostname: zookeeper
ports:
- '2191:2181'
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
kafka-broker:
image: 'confluentinc/cp-kafka:5.0.0'
ports:
- '9092:9092'
- '9083:9093'
depends_on:
- 'zookeeper'
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT2://kafka-broker:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT, PLAINTEXT2:PLAINTEXT
KAFKA_TOPICS: "test_topic"
我试图在另一台机器上复制该问题。在该计算机上,12
是程序“失败”的值。生产者准备就绪后,应调用函数producer.send
,这意味着将在send
状态的回调函数中调用函数ready
。到目前为止,我了解的是ready
状态仅持续几毫秒。我确定有一些我不熟悉的信息在这种情况下很重要,但是我已经阅读了kafka-node
软件包文档,没有发现任何相关信息。