我有一个简单的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,我可以看到有意义的东西,但偏移结果没有改变。
我想知道它是否试图在消费者“定居”之前进行民意调查,导致结果不一致。
如何获得一致/正确的行为?