我是卡夫卡的新手。我想知道为什么CommitAsync()
不会做任何事情
AdvancedConsumer
也就是说,在记住偏移提交方面,CommitAsync
启用和禁用时的结果是相同的。
测试1:停用CommitAsync()
1在CommitAsync()
上禁用Run_Consume()
方法,如下所示:
public static void Run_Consume(string brokerList, List<string> topics)
{
...
//if (msg.Offset % 5 == 0)
//{
// Console.WriteLine($"Committing offset");
// var committedOffsets = consumer.CommitAsync(msg).Result;
// Console.WriteLine($"Committed offset: {committedOffsets}");
//}
}
}
}
2当Consumer
启动时,它会读取已从上一个会话中读取的从偏移0到最后偏移N的所有消息
3将新消息发布到Producer,消费者显示偏移量为N + 1
的新消息4杀死消费者
5启动消费者,它显示从偏移0到N + 1的所有消息
测试2:启用CommitAsync()
步骤1在CommitAsync()
Run_Consume()
方法
按照上面的步骤2 - 5进行操作
在两次测试中,新开始的消费者仍然可以记住最后一次偏移。因此,为什么CommitAsync()
被称为?{/ p>
请注意以下类似问题: https://github.com/confluentinc/confluent-kafka-dotnet/issues/470#issuecomment-375634009