如何通过jmx监控kafka中的消费者滞后?

How to monitor consumer lag in kafka via jmx?

我有一个 kafka 设置,其中包括一个到 prometheus 的 jmx 导出器。我正在寻找一个指标,它根据主题和组 ID 给出偏移量滞后。我是 运行 kafka 2.2.0.

一些在线资源指向一个名为 kafka.consumer 的指标,但我的设置中没有这样的指标。

来自我的 jmx 终端:

$>domains
#following domains are available
JMImplementation
com.sun.management
java.lang
java.nio
java.util.logging
jdk.management.jfr
kafka
kafka.cluster
kafka.controller
kafka.coordinator.group
kafka.coordinator.transaction
kafka.log
kafka.network
kafka.server
kafka.utils

但是,我可以使用以下命令查看我需要的数据:

root@kafka-0:/kafka# bin/kafka-consumer-groups.sh --describe --group benchmark_consumer_group --bootstrap-server localhost:9092
Consumer group 'benchmark_consumer_group' has no active members.

TOPIC               PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
benchmark_topic_10B 2          2795128         54223220        51428092        -               -               -
benchmark_topic_10B 9          4               4               0               -               -               -
benchmark_topic_10B 6          7               7               0               -               -               -
benchmark_topic_10B 7          5               5               0               -               -               -
benchmark_topic_10B 0          2834028         54224939        51390911        -               -               -
benchmark_topic_10B 1          15342331        54222342        38880011        -               -               -
benchmark_topic_10B 4          5               5               0               -               -               -
benchmark_topic_10B 5          6               6               0               -               -               -
benchmark_topic_10B 8          8               8               0               -               -               -
benchmark_topic_10B 3          4               4               0               -               -               -


但这无济于事,因为我需要根据指标跟踪是否。此外,此命令执行大约需要 25 秒,因此用作指标的来源是不合理的。

我的猜测是指标 kafka.consumer 在 2.2.0 版本中不存在,并被另一个替代。虽然,我无法在网上找到任何资源,其中包含有关如何以及在何处获取该指标的最新信息

kafka.consumer JMX 指标仅存在于消费者进程本身,而不存在于 Kafka 代理进程。请注意,您不会从使用 Java 以外的消费者库的消费者那里获得 kafka.consumer 指标。

目前,Kafka 代理本身没有针对消费者延迟的可用 JMX 指标。还有其他通常用于监控消费者滞后的解决方案,例如 Burrow by LinkedIn. There are also a few open source projects such as kafka9.offsets 通过 JMX 公开消费者滞后指标,但可能无法更新以与最新的 Kafka 一起使用。

您可以试试 Kafka Minion ( https://github.com/cloudworkz/kafka-minion )。虽然 Kafka Minion 在内部的工作方式与 Burrow 类似(消费 __consumer_offsets 消费者组偏移主题),但它对您的用例有几个优势

对于您的案例,Kafka Minion 相对于 Burrow 的优势:

  • 具有本机 prometheus 支持(无需额外部署即可将指标公开给 prometheus)
  • 有一个示例 Grafana 仪表板
  • 有其他指标(例如 consumergroup:topic:partition 组合的最后一次提交时间戳、提交率、有关清理策略的信息,您可以列出给定主题的所有消费者组等)
  • 不包含 zookeeper 依赖项(这也意味着不支持仍然向 zookeeper 提交偏移量的消费者)
  • 高可用性支持 (!!)。 Burrow 有一个问题,它总是会公开指标,当它刚刚开始使用 __consumer_offsets 主题时,这将是错误的。因此,您不能 运行 它处于 HA 模式。当你想根据消费者组延迟设置警报时,这是一个问题
  • Kafka Minion 不支持多集群,这降低了代码和最终用户的复杂性。您显然仍然可以为每个集群部署 Kafka Minion

免责声明:我是 Kafka Minion 的作者,我仍在寻找其他用户的更多反馈。我打算为我的项目、我为之工作的公司和社区积极维护和开发出口商。

回答有关使用 kafka-consumer-groups.sh shell 脚本看到的内容的问题。这不会起作用,因为它无法报告不活跃消费者的滞后情况,这有点适得其反。