如何在合流卡夫卡C#library中获取卡夫卡主题的最新偏移量?

如何在合流卡夫卡C#library中获取卡夫卡主题的最新偏移量?,c#,apache-kafka,kafka-consumer-api,confluent-platform,C#,Apache Kafka,Kafka Consumer Api,Confluent Platform,我正在使用Confluent kafka C#客户端。如何获取本节中某个主题使用的最新偏移量?当您收到一条消息时,它应该包括主题、分区以及与消息来源的偏移量(除了键和值) 从: 当事件到达每个主题分区的末尾时,也会得到一个事件 consumer.OnPartitionEOF += (_, end) => Console.WriteLine($"Reached end of topic {end.Topic} partition {end.Partition}" +

我正在使用Confluent kafka C#客户端。如何获取本节中某个主题使用的最新偏移量?

当您收到一条消息时,它应该包括主题、分区以及与消息来源的偏移量(除了键和值)

从:

当事件到达每个主题分区的末尾时,也会得到一个事件

consumer.OnPartitionEOF += (_, end)
  => Console.WriteLine($"Reached end of topic {end.Topic} partition {end.Partition}" +
          $" , next message will be at offset {end.Offset}");

除了前面的答案,您还可以使用

List<TopicPartitionOffsetError> Position(IEnumerable<TopicPartition> partitions)
它将向kafka集群发送请求。呼叫被阻止,请设置适当的超时。目前,您不能同时在多个分区上发送请求。 您可以使用它来获取最后一个已知的偏移量,或者计算滞后

还有

WatermarkOffsets GetWatermarkOffsets(TopicPartition topicPartition)

它将查询librdkafka中的内部状态,并可能返回无效的_偏移量(-1001)。您可以使用它来检测由于处理数据而产生的延迟。(此方法的位置和结果之间的差异)

我没有从消费者那里检索偏移量信息(我不想首先使用消息),而是能够从制作人那里读取主题偏移量(
),如下所示:

var partitionOffset = _producer.QueryWatermarkOffsets(new TopicPartition("myTopic", myPartition), TimeSpan.FromSeconds(10));
WatermarkOffsets GetWatermarkOffsets(TopicPartition topicPartition)
var partitionOffset = _producer.QueryWatermarkOffsets(new TopicPartition("myTopic", myPartition), TimeSpan.FromSeconds(10));