Kafka使用者(使用kafka-net)默认情况下从头开始获取所有消息

时间:2018-11-06 14:48:13

标签: c# apache-kafka

我正在为我的.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”部分的最后一条命令,并且它起作用了。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

查看ConsumerOptions方法。应该有一个设置属性/配置值的选项:

auto.offset.reset

将上述属性/配置设置为latest。届时,只要您使用未知/新的使用者组ID连接,使用者便会默认从最新的偏移量开始。

但是,如果消费者组标识是已知的(即,已经从该主题/分区中消费了至少一次),它将尝试获取最后提交的偏移量+1。如果该偏移量不可用,因为它已超过保留阈值,然后将默认为最新。

这里有更详细的文档:

https://kafka.apache.org/documentation/#newconsumerconfigs