为什么监控到的Kafka消费者滞后值并不总是正确的?

Why is the monitored Kafka consumer lag value not always correct?

我是 运行 Apache Kafka on Kubernetes 使用 minikube 我还有一个带有 confluent consumer写成python。我正在使用 JMX exporter 监控 Kafka broker 指标,并使用 kminion consumer exporter 监控消费者指标。这些出口商也是 2 个独立的 pods。最后,我让 Prometheus 监控这两个导出器并读取指标。

我每秒为某个主题生成 2 条消息。我的消费者消费了一条消息,然后运行了一个任务。该任务需要 0.4 秒才能完成。所以我也以每秒 2 条消息的速度消费。

我的假设是队列滞后指标应该始终为零或 2,因为我以相同的速度生产和消费。我每秒都在监视队列,这是我在 5 秒内得到的结果:

t = 0: Queue is 0.
t = 1: Queue is 3.
t = 2: Queue is 5.
t = 3: Queue is 7.
t = 4: Queue is 9.
t = 5: Queue is 0.

并且它重复相同的循环。所以queue lag的avg_over_time是5,为什么会这样呢?我知道消费者不能一次消费 9 条消息,因为它运行的任务需要 0.3 秒才能完成,因此我的最大消费率是每秒 2 条。

我也尝试过使用不同的导出器来获取消费者指标,但我仍然得到相同的结果。

您的消费者何时提交补偿?

如果您没有在处理每条消息后手动提交偏移量,默认情况下,消费者每 5 秒提交一次:https://kafka.apache.org/documentation/#consumerconfigs_auto.commit.interval.ms

这可以解释为什么您会看到这些队列值