7个版本

0.3.1 2024年5月20日
0.3.0 2024年4月15日
0.2.2 2023年11月19日
0.2.1 2023年10月4日
0.1.1 2023年8月22日

#14可视化

36 每月下载量

MIT/Apache

155KB
2.5K SLoC

Kommitted - 测量Kafka消费者滞后

测量Kafka消费者 偏移量滞后 和时间滞后

CI Apache 2.0 Crates.io downloads

Kommitted 是一个测量 Kafka 消费者 滞后(即 延迟)的服务。它与所有将偏移量提交到 Kafka 的消费者(即 标准方式)一起工作,因为它消费内部 __consumer_offsets 主题。

度量遵循 Prometheus 暴露格式

有关总体架构、依赖关系和其他详细信息,请参阅 DESIGN.md

功能

  • 跟踪所有消费者的偏移量
  • 跟踪所有消费者的偏移量滞后
  • 跟踪所有消费者的时间滞后
  • 偏移量和滞后度量与所有上下文信息一起跟踪,以确定精确的主题分区分配
  • 公开额外的度量以跟踪 Kafka 集群(主题、成员、代理、分区)的状态
  • 公开 Kafka-polling 度量,以评估其自身性能
  • /metrics 端点以 Prometheus 格式公开度量
  • REST API 以构建在其之上的进一步自动化(例如,依赖于消费者组滞后的自动扩展逻辑)

所有这些都基于

  • 一个快速高效的 Rust 实现,基于 Tokio
  • 广泛使用的 librdkafka,Kafka 客户端(Java 之外)的 事实标准

请参阅 公开的度量完整列表,以获取更多详细信息。

入门

要安装 kommitted,您需要自己编译它,或者使用 Docker 镜像。如果您已经设置了 Rust 工具链,则只需运行

$ cargo install kommitted

在 Docker 中

Kommitted 现已作为 Docker 镜像提供:在 Docker Hub 仓库的 kafkesc/kommitted。这两个镜像都是基于 Debian slim 镜像,分别是 linux/amd64linux/arm64

ENTRYPOINTkommitted 二进制文件本身,因此您可以直接将参数传递给容器执行。

用法

Kommitted 支持 紧凑-h) 和 扩展--help) 用法说明。使用前者进行快速查找;使用后者更好地理解每个参数的功能。

紧凑:`kommitted -h`
Usage: kommitted [OPTIONS] --brokers <BOOTSTRAP_BROKERS>

Options:
  -b, --brokers <BOOTSTRAP_BROKERS>
          Initial Kafka Brokers to connect to (format: 'HOST:PORT,...')
      --client-id <CLIENT_ID>
          Client identifier used by the internal Kafka (Admin) Client [default: kommitted]
      --kafka-conf <CONF_KEY:CONF_VAL>
          Additional configuration used by the internal Kafka (Admin) Client (format: 'CONF_KEY:CONF_VAL').
      --cluster-id <CLUSTER_ID>
          Override identifier of the monitored Kafka Cluster
      --history <SIZE_PER_PARTITION>
          For each Topic Partition, how much history of offsets to track in memory. [default: 3600]
      --history-ready-at <FULLNESS_PERCENT_PER_PARTITION>
          How full `--history` of Topic Partition offsets has to be (on average) for service to be ready. [default: 0.3]
      --host <HOST>
          Host address to listen on for HTTP requests. [default: 127.0.0.1]
      --port <PORT>
          Port to listen on for HTTP requests. [default: 6564]
  -v, --verbose...
          Verbose logging.
  -q, --quiet...
          Quiet logging.
  -h, --help
          Print help (see more with '--help')
  -V, --version
          Print version
扩展:`kommitted --help`
Usage: kommitted [OPTIONS] --brokers <BOOTSTRAP_BROKERS>

Options:
  -b, --brokers <BOOTSTRAP_BROKERS>
          Initial Kafka Brokers to connect to (format: 'HOST:PORT,...').

          Equivalent to '--config=bootstrap.servers:host:port,...'.

      --client-id <CLIENT_ID>
          Client identifier used by the internal Kafka (Admin) Client.

          Equivalent to '--config=client.id:my-client-id'.

          [default: kommitted]

      --kafka-conf <CONF_KEY:CONF_VAL>
          Additional configuration used by the internal Kafka (Admin) Client (format: 'CONF_KEY:CONF_VAL').

          To set multiple configurations keys, use this argument multiple times.
          See: https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md.

      --cluster-id <CLUSTER_ID>
          Override identifier of the monitored Kafka Cluster.

          If set, it replaces the value `cluster.id` from the Brokers' configuration. This can be useful when `cluster.id` is not actually
          set.

      --history <SIZE_PER_PARTITION>
          For each Topic Partition, how much history of offsets to track in memory.

          Offsets data points are collected every 500ms, on average: so, on average,
          30 minutes of data points is 3600 offsets, assuming partition offsets are
          regularly produced to.

          Once this limit is reached, the oldest data points are discarded, realising
          a "moving window" of offsets history.

          [default: 3600]

      --history-ready-at <FULLNESS_PERCENT_PER_PARTITION>
          How full `--history` of Topic Partition offsets has to be (on average) for service to be ready.

          This value will be compared with the average "fullness" of each data structure containing
          the offsets of Topic Partitions. Once passed, the service can start serving metrics.

          The value must be a percentage in the range `[0.0%, 100.0%]`.

          [default: 0.3]

      --host <HOST>
          Host address to listen on for HTTP requests.

          Supports both IPv4 and IPv6 addresses.

          [default: 127.0.0.1]

      --port <PORT>
          Port to listen on for HTTP requests.

          [default: 6564]

  -v, --verbose...
          Verbose logging.

          * none    = 'WARN'
          * '-v'    = 'INFO'
          * '-vv'   = 'DEBUG'
          * '-vvv'  = 'TRACE'

          Alternatively, set environment variable 'KOMMITTED_LOG=(ERROR|WARN|INFO|DEBUG|TRACE|OFF)'.

  -q, --quiet...
          Quiet logging.

          * none    = 'WARN'
          * '-q'    = 'ERROR'
          * '-qq'   = 'OFF'

          Alternatively, set environment variable 'KOMMITTED_LOG=(ERROR|WARN|INFO|DEBUG|TRACE|OFF)'.

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

连接到需要 SASL_SSL 的 Kafka 集群

$ kommitted \
    --brokers {{ BOOTSTRAP_BROKERS or BROKER_ENDPOINT }} \
    --config security.protocol:SASL_SSL \
    --config sasl.mechanisms=PLAIN \
    --config sasl.username:{{ USERNAME or API_KEY }} \
    --config sasl.password:{{ PASSWORD or API_SECRET }} \  
    ...

日志详细程度

Kommitted 沿袭了使用 -v/-q 控制日志详细程度的传统

参数 日志详细程度级别 默认
-qq... 关闭
-q 错误
警告 x
-v 信息
-vv 调试
-vvv... 跟踪

它使用 logenv_logger,因此可以使用环境变量 KOMMITTED_LOG 配置和微调日志。请参阅 env_logger 文档 了解更多详细信息。

许可证

根据您的选择,受以下许可证的许可:

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,如 Apache-2.0 许可证中定义的,将根据上述条款双重许可,不附加任何额外条款或条件。

依赖关系

~46–65MB
~1M SLoC