Flink和Prometheus:流式应用程序的云原生监控

简介: 本文描述了程序开发人员如何使用ApacheFlink内置的metrics 系统和Prometheus结合的方式,有效的观测和监控流式应用程序。

本文描述了程序开发人员如何使用ApacheFlink内置的metrics 系统和Prometheus结合的方式,有效的观测和监控流式应用程序。这也是继我在2018年柏林Flink Forward论坛上演讲(幻灯片的后续文章。我将介绍一些Prometheus的基本概念,并解释它为什么非常适合于监控ApacheFlink的流处理作业(job)。另外,还会通过一个实例来说明如何利用Prometheus来深入了解你的应用程序,并对Flink作业的潜在问题作出告警。

为什么是Prometheus?

Prometheus是一个基于指标的监测系统,最初创建于2012年,它是完全开源的(Apache License 2),并且背后有着一个活跃的技术社区支持,它去年从云原生基金会(Cloud Native Foundation)毕业,这标志着产品的成熟、稳定和生产可用。正如我们所提到的,Prometheus系统是基于度量指标的,被设计用来衡量服务的整体健康状况、行为和性能。Prometheus具备多维的数据模型和灵活的查询语言,并且是为可靠性而设计的,可以很容易地部署在传统的或容器化的环境之中。以下是它所涉及到的一些重要概念:

• Metrics: Prometheus将metrics定义为随时间变化的信息流,这些时间序列具有毫秒级的精确度;

• Labels:是与支持Prometheus的数据模型的时间序列相关联的键值对,这与传统的度量系统可能遇到的分层数据结构不太相同;

• Scrape: Prometheus是一个基于“拉取”的系统,它从指定的数据源中主动获取(“scrapes”)度量数据,这些数据源以基于文本的格式在HTTP协议的地址上进行暴露;

• PromQL:是Prometheus的查询语言,它既可用于创建仪表盘,也可用于设置在满足特定条件时触发的告警规则;

当为你的Flink作业考虑到度量指标和监控系统的时候,其实有很多的选择。Flink提供了原生支持,通过PrometheusReporter功能向Prometheus公开数据,配置这个功能非常的简单。

Prometheus是一个很好的选择,因为通常来说,Flink作业不是独立运行的,而是在一个很大的微服务环境中运行的。为了让Prometheus能够从其他更广泛的系统中获得度量指标,这里提供两种选择:支持所有主要语言的库,以应用于其它语言开发的应用程序。此外,还有一系列各种各样的输出器,是将第三方系统公开的度量指标(如数据库或者ApacheKafka)作为Prometheus的度量指标。

Prometheus和Flink的实操

这里提供了一个Github库,演示了上面所描述的整合过程。想要查看的话,先要克隆一个库,并确保环境中安装并运行了Docker容器:
image.png

首先利用工具Gradle创建一个Flink作业,并基于Docker Compose启动一个本地的环境,Docker Compose启动一个运行在Flink作业集群(可在http://localhost:8081 上访问)中的作业和一个Prometheus实例(http://localhost:9090)

image.png


示例作业 Web界面中的作业曲线图和自定义的度量指标!

PrometheusExampleJob包括三个operator,一个是生成多达10000个随机数,然后是一个map会对事件进行计数,并且创建一个值传递的柱状图。最后一个,会丢弃这些事件,不做进一步的输出。下边显示了一些简单的代码,来自于第二个操作,把与业务逻辑相关的定制度量指标添加到Flink作业中,这是非常简单的事情。

image.png

上述代码从FlinkMetricsExposingMapFunction.java文件中摘录的,演示了自定义的Flink度量指标

在Flink中配置Prometheus监控

开始用Prometheus监控Flink的时候,必须要执行以下的步骤:

  1. 首先让PrometheusReporter的jar文件放在Flink集群的安装路径里(jar包是随Flink一起发布的);
    image.png
  2. 在Flink的flink-conf.yaml文件中配置报告(reporter)参数。所有的作业管理器和任务管理器都将公开已配置端口的度量指标;
    image.png
  3. Prometheus需要知道从哪里获取到度量指标。在一个静态的场景中,只需在prometheus.yml文件中配置Prometheus,请看下面的代码:
    image.png

在一些动态的场景中,我们建议使用Prometheus提供给不同平台(如Kubernetes、AWS EC2等等)的服务发现支持机制。

Prometheus现在有两个自定义的度量指标,见下图:

image.png


Prometheus web UI中的度量指标实例

Flink集群还提供了更多的技术度量指标(如检查点大小或持续时间、Kafkaoffset或资源消耗机制)。如果你感兴趣的话,可以查看所有作业管理器和两个任务管理器的Prometheus度量指标,它们分别在http://localhost:9249、http://localhost:9250和http://localhost:9251上显示。

要测试Prometheus的告警功能,通过执行如下的命令:
image.png
我们的Flink作业可以通过检查点机制快速地从局部的失败中恢复。不过,大约在一分钟之后(如果告警规则中配置过了),下图中的告警将会被触发:

image.png

Prometheus web UI的报警示例


在实际情况下,这样的告警可以通过一个名为 Alertmanager的组件进行路由,并在分类之后发送到给系统的通知里,如电子邮件、PagerDuty或Slack等。
继续使用这个设置,并查看 http://localhost:3000 (权限:admin/flink) 上的 Grafana实例,来可视化Prometheus的度量指标。如果有任何问题或建议,请随时在Github上留言。最后,不要忘记执行以下的命令以结束演示:

image.png

结论

将Prometheus和Flink 结合使用,可以为有效的监测和预警Flink作业提供一种简洁的方法。这两个技术背后都有着非常活跃的社区,并在即将发布的版本里做了完善以及添加了新的功能。我们鼓励大家一起尝试着使用这两项技术,这可以极大地促进大家对在生产中运行的Flink作业的了解。


本文由阿里云开发者社区组织翻译。
文章原标题《Flink and Prometheus: Cloud-native monitoring of streaming applications》
作者:Maximilian Bode
译者:陆离
校对:杨乾坤(欧文)
文章为简译,更为详细的内容,请查看原文

目录
相关文章
|
消息中间件 分布式计算 大数据
大数据-113 Flink DataStreamAPI 程序输入源 自定义输入源 非并行源与并行源
大数据-113 Flink DataStreamAPI 程序输入源 自定义输入源 非并行源与并行源
170 0
|
3月前
|
人工智能 数据处理 API
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
Apache Flink Agents 是由阿里云、Ververica、Confluent 与 LinkedIn 联合推出的开源子项目,旨在基于 Flink 构建可扩展、事件驱动的生产级 AI 智能体框架,实现数据与智能的实时融合。
511 6
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
|
10月前
|
消息中间件 关系型数据库 MySQL
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
1023 0
|
7月前
|
资源调度 Kubernetes 流计算
Flink在B站的大规模云原生实践
本文基于哔哩哔哩资深开发工程师丁国涛在Flink Forward Asia 2024云原生专场的分享,围绕Flink On K8S的实践展开。内容涵盖五个部分:背景介绍、功能及稳定性优化、性能优化、运维优化和未来展望。文章详细分析了从YARN迁移到K8S的优势与挑战,包括资源池统一、环境一致性改进及隔离性提升,并针对镜像优化、Pod异常处理、启动速度优化等问题提出解决方案。此外,还探讨了多机房容灾、负载均衡及潮汐混部等未来发展方向,为Flink云原生化提供了全面的技术参考。
412 9
Flink在B站的大规模云原生实践
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
254 2
利用java8 的 CompletableFuture 优化 Flink 程序
|
8月前
|
资源调度 Kubernetes 调度
网易游戏 Flink 云原生实践
本文分享了网易游戏在Flink实时计算领域的资源管理与架构演进经验,从Yarn到K8s云原生,再到混合云的实践历程。文章详细解析了各阶段的技术挑战与解决方案,包括资源隔离、弹性伸缩、自动扩缩容及服务混部等关键能力的实现。通过混合云架构,网易游戏显著提升了资源利用率,降低了30%机器成本,小作业计算成本下降40%,并为未来性能优化、流批一体及智能运维奠定了基础。
466 9
网易游戏 Flink 云原生实践
|
分布式计算 监控 大数据
大数据-114 Flink DataStreamAPI 程序输入源 自定义输入源 Rich并行源 RichParallelSourceFunction
大数据-114 Flink DataStreamAPI 程序输入源 自定义输入源 Rich并行源 RichParallelSourceFunction
237 0
|
11月前
|
消息中间件 关系型数据库 MySQL
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
本教程展示如何使用Flink CDC YAML快速构建从MySQL到Kafka的流式数据集成作业,涵盖整库同步和表结构变更同步。无需编写Java/Scala代码或安装IDE,所有操作在Flink CDC CLI中完成。首先准备Flink Standalone集群和Docker环境(包括MySQL、Kafka和Zookeeper),然后通过配置YAML文件提交任务,实现数据同步。教程还介绍了路由变更、写入多个分区、输出格式设置及上游表名到下游Topic的映射等功能,并提供详细的命令和示例。最后,包含环境清理步骤以确保资源释放。
827 2
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
|
SQL 流计算 关系型数据库
基于OpenLake的Flink+Paimon+EMR StarRocks流式湖仓分析
阿里云OpenLake解决方案建立在开放可控的OpenLake湖仓之上,提供大数据搜索与AI一体化服务。通过元数据管理平台DLF管理结构化、半结构化和非结构化数据,提供湖仓数据表和文件的安全访问及IO加速,并支持大数据、搜索和AI多引擎对接。本文为您介绍以Flink作为Openlake方案的核心计算引擎,通过流式数据湖仓Paimon(使用DLF 2.0存储)和EMR StarRocks搭建流式湖仓。
1117 5
基于OpenLake的Flink+Paimon+EMR StarRocks流式湖仓分析
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
337 3