我正在为我的.net项目构建一个Kafka消费者。我正在使用kafka-net(James Roland的Apache Kafka mady的本地c#客户端)。
我的问题是,默认情况下,此代码(基于文档)从一开始就获取所有消息:
private void StartKafkaConsumer(string ipKafka, string portKafka, string topicKafka)
{
string topic = topicKafka;
Uri uri = new Uri($"http://{ipKafka}:{portKafka}");
var options = new KafkaOptions(uri);
using (var router = new BrokerRouter(options))
{
using (var consumer = new Consumer(new ConsumerOptions(topic, router)))
{
foreach (var message in consumer.Consume())
{
Console.WriteLine(Encoding.UTF8.GetString(message.Value));
}
}
}
}
...
StartKafkaConsumer("localhost", "9092", "test"); //this fetches messages sent weeks ago, since the creation of the 'test' topic
基本上,此代码与该命令的作用相同:
.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
我要做的就是从客户端连接到Apache服务器时开始获取消息,而不是从头开始。我知道这是可能的,因为我尝试了没有“ --from-beginning”部分的最后一条命令,并且它起作用了。
任何建议将不胜感激。
答案 0 :(得分:0)
查看ConsumerOptions
方法。应该有一个设置属性/配置值的选项:
auto.offset.reset
将上述属性/配置设置为latest
。届时,只要您使用未知/新的使用者组ID连接,使用者便会默认从最新的偏移量开始。
但是,如果消费者组标识是已知的(即,已经从该主题/分区中消费了至少一次),它将尝试获取最后提交的偏移量+1。如果该偏移量不可用,因为它已超过保留阈值,然后将默认为最新。
这里有更详细的文档: