如何在Golang Kafka 10中获取分区的消费者组偏移量

时间:2016-11-16 21:29:46

标签: go apache-kafka shopify

现在,Golang Kafka库(sarama)提供了消费者群体功能,而没有任何外部库帮助kafka 10.如何在任何给定时间让消费者群体处理当前消息偏移?

之前我使用kazoo-go(https://github.com/wvanbergen/kazoo-go)来获取我的消费者群组消息偏移量,因为它存储在Zookeeper中。现在我使用sarama-cluster(https://github.com/bsm/sarama-cluster),我不确定使用哪个API来获取我的消费者组消息偏移量。

2 个答案:

答案 0 :(得分:0)

我也在与Sarama和Kafka合作,以取消主题。

您可以使用以下代码获得偏移量。

    package main

    import (
     "gopkg.in/Shopify/sarama"
     "fmt"
    )

    func main(){
      client , err := sarama.Client([]string{"localhost:9092"},nil) // I am not giving any configuration
      if err != nil {
          panic(err)
      }
      lastoffset, err := client.GetOffset("topic-test",0,sarama.OffsetNewest)
      if err != nil {
          panic(err)
      }
      fmt.Println("Last Commited Offset ",lastoffset)
    }

如果这是您正在寻找的答案以及是否有帮助,请告诉我。

答案 1 :(得分:0)

在幕后,consumerGroupSession 结构使用 PartitionOffsetManagerget next offset

    if pom := s.offsets.findPOM(topic, partition); pom != nil {
        offset, _ = pom.NextOffset()
    }

这是 pom.NextOffset() 的文档。

consumerGroupSession 通过 consumerGroupClaim 方法构造 newConsumerGroupClaim() 结构体时,它会将 pom.NextOffset() 返回的偏移量作为 offset 参数传递。您可以稍后通过 claim.InitialOffset() 访问它。开始使用消息后,您可以使用 message.Offset 的当前处理的消息。

不幸的是,无法从 consumerGroupSession.offsets.findPOM() 方法访问 ConsumerGroupHandler.ConsumeClaim(session sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim),因为它接收会话作为 ConsumerGroupSession 接口,而不是作为 consumerGroupSession 结构。所以 offsets 变量是私有的,不可访问。

因此我们无法真正访问 NextOffset() 方法,该方法正是 OP 想要的。