Kafka 连接警报选项?

Kafka Connect Alerting Options?

对于 Kafka Connect 连接器或连接器任务失败或遇到错误的情况,是否有任何警报选项?

我们有 Kafka Connect 运行,它运行良好,但我们遇到了需要手动跟踪和发现的错误。通常,在人们注意到问题之前,它已经处于错误状态一周。

一种选择是使用 Kafka Connect's REST API 检查工作器的健康状况和连接器的状态。这种方法很容易使用简单的脚本或许多监控系统实现自动化。它适用于独立工作人员和分布式工作人员,但在后一种情况下,您可以向集群中的任何 Kafka Connect 工作人员发出请求。

如果要检查所有连接器的健康状况,第一步是获取已部署连接器的列表:

GET /connectors

那个 returns 一个 JSON 连接器名称数组。对于其中的每一个,发出请求以检查指定连接器的状态:

GET /connectors/(string: name)/status

响应将包括有关连接器及其任务的状态信息。例如,以下显示的连接器有两个任务 运行,其中一个任务仍然 运行,另一个任务因错误而失败:

HTTP/1.1 200 OK

{
    "name": "hdfs-sink-connector",
    "connector": {
        "state": "RUNNING",
        "worker_id": "fakehost:8083"
    },
    "tasks":
    [
        {
            "id": 0,
            "state": "RUNNING",
            "worker_id": "fakehost:8083"
        },
        {
            "id": 1,
            "state": "FAILED",
            "worker_id": "fakehost:8083",
            "trace": "org.apache.kafka.common.errors.RecordTooLargeException\n"
        }
    ]
}

这些只是 REST API 允许您执行的示例。

根据 Randall 的说法,此 shell 脚本使用 Confluent CLI 显示所有连接器和任务的状态。您可以将其用作警报的基础:

Robin@asgard02 ~/c/confluent-3.3.0> ./bin/confluent status connectors| \
                                    jq '.[]'| \
                                    xargs -I{connector} ./bin/confluent status {connector}| \
                                    jq -c -M '[.name,.connector.state,.tasks[].state]|join(":|:")'| \
                                    column -s : -t| \
                                    sed 's/\"//g'| \
                                    sort

file-sink-mysql-foobar       |  RUNNING  |  RUNNING
jdbc_source_mysql_foobar_01  |  RUNNING  |  RUNNING

我知道这是一个非常老的问题,所以当我们 运行 遇到类似的问题时,我们非常频繁地使用 Kafka Connect,而且很难单独监控每个连接器,尤其是当您正在查看时管理超过 150 个连接器。

因此我们编写了一个基于 Kotlin 的小型应用程序,它接受一个 config.json,您可以在其中指定集群配置,如果指定了 smtp 配置,它将根据指定的递归间隔继续轮询集群指定并将发送基于邮件的警报。

如果它适合你的用例,请使用并提出问题,以防你遇到任何问题。

repo 的 link 如下: https://github.com/gunjdesai/kafka-connect-monit

图像也被推送到 Docker Hub 上,您 运行 它直接使用以下命令。

docker run -d -v <location-of-your-config-file.json>:/home/code/config.json gunjdesai/kafka-connect-monit

希望对您有所帮助

由于这个 post 是 written/answered,Kafka Connect 开始提供自己的官方指标。 Apache Kafka Connect 提供传统 JMX 格式的指标。

如果您使用 Confluent Kafka Connect Helm Charts (https://github.com/confluentinc/cp-helm-charts/tree/master/charts/cp-kafka-connect),它们包含一个 Prometheus 指标导出器。

我在 Confluent Helm Chart Prometheus 图表中监控 cp_kafka_connect_connect_connector_metrics{status="running"} 并发出警报,但它有很多变化。

使用官方 Kafka Connect 指标通常更适合任何自动监控 + 警报设置。此选项在 post 撰写 + 回答时不可用。

仅供参考,Kafka 仍然不会公开滞后指标,因此您仍然需要第三方选项来监控滞后并发出警报。

(我仍然不能评论所以回应粘土的回答...)

注意:task/connector 状态的 JMX 指标中存在错误(发布时间:2020 年 5 月 11 日)

1) 当任务失败时,它的状态指标会消失。这是一个已知问题,正在修复中。 A Jira can be found here and PR can be found here.

2) 不要使用连接器指标来监视任务的状态。 连接器可以显示为 运行 正常,但任务可能处于失败状态,您需要直接监视任务。这在 Confluent 的 Connector monitoring tips 中提到:

In most cases, connector and task states will match, though they may be different for short periods of time when changes are occurring or if tasks have failed. For example, when a connector is first started, there may be a noticeable delay before the connector and its tasks have all transitioned to the RUNNING state. States will also diverge when tasks fail since Connect does not automatically restart failed tasks.

我知道有点晚了,但这可能会完成人们在这里的建议,改进 KC 集群监控的一种方法是使用此 Kafka Connect REST 扩展: https://github.com/LoObp4ck/kafka-connect-healthchecks

然后让您的监控定期作业检查此端点,以确保所有连接器任务都正常 运行。 我们在生产中使用它并且它完成了工作

maven central 中也有这个 jar,如下所示:

<dependency>
  <groupId>net.loobpack.kafka-connect-healthchecks</groupId>
  <artifactId>kafka-connect-healthcheck-extension</artifactId>
  <version>1.0.0</version>
</dependency>