匯合的高級消費者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