如何在轮询循环之前稳定KafkaConsumer(0.10.0.0)? (获得'未知'偏移量)

时间:2016-08-09 04:49:19

标签: apache-kafka

我有一个简单的4分区主题,lowercaseStrings。我创建了一个KafkaConsumer并订阅了这样的主题:

  val consumer = new KafkaConsumer[Array[Byte], V](
    (Map(
      "bootstrap.servers" -> host,
      "enable.auto.commit" -> "false",
      "auto.offset.reset" -> "earliest",
      "group.id" -> "mygroup"
    )),
    new ByteArrayDeserializer,
    new StringDeserializer
  )
  consumer.subscribe(List(topic))

此时我用100万个字符串预先填充主题并启动此消费者的轮询循环。我将成功轮询所有1M并手动提交它们但是当我检查组统计数据时,我有时会看到这样的事情:

GROUP                          TOPIC                          PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             OWNER
speed                          lowercaseStrings               0          unknown         250000          unknown         consumer-1_/192.168.99.1
speed                          lowercaseStrings               1          unknown         250000          unknown         consumer-1_/192.168.99.1
speed                          lowercaseStrings               2          unknown         250000          unknown         consumer-1_/192.168.99.1
speed                          lowercaseStrings               3          unknown         250000          unknown         consumer-1_/192.168.99.1

那不好。这不一致,我有时看到已知/未知偏移的混合,通常有很大的滞后。

我甚至在我的主要轮询循环之前尝试了一个“虚拟”,无数据轮询,试图强制重新平衡,像这样(在consumer.subscribe之后):

  consumer.pause(consumer.assignment)
  consumer.poll(0)
  consumer.resume(consumer.assignment)

在此之后,如果我打印consumer.assignment,我可以看到有意义的东西,但偏移结果没有改变。

我想知道它是否试图在消费者“定居”之前进行民意调查,导致结果不一致。

如何获得一致/正确的行为?

0 个答案:

没有答案