Golang Kafka没有消费所有消息偏移

时间:2016-12-05 14:09:32

标签: go apache-kafka kafka-consumer-api kafka-producer-api

第一批: - 我试图从100平面文件中提取数据并加载到数组中,然后将它们逐个插入到kafka生成器中作为字节数组。

第二批: - 我从kafka使用者那里消费,然后将它们插入NoSQL数据库。

我在kafka的shopify sarama golang包的配置文件中使用Offsetnewset。

我可以接收并向kafka插入消息,但在消费时我只收到第一条消息。因为我在sarama配置中给了Offset最新版本。 我怎样才能获得所有数据。

1 个答案:

答案 0 :(得分:1)

很难能够在没有任何代码或更深入解释kafka如何配置(即:主题,分区......)的情况下讲述一些内容,因此很少有快速检查出现在我的脑海中:

  1. 假设您开始使用OffsetNewest设置之前开始制作,可能发生的一件事是您没有在该主题的所有分区上消费,关于sarama docs,您必须通过创建PartitionConsumers显式使用每个分区。来自https://godoc.org/github.com/Shopify/sarama#Consumer中的示例:

    partitionConsumer, err := consumer.ConsumePartition("my_topic", 0, OffsetNewest)
    if err != nil {
        panic(err)
    }
    
    ...
    
    consumed := 0
    ConsumerLoop:
    for {
        select {
        case msg := <-partitionConsumer.Messages():
            log.Printf("Consumed message offset %d\n", msg.Offset)
            consumed++
        case <-signals:
            break ConsumerLoop
        }
    }
    
  2. 事实上,你正在开始消费 生成所有事件,因此,所有事件的指针都不是OffsetNewest而是OffsetOldest。

  3. 我很抱歉无法为您提供更有用的答案,但是如果您粘贴一些代码或提供更多详细信息,我们可以提供更多帮助。