显式减少Kafka中的偏移量(用于重试/重新处理Kafka消息)

时间:2016-07-20 08:41:16

标签: node.js apache-kafka kafka-consumer-api kafka-producer-api

我有一个Kafka队列,Auto commit设置为true。我正在寻找一个选项,以便在处理当前消息时发生错误时将偏移设置为先前的位置。类似的东西:

var consumer = new HighLevelConsumer(client, topics, options);


consumer.on('message', function (message) {
        console.log('Got msg', message);
        var currentOffset = message.offset;

 /* 
//program logic which caused exception and we want to decrement the offset, so that the same message is picked again

*/
    if(errorOccured){
        handleErrorCondition(currentOffset);
    }


});

//this function sets the offset the current-1 position
function handleErrorCondition(currentOffset){

    offset.commit(groupId, [
        { topic: 'test-kafka', partition: 0, offset: (currentOffset-1) }
    ], function (err, data) {
        console.log('Attempted to commit the offset @ '+(currentOffset-1));
        var jsnData = JSON.stringify(data);
        console.log(err+' - '+jsnData);
    });
//consumer.setOffset('test-kafka', 0, (currentOffset -1));//this didnt work either
}

但是这段代码没有将偏移量设置为“currentOffset -1”,它只是继续读取新消息。基本意图是通过递减偏移来重新处理失败的消息。我也尝试将“autocommit”设置为“false”,然后在成功执行代码时显式提交偏移量。在这种情况下,想法是如果代码执行失败(因为偏移量没有增加),将再次读取消息,但即使这样也不起作用。

我在NodeJS中使用带有Kafka_2.10(单节点)的“kafka-node”软件包。

知道如何让它发挥作用吗?或者解决同样问题的任何替代方法?

PS :我尝试了另一种方法将消息放回队列中,但是它可以正常工作,但希望使用这种方法。

0 个答案:

没有答案