我有一个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 :我尝试了另一种方法将消息放回队列中,但是它可以正常工作,但希望使用这种方法。