对于Kafka Connect 连接器或连接器任务失败或遇到错误的情况,是否有任何警报选项?
我们有Kafka Connect正在运行,它运行良好,但我们遇到了需要手动跟踪和发现的错误。通常,在人类注意到问题之前,它已经处于错误状态一周。
(我仍然无法评论,以回应克莱的回答......
注意:任务/连接器状态的 JMX 指标中存在错误(发布时:2020 年 5 月 11 日(
1(当任务失败时,它的状态指标消失了。这是一个已知问题,正在进行修复。可以在此处找到 Jira,可以在此处找到 PR。
2(不要使用连接器指标来监视任务的状态。连接器可以显示为运行正常,但任务可能处于失败状态,您需要直接监视任务。这在Confluent的连接器监控技巧中提到,其中说:
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.
基于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 的 REST API 来检查工作线程的运行状况和连接器的状态。使用简单的脚本或许多监视系统可以轻松自动化此方法。它适用于独立工作线程和分布式工作线程,但在后一种情况下,您可以向集群中的任何 Kafka Connect 工作线程发出请求。
如果要检查所有连接器的运行状况,第一步是获取已部署连接器的列表:
GET /connectors
这将返回连接器名称的 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.RecordTooLargeExceptionn"
}
]
}
这些只是 REST API 允许你执行的操作的一个示例。
我知道这是一个非常古老的问题,所以当我们遇到类似的问题时,我们非常频繁地使用 Kafka Connect,并且很难单独监控每个连接器,尤其是当您考虑管理超过 150+ 个连接器时。
因此,我们编写了一个基于 Kotlin 的小型应用程序,该应用程序接受一个config.json
,您可以在其中指定集群配置,如果指定了 smtp config,它将根据指定的递归间隔继续轮询集群,并将发送基于邮件的警报。
如果它适合您的用例,请使用并在遇到任何问题时提出问题。
存储库的链接如下所示: 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
希望这对您有帮助
自从这篇文章被写/回答以来,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 指标。当这篇文章写+回答时,此选项不可用。
仅供参考,Kafka 仍然没有公开滞后指标,因此您仍然需要第三方选项来监控滞后并发出警报。
我知道有点晚了,但这可能会完成人们在这里建议的内容,改善 KC 集群监控的一种方法是使用此 Kafka Connect REST 扩展: https://github.com/LoObp4ck/kafka-connect-healthchecks
然后让监视定期作业检查此终结点,以确保所有连接器任务运行正常。 我们在生产中使用它,它可以完成工作
该罐子也可在 maven Central 中使用,如下所示:
<dependency>
<groupId>net.loobpack.kafka-connect-healthchecks</groupId>
<artifactId>kafka-connect-healthcheck-extension</artifactId>
<version>1.0.0</version>
</dependency>