我有一个按时间表创建的Kafka用户。它尝试使用自上次提交以来添加的所有新消息。
一旦使用者使用完日志中的所有新消息,我想将其关闭,而不是无限期地等待新消息进入。
我无法通过Kafka的文档找到解决方案。
我在Confluent.Kafka.ConsumerConfig和ClientConfig类(包括FetchWaitMaxMs)中看到了许多与超时相关的属性,但是无法解密要使用的属性。我正在使用.NET客户端。
任何建议将不胜感激。
答案 0 :(得分:0)
我从未使用过.NET客户端,但是假设它与Java客户端没有什么不同,poll()
方法应接受以毫秒为单位的超时值,因此应将其设置为5000
在大多数情况下都可以工作。无需摆弄配置类。
另一种方法是在创建使用者时找到最大偏移量,并且仅读取直到该偏移量为止。从理论上讲,这将防止您的消费者无限期地运行,如果它没有像生产者那样快地消费的话。但是我从未尝试过这种方法。
答案 1 :(得分:0)
我找到了解决方案。 Confluent的.NET Kafka库的1.0.0-beta2版本提供了一种称为.Consume(TimeSpan timeSpan)
的方法。如果没有新消息要使用,或者我们位于分区EOF,则它将返回null。我以前使用过.Consume(CancellationToken cancellationToken)
重载,它阻止并阻止了我关闭使用者。此处更多内容:https://github.com/confluentinc/confluent-kafka-dotnet/issues/614#issuecomment-433848857
另一个选择是升级到1.0.0-beta3版本,该版本在ConsumeResult对象上提供了一个名为IsPartitionEOF的布尔标志。这就是我最初想要的-一种知道何时到达分区末尾的方法。