Kafka生产者就绪状态在7毫秒后未监听

时间:2019-06-14 13:04:27

标签: javascript apache-kafka

我正在运行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软件包文档,没有发现任何相关信息。

0 个答案:

没有答案