如何将数据从 Kafka 导出到 Prometheus?

Posted

技术标签:

【中文标题】如何将数据从 Kafka 导出到 Prometheus?【英文标题】:How to export data from Kafka to Prometheus? 【发布时间】:2020-09-01 14:53:40 【问题描述】:

我在一个 kafka 主题中获得 300K+ 指标/分钟作为时间序列。我想存储和查询数据。满足我要求的可视化工具是 Grafana。为了高效地存储和查询,我正在考虑将这些时间序列存储在 Prometheus 中。

具有大量时间序列的 Kafka 主题 -> Prometheus -> Grafana

我不太确定,我怎么能做到这一点,因为 Prometheus 是基于 Pull 的抓取方法。 即使我编写了一个 pull 服务,它是否允许我拉取 300K/分钟的指标?

SYS 1, UNIX TIMESTAMP, CPU%, 10
SYS 1, Processor, UNIX TIMESTAMP, CPUCACHE, 10
SYS 2, UNIX TIMESTAMP, CPU%, 30
.....

大部分文章都在讨论 Kafka exporter/JMX exporter 来监控 Kafka。我不是在寻找 kafka 监控,而是发送存储在主题中的时间序列数据,并利用 Prometheus 查询语言和 Grafana 进行分析。

【问题讨论】:

【参考方案1】:

我强烈建议不要使用这种方法,Prometheus 导出器主要用于基于指标的分析和监控: 例如,您想检查每 10 秒有多少条消息通过主题/分区。

您可以按照您的描述进行操作,但如果您根据集群规格不断抓取大量数据,则可能会对您的 Prometheus 集群和存储造成严重压力。

如果您真的想存储和查询基于时间序列的事件,我建议您将它们记录到 Elasticsearch。您可以将 Grafana 连接到 Elasticsearch 并将其用作查询的数据源。

另一种选择是在 Grafana 网站上搜索基于社区的 Kafka 仪表板,这些仪表板由 Prometheus 数据源填充,并查看其中是否有您需要的指标。这样您就可以确定哪个出口商适合您: https://grafana.com/grafana/dashboards?dataSource=prometheus&direction=desc&orderBy=reviewsCount&search=kafka

【讨论】:

您是否建议 Prometheus 无法处理存储在我的主题中的 300K 指标,但 ElasticSearch 可以?【参考方案2】:

我遇到了“Kafka Connect Prometheus Metrics Sink 连接器”,它从多个 Apache Kafka® 主题导出数据,并使数据可用于由 Prometheus 服务器抓取的端点。它是融合平台上的商业产品。

https://docs.confluent.io/kafka-connect-prometheus-metrics/current/index.html#prometheus-metrics-sink-connector-for-cp

我坚持使用现有的时间序列数据库。为了使用 Grafana,改为编写自定义数据源。实施 PROMQL 可能是其他选择。

【讨论】:

以上是关于如何将数据从 Kafka 导出到 Prometheus?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 Cassandra 导出到 mongodb?

从 Spring Boot 2.1.6 升级到 2.2.2 时,Prometheus 不导出 Kafka Consumer 数据

与 Redis 和 Prometheus 集成

反思Spark将数据导出到Kafka的方案

kafka connector

如何将数据从 Kafka 传递到 Spark Streaming?