汇合的高级消费者here具有以下代码(为了简洁起见而修剪)。Confluent .net(rdkafka)提交消费者处置
using (var consumer = new Consumer<Null, string>(constructConfig(brokerList, false), null, new StringDeserializer(Encoding.UTF8)))
{
while (!cancelled)
{
Message<Null, string> msg;
if (!consumer.Consume(out msg, TimeSpan.FromMilliseconds(100)))
{
continue;
}
if (msg.Offset % 5 == 0)
{
consumer.CommitAsync(msg).Result;
}
}
}
自动提交是错误的。 我的问题是,如果'已取消'触发器被标记,但还有未完成的提交时会发生什么。这些消息是否未提交,因此会再次收到?我希望消费者会承诺处置,但在实施过程中我看不到这种情况。我可以做一些测试来看看会发生什么,但是我希望得到一个'官方'的答案,以防我的测试不能涵盖所有情况。
与实际问题无关,但:它是否是正确的实施?没有内存隔阂,确保'取消= true;'是否被其他线程观察过? – zerkms
让我们说'取消'是挥发性的 – acarlon