在像这样的基本Kafka .NET消费者设置中
a
该使用者在启动时将仅从生产者那里收到新消息。如何首先获取该特定主题的所有现有记录,然后继续侦听新记录?
谢谢
答案 0 :(得分:1)
答案 1 :(得分:0)
我想我已经找到了解决方法。如本博客文章http://blog.empeccableweb.com/wp/2016/11/30/manual-offsets-in-kafka-consumers-example/中所建议,您可以设置一个事件处理程序,当将分区分配给给定使用者时触发该事件处理程序,然后将这些分区强制返回到偏移量0。类似这样的事情:
using (var consumer = new Consumer<string,string>(configuration))
{
_consumer.OnPartitionsAssigned += OnPartitionsAssigned;
_consumer.Subscribe("my-topic");
...
}
private void OnPartitionsAssigned(object sender, List<TopicPartition> assignedPartitions)
{
// Build a new list of Topic/Partition/Offset values with offset = Beginning
var newPartitionOffsets = new List<TopicPartitionOffset>();
assignedPartitions.ForEach(x => newPartitionOffsets.Add(new TopicPartitionOffset(x, Offset.Beginning)));
// Assign to consumer
consumer.Assign(newPartitionOffsets);
}
不确定是否有更聪明的方法,但这似乎可以解决问题。当然,仅当此事件仅在订阅开始后立即触发,而不是在其生命周期内触发时,才起作用。但是,即使那样也可以解决。