Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 未触发kafka节点就绪事件_Node.js_Apache Kafka - Fatal编程技术网

Node.js 未触发kafka节点就绪事件

Node.js 未触发kafka节点就绪事件,node.js,apache-kafka,Node.js,Apache Kafka,我正在使用kafka节点npm模块,0.2.27版本。我发现producer.on('ready',fn(){})从未被调用 当我检查producer对象时,观察到它如下 { ready: true, client: { connectionString: '10.196.160.100.:2181,10.196.160.150:2181,10.196.160.151:2181', clientId: 'dev', zkOptions: { sessionTime

我正在使用kafka节点npm模块,0.2.27版本。
我发现
producer.on('ready',fn(){})
从未被调用
当我检查producer对象时,观察到它如下

{ ready: true,
  client: 
   { connectionString: '10.196.160.100.:2181,10.196.160.150:2181,10.196.160.151:2181',
     clientId: 'dev',
     zkOptions: { sessionTimeOut: 10000, spinDelay: 1000, retries: 10 },
     brokers: 
      { 'custom-kafka.mine.com:9092': [Object],
        'custom-storm.mine.com:9092': [Object] },
     longpollingBrokers: {},
     topicMetadata: {},
     topicPartitions: {},
     correlationId: 0,
     cbqueue: {},
     brokerMetadata: { '0': [Object], '1': [Object] },
     ready: true,
     zk: { client: [Object], _events: [Object], inited: true },
     _events: { ready: [Object], error: [Object], close: [Object] } },
  requireAcks: 1,
  ackTimeoutMs: 100,
  _events: {} }

我没有等待“准备就绪”事件,而是检查了
if(producer.ready)
,我可以在稍微超时的情况下发布到卡夫卡上。
理想情况下,事件应被触发。
我不确定我是否采取了正确的方法。
非常感谢任何指向此方向的指针。
提前感谢。请尝试以下代码:

var kafka = require('kafka-node'),
    Producer = kafka.Producer,
    client = new kafka.Client('192.168.50.252:2181'),
    producer = new Producer(client),
    payloads = [
        { 
            topic: 'test topic', 
            messages: ['test message'] 
        }
    ];

    client.on('ready', function (){
        console.log('client ready');
    })  

    client.on('error', function (err){
        console.log('client error: ' + err);
    })  

    producer.on('ready', function () {
        producer.send(payloads, function (err, data) {
            console.log('send: ' + data);        
            process.exit();
        });
    });

    producer.on('error', function (err) {
        console.log('error: ' + err);
        process.exit();
    });

我也面临这个问题,我相信你的方法是正确的。 请参阅,当调用生产者的构造函数时,生产者的就绪事件仅触发一次。producer.ready属性设置为true之后。 因为我和我一样相信,您也在其他地方调用构造函数,然后从那里返回或导出producer,这意味着,在您实际调用producer.send()的地方不会触发ready事件

相反,使用

`if(producer.ready){
    producer.send(payloads, function(err,res){
            console.log(res)
    });
 }        
`

希望这有帮助。

嗨,Jon,我有一个类似的代码。但是,问题是未触发“就绪”事件。我发现zookeeper和kafka已启动并正在运行。您是否可以尝试添加一些额外的代码来检查客户端是否连接正常-我已在上面的示例中添加了一些-这将确认客户端是否连接到zookeeper OK就绪事件将只触发一次。有可能它正在开火,但你没有击中。