有没有办法从node-rdkafka中的生产者队列缓冲区获取消息?

时间:2018-05-13 06:50:04

标签: node.js apache-kafka

想象一下,与Kafka集群的连接已经关闭(例如,eth电缆被切断),缓冲队列迟早会变满。如何从缓冲区获取这些消息并让它们将其发送到本地存储?谢谢!

1 个答案:

答案 0 :(得分:0)

如果node-rdkafka无法发送缓冲区中的消息,则它将在message.timeout.ms之后到期,默认情况下为300000(5分钟)。当每个消息到期时,它将发出delivery-report事件并传入错误和消息。

例如,您可以在此事件上设置侦听器,并在发生故障时使用一些备份逻辑:

// Register delivery report listener
producer.on('delivery-report', function(err, report) {
    if (err) {
        console.error('Delivery report: Failed sending message ' + JSON.stringify(report));
        console.error(err);
        // We could retry sending the message or store it locally
    } else {
        console.log('Message produced, offset: ' + report.offset);
    }
});

report对象包含重新发送它所需的所有信息(正文,密钥,分区)。