想象一下,与Kafka集群的连接已经关闭(例如,eth电缆被切断),缓冲队列迟早会变满。如何从缓冲区获取这些消息并让它们将其发送到本地存储?谢谢!
答案 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
对象包含重新发送它所需的所有信息(正文,密钥,分区)。