如何从Confluent kafka C#库中获取Kafka主题的最新偏移量?

时间:2017-07-08 07:01:54

标签: c# apache-kafka kafka-consumer-api confluent-kafka

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

3 个答案:

答案 0 :(得分:2)

除了上一个答案,您还可以使用

List<TopicPartitionOffsetError> Position(IEnumerable<TopicPartition> partitions)

对于给定的主题/分区

,它将返回从librdkafka轮询的最后一个偏移量

对于来自消费者的最新提交偏移

,您有一个类似的Committed方法

您还可以查询最新的已知偏移量

WatermarkOffsets QueryWatermarkOffsets(TopicPartition topicPartition, TimeSpan timeout)

它会向kafka集群发送请求。呼叫阻塞,设置适当的超时。目前,您无法一次在多个分区上发送请求。 您可以使用它来获取最后已知的偏移量,以计算滞后

还有

WatermarkOffsets GetWatermarkOffsets(TopicPartition topicPartition)

将查询librdkafka中的内部状态,并返回INVALID_OFFSET(-1001)。您可以使用它来检测由于处理数据而导致的延迟。 (该方法的位置和结果之间的差异)

答案 1 :(得分:0)

当您收到消息时,它应包括主题,分区和偏离的位置(除了键和值)。

来自example here

consumer.OnMessage += (_, msg)
  => Console.WriteLine($"Topic: {msg.Topic} Partition: {msg.Partition} " +
        $"Offset: {msg.Offset} {msg.Value}");

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

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

答案 2 :(得分:0)

我没有从消费者那里检索偏移信息(我不想先消费消息),而是能够从生产者那里读取主题偏移(df2 = df.merge(grouped, on='Cabin') high),如下所示:

low