Flink Web UI 是使用和调试保姆级教程(持续更新)

Flink Web UI 是调试和监控 Flink 应用程序的重要工具,通过它,你可以实时查看正在运行的 Flink 任务的详细信息,包括作业的状态、性能指标、各子任务的运行情况、故障恢复情况等。Flink Web UI 的这些功能为开发者和运维人员提供了调试和优化流式作业的有力支持。

接下来将详细介绍如何使用 Flink Web UI 来监控 Flink 任务是否正常运行,如何借助WebUI进行调试。

目录

一、Flink Web UI 的基本概念

二、访问 Flink Web UI

1. 启动 Flink 集群

2. 访问 Web UI

3. Web UI 主界面介绍

三、Flink Web UI 的调试与监控功能

1. 任务状态监控

2. 查看作业的详细信息

3. 分析吞吐量和延迟

4. 作业的故障恢复

5. 监控 TaskManager 状态

6. 查看作业日志

四、通过 Flink Web UI 辅助调试的具体步骤

1. 确认任务状态

2. 检查作业失败原因

2.1 查看作业图

2.2 分析子任务日志

2.3 查看 TaskManager 日志

3. 检查性能问题

3.1 检查吞吐量

3.2 查看延迟

4. 检查容错与故障恢复

4.1 检查 Checkpoint 状态

4.2 重启策略检查

5. 调整并行度与资源配置

5.1 调整并行度

5.2 资源分配

6. 排查数据倾斜

7. 作业的流处理 Watermark 问题

8.使用自定义指标


一、Flink Web UI 的基本概念

Flink Web UI 是 Flink 集群自带的 Web 界面,通常默认运行在 Flink 集群的 JobManager 所在节点。通过该 UI,用户可以:

  1. 查看作业执行状态:实时了解作业的运行状态、各个算子的执行情况、Task 的处理进度等。
  2. 监控性能指标:包括每个 Task 的吞吐量、延迟、并行度等,帮助识别性能瓶颈。
  3. 检查故障恢复:查看 Flink 的容错机制是否正确工作,例如 Checkpoint 和故障恢复的相关信息。
  4. 调试任务:通过分析具体任务的执行日志、错误信息、各 Task 的执行进度,帮助排查问题。

二、访问 Flink Web UI

1. 启动 Flink 集群

在访问 Flink Web UI 之前,需要确保 Flink 集群已经启动。一般情况下,Flink 集群启动命令如下:

./bin/start-cluster.sh

该命令会启动 JobManager 和 TaskManager,JobManager 负责调度作业,而 TaskManager 则是执行作业的节点。

2. 访问 Web UI

默认情况下,Flink Web UI 运行在 JobManager 节点的 8081 端口。你可以通过浏览器访问:

http://<JobManager IP>:8081 

假设 Flink 集群运行在本地,访问地址就是:

http://localhost:8081 

打开 Web UI 后,你将看到当前正在运行的 Flink 作业列表,以及有关集群的基本信息。

3. Web UI 主界面介绍

进入 Web UI 后,主界面会展示以下信息:

  • Running Jobs(运行中的作业):显示正在运行的所有 Flink 作业的列表。每个作业都有一个独特的 Job ID,可以点击进入查看作业的详细信息。
  • Completed Jobs(已完成的作业):显示已经完成或取消的作业列表。
  • TaskManagers:显示当前集群中所有 TaskManager 的健康状态,包括 CPU 使用率、内存使用情况、Slot 数量等。
  • Job Manager Configuration(JobManager 配置):显示 JobManager 的一些配置参数,帮助调试和优化 Flink 集群。
  • Logs:提供 Flink 集群中的全局日志文件,这些日志文件可以帮助调试集群级别的问题。
  • Metrics(指标):展示了作业运行的关键性能指标。

接下来我们将详细介绍如何使用 Web UI 中的各个功能来判断 Flink 任务是否正常运行,并辅助调试。

三、Flink Web UI 的调试与监控功能

1. 任务状态监控

在 Flink Web UI 的主界面中,可以看到正在运行的作业列表。每个作业的状态可以是以下几种之一:

  • Running:作业正在正常执行中。
  • Finished:作业已成功完成执行。
  • Failed:作业执行失败,任务中出现错误。
  • Cancelled:作业被用户取消。
  • Restarting:作业正在因故障进行自动重启。
  • Suspended:作业被暂停。

你可以通过这些状态快速判断作业是否正常执行。如果任务失败或被取消,可以进一步查看失败的原因和相关日志。

2. 查看作业的详细信息

点击某个正在运行的作业名称后,你会进入作业的详细信息页面。该页面包含以下几个重要部分:

  • Overview(概览):显示作业的基础信息,包括作业的开始时间、执行时间、并行度、Job ID 等。
  • Job Graph(作业图):展示了 Flink 作业的执行图,包括作业中的各个算子(operator),以及它们之间的数据流。通过作业图,开发者可以直观地看到数据处理的流程。如果某个算子出现了问题,你可以通过作业图快速定位问题的来源。

  • Vertices(顶点):每个作业图中的算子被称为顶点(vertex)。你可以在这个页面上看到各个顶点的执行状态,包括每个算子的吞吐量、处理时间、并行度等。
  • Subtasks(子任务):每个顶点可以有多个并行的子任务。在 Subtasks 页面上,你可以看到每个子任务的执行状态、处理的记录数量、处理时间等信息。如果某个子任务的性能异常或发生错误,你可以在这里找到具体的 Task ID,并进一步分析问题。

3. 分析吞吐量和延迟

Flink Web UI 提供了每个算子的吞吐量和延迟信息,这些是判断任务执行是否正常的重要指标。通常可以通过以下方式分析:

  • 吞吐量(Throughput):衡量每秒处理的数据条数(records/second)。通过查看每个顶点的吞吐量,你可以知道数据是否被高效处理。如果某个算子的吞吐量很低,可能说明这个算子是性能瓶颈,值得进一步优化。
  • 延迟(Latency):测量数据从进入作业到被处理完成所消耗的时间。延迟过大可能说明作业中某个算子处理时间过长,可能需要优化计算逻辑或增加并行度。

在作业的详细页面中,可以点击每个顶点来查看它的吞吐量和延迟。如果发现某个算子吞吐量极低或延迟过高,可以进一步分析其具体的执行日志,或者调整并行度来进行优化。

4. 作业的故障恢复

Flink 具备良好的容错机制,作业在执行过程中,如果某个 Task 失败,Flink 会自动根据 Checkpoint 恢复作业状态,并重新执行失败的 Task。

在 Web UI 中,你可以查看作业的故障恢复状态:

  • Checkpoint:Flink 通过定期的 Checkpoint 来保证作业的状态可以在故障发生时恢复。你可以在 Web UI 中的 Checkpoint 页面查看 Checkpoint 的触发时间、完成时间以及 Checkpoint 的状态。如果 Checkpoint 出现失败,可能说明作业的状态过大或存在其他问题。

  • Restart Strategy(重启策略):如果作业执行失败,Flink 会根据配置的重启策略自动尝试重启任务。你可以在 Web UI 中查看作业的重启次数以及失败原因。如果重启失败次数过多,可能说明作业存在逻辑错误,需要进一步调试。
5. 监控 TaskManager 状态

TaskManager 是实际执行 Flink 作业的工作节点,因此监控 TaskManager 的健康状态是确保作业正常运行的关键。

在 Web UI 中的 TaskManagers 页面,你可以看到所有 TaskManager 的状态,包括以下信息:

  • CPU 使用率:如果某个 TaskManager 的 CPU 使用率过高,可能说明该节点的负载过重。你可以考虑增加 TaskManager 的数量或者调节作业的并行度来缓解这种情况。
  • 内存使用情况:Flink 的状态化算子会占用大量内存,如果某个 TaskManager 的内存使用接近上限,可能会导致作业失败或性能下降。你可以考虑增加节点内存或者优化状态的管理方式。
  • Slots 使用情况:Flink 使用 Slot 来分配资源,每个 TaskManager 有一定数量的 Slot。你可以通过 Web UI 查看 Slot 的使用情况,判断是否需要调整 Slot 配置。
6. 查看作业日志

日志是调试 Flink 作业最直接的方式。Flink Web UI 提供了各个任务的日志查看功能,帮助开发者分析作业中的错误信息。

  • TaskManager Logs:你可以在 TaskManager 的页面中查看每个 TaskManager 的日志。如果某个 Task 失败,通常可以在 TaskManager 的日志中找到详细的错误信息。
  • JobManager Logs:JobManager 负责调度作业,你可以在 JobManager 的页面中查看作业调度的详细日志。如果作业出现调度失败的问题,通常可以在这里找到相关的原因。

四、通过 Flink Web UI 辅助调试的具体步骤

为了帮助开发者更好地理解如何使用 Flink Web UI 来调试和优化作业,以下将介绍一个实际场景的调试步骤。

1. 确认任务状态

首先,打开 Flink Web UI,查看作业的状态。如果任务状态显示为 “Failed” 或 “Cancelled”,需要首先确认失败或取消的原因。

2. 检查作业失败原因

如果任务的状态为 Failed,首先需要确定失败的具体原因。在 Flink Web UI 中,点击 Failed 状态的作业名称,进入作业的详细页面。此时,你可以看到导致任务失败的日志信息,包括错误消息和异常堆栈。

2.1 查看作业图

在作业的 Job Graph(作业图) 部分,检查作业图中各个算子的状态。如果某个算子上出现了错误标记(如红色感叹号),可以点击该算子来查看它的详细信息,包括错误日志、子任务的状态等。这能帮助你快速找到问题算子。

2.2 分析子任务日志

如果某个顶点的执行失败了,你可以点击该顶点进入子任务页面,查看各个子任务的执行状态和日志。通常情况下,任务失败会伴随着异常堆栈信息,通过分析日志中显示的错误消息(如 NullPointerExceptionOutOfMemoryError 等),你可以判断是哪一部分代码导致了问题。

2.3 查看 TaskManager 日志

对于一些更复杂的错误(如 Task 失败、作业卡死等),可以进一步查看 TaskManager 的日志文件。在 Flink Web UI 的 TaskManagers 页面,点击相关 TaskManager 节点,进入该节点的详细信息页面,点击 Logs 查看具体的日志信息。这里的日志文件包含了 Task 的执行详情、错误日志以及系统级别的报错信息,可以帮助你找出更深层次的问题。

3. 检查性能问题

即使作业没有失败,有时你可能仍然遇到性能瓶颈或任务延迟过高的情况。以下是排查 Flink 性能问题的常见步骤:

3.1 检查吞吐量

Job Graph 页面上,你可以查看每个算子的吞吐量信息(以 records/second 为单位)。如果某个算子的吞吐量特别低,可能说明它是当前作业的瓶颈。

解决方法

  • 增加并行度:在 Flink 中,每个算子都可以配置并行度。你可以通过增加瓶颈算子的并行度来分担负载,从而提升吞吐量。
  • 优化算子逻辑:如果并行度已经较高,但吞吐量仍然很低,可能需要检查算子中的代码逻辑,确保其处理过程足够高效。比如,可以通过减少不必要的数据序列化、优化网络传输等来提高性能。
3.2 查看延迟

延迟 是衡量流处理作业实时性的重要指标。Flink Web UI 提供了延迟指标,可以帮助你分析数据从进入系统到被处理完成所需的时间。

如果延迟过高,可能说明某个算子处理时间过长或存在网络瓶颈。通常延迟过高会影响系统的实时性,尤其是在实时处理系统中,及时响应是关键。

解决方法

  • 优化数据传输:如果发现延迟主要集中在网络传输过程中,可以尝试优化数据的分发方式,例如使用更高效的序列化框架或调整 Flink 中的分区策略(Partitioning)。
  • 减少状态大小:如果某个算子在处理状态化操作时延迟较大,可能是状态(state)数据过大导致的。可以尝试减少状态大小或采用 RocksDB 等外部存储方式来减少内存消耗。
4. 检查容错与故障恢复

Flink 的容错机制通过 CheckpointSavepoint 来实现。查看 Checkpoint 是否正常执行是判断作业健壮性的重要手段。

4.1 检查 Checkpoint 状态

在 Web UI 中,点击作业的 Checkpoints 页面,查看最近的 Checkpoint 情况。如果 Checkpoint 成功率较低,可能说明作业的状态管理存在问题(如状态数据过大导致 Checkpoint 超时)。

解决方法

  • 优化 Checkpoint 配置:你可以调整 Checkpoint 的间隔时间、超时时间以及最大并行 Checkpoint 的数量,以确保作业在状态较大时仍能保持稳定的 Checkpoint 执行。
  • 分阶段保存状态:如果 Checkpoint 的状态数据过于庞大,可以尝试将作业中的状态划分为多个阶段,分别进行状态保存,减少单次 Checkpoint 的开销。
4.2 重启策略检查

在 Flink 中,作业失败后会按照配置的重启策略自动重启。你可以在作业的 Overview 页面中查看重启的次数和失败原因。如果作业频繁重启,说明问题较为严重,可能需要根据日志和异常堆栈进一步排查。

5. 调整并行度与资源配置

对于性能瓶颈或资源消耗过大的作业,调整并行度和 Task 的资源配置可以显著提升性能。

5.1 调整并行度

在 Flink 作业中,并行度(parallelism)直接影响每个算子并发处理的能力。你可以通过以下方式调整作业的并行度:

  • 作业级别:在提交作业时,可以通过 CLI 或配置文件指定全局并行度。命令如下:

    flink run -p <并行度> <jar文件>

  • 算子级别:可以为每个算子设置不同的并行度,代码示例如下:

    dataStream.map(new MyMapper()).setParallelism(4);

通过分析 Flink Web UI 中的各个算子性能指标,你可以逐个调整算子的并行度,找到合适的配置。

5.2 资源分配

Flink 允许你为每个 Task 分配不同的资源(如 CPU 和内存)。通过查看 Web UI 中各个 TaskManager 的资源使用情况,可以判断是否需要增加或减少资源配置。

调整资源的策略

  • 增加 Task Slot:如果某个 TaskManager 的 CPU 和内存使用率较低,而作业执行缓慢,可能是 Task Slot 分配过少。你可以在 Flink 配置文件中增加 Task Slot 的数量,提升并发度。
  • 增加 TaskManager 节点:当集群资源不足时,可以通过增加 TaskManager 节点来提升作业的执行效率。确保集群中每个 TaskManager 都有足够的计算资源以避免性能瓶颈。
6. 排查数据倾斜

在流式计算中,数据倾斜 是导致性能问题的常见原因之一。Flink 的某些操作(如 keyBy、partition)可能导致部分节点处理的数据量过大,从而造成性能瓶颈。你可以通过 Flink Web UI 查看各个算子子任务的处理量,判断是否存在数据倾斜。

解决方法

  • 优化分区策略:如果发现数据倾斜严重,可以尝试改变 Flink 中的分区策略。例如,通过 rebalance() 方法重新分配数据,或者选择其他负载均衡策略。
  • Hashing:对于 keyBy 操作,如果出现数据倾斜,可以选择使用自定义的哈希算法来重新分配 key,以达到更均匀的负载分布。
7. 作业的流处理 Watermark 问题

在流处理作业中,Watermark 用于处理乱序数据和事件时间。当 Watermark 的生成和传播出现问题时,可能会导致窗口计算不准确或延迟增大。

在 Web UI 中,你可以查看 Watermark 的传播情况。如果发现某个算子的 Watermark 传播异常,说明这个算子可能存在逻辑问题。

解决方法

  • 调整 Watermark 生成策略:如果 Watermark 延迟较大,可以尝试调整生成的策略。例如,使用固定延迟 (BoundedOutOfOrderness) 或自定义 Watermark 生成逻辑,确保 Watermark 能够准确反映事件时间。
  • 监控事件时间和处理时间:通过 Web UI 监控 Watermark 和处理时间的差异,可以帮助你判断作业是否能及时处理乱序数据。
8.使用自定义指标

Flink 支持自定义指标,可以帮助你收集和监控作业的特定信息。你可以在 Flink 作业中使用 MetricGroup API 来定义和注册自定义指标。

例如,你可以定义一个自定义指标来监控某个操作的平均处理时间:

 
public class MyOperator extends RichFlatMapFunction<String, String> {private transient Counter processedCount;private transient Histogram processingTime;@Overridepublic void open(Configuration parameters) throws Exception {processedCount = getRuntimeContext().getMetricGroup().counter("processed_count");processingTime = getRuntimeContext().getMetricGroup().histogram("processing_time", new HistogramConfiguration(0, 1000));}@Overridepublic void flatMap(String value, Collector<String> out) throws Exception {long startTime = System.nanoTime();// 处理逻辑long endTime = System.nanoTime();processingTime.update(endTime - startTime);processedCount.inc();out.collect(value);}
}

在 Flink Web UI 中,你可以查看这些自定义指标的实时数据和历史数据,以便更好地了解作业的性能和行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考系统分析师知识点十三:软件需求工程

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间为&#xff1a;11月9日。 倒计时&#xff1a;24天。 目标&#xff1a;优先应试&#xff0c;其次学习&#xff0c;再次实践。 复习计划第一阶段&#xff1a;扫平基础知识点&#xff0c;仅抽取有用信息&am…

FPGA采集adc,IP核用法,AD驱动(上半部分)

未完结&#xff0c;明天补全 IP核&#xff1a;集成的一个现有的模块 串口写好后基本不会再修改串口模块内部的一些逻辑&#xff0c;将串口.v文件添加进来&#xff0c;之后通过他的上层的接口去对他进行使用&#xff0c;所以我们打包IP&#xff0c;之后就不用去添加源文件了&a…

仿 Mac 个人网站开发 |项目复盘

一、前言 1.1 灵感来源 早年有幸看到国外大佬做的一个 基于 Web 的 Windows XP 桌面娱乐系统, 那时刚好有搭建一个个人博客的想法, 所以就想是否可以基于 WEB 实现一个仿 Mac UI 的个人博客, 以应用的形式来展示博客各个功能! 1.2 相关链接(求个 Star) 前端开源代码后端开源…

Linux之实战命令32:chroot应用实例(六十六)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

ali 231普通滑块82y版本

有需求可以联系博主 let v Died_in2021

【含开题报告+文档+PPT+源码】基于人脸识别的课堂考勤系统的设计与实现

开题报告 随着科技的不断发展&#xff0c;人脸识别技术已经逐渐渗透到各个领域&#xff0c;包括教育领域。传统的课堂考勤方式通常依赖于学生签到或教师手动记录&#xff0c;这种方式存在着许多不足之处&#xff0c;例如容易出现人为错误、耗费时间和资源等。为了解决这些问题…

诺贝尔经济学奖历史名单数据集(1969-2024年)

2024年诺贝尔经济学奖授予了达龙阿西莫格鲁&#xff08;Daron Acemoglu&#xff09;、西蒙约翰逊&#xff08;Simon Johnson&#xff09;和詹姆斯A罗宾逊&#xff08;James A. Robinson&#xff09;&#xff0c;以表彰他们在理解制度如何影响经济发展方面的贡献。&#xff08;“…

jmeter用csv data set config做参数化

在jmeter中&#xff0c;csv data set config的作用非常强大&#xff0c;用它来做批量测试和参数化非常好用。 csv data set config的常用配置项如下&#xff1a; Variable Names处&#xff0c;写上源文件中的参数名&#xff0c;用于后续接口发送请求时引用 Ignore first line…

泰克MDO3054示波器特性和规格Tektronix MSO3054 500M 四通道

Tektronix MDO3054 示波器&#xff0c;混合域&#xff0c;500 MHz&#xff0c;4 通道&#xff0c;5 GS/s 泰克 MDO3054 混合域示波器是终极 6 合 1 集成示波器&#xff0c;包括可选的集成频谱分析仪、任意函数发生器、逻辑分析仪、协议分析仪和数字电压表/计数器。泰克 MDO305…

python项目实战——下载美女图片

python项目实战——下载美女图片 文章目录 python项目实战——下载美女图片完整代码思路整理实现过程使用xpath语法找图片的链接检查链接是否正确下载图片创建文件夹获取一组图片的链接获取页数 获取目录页的链接 完善代码注意事项 完整代码 import requests import re import…

Java算术运算符 C语言的二维数组初始化

1. //算术运算符 public static void main(String[] args) {System.out.println(3.25.01);//若有小数参与&#xff0c;有可能不精确System.out.println(5-1);System.out.println(5*2);System.out.println(10.0/3);//这里不精确System.out.println(10%2);System.out.println();…

2024.10月16日- Vue.js(1)

一 VUE概述与环境搭建 1.1 Vue概述 1.1.1 简介 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款轻量级的用于构建用户界面的 渐进式的JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高…

Vivado - Aurora 8B/10B IP

目录 1. 简介 2. 设计调试 2.1 Physical Layer 2.2 Link Layer 2.3 Receiver 2.4 IP 接口 2.5 调试过程 2.5.1 Block Design 2.5.2 释放 gt_reset 2.5.3 观察数据 3. 实用技巧 3.1 GT 坐标与布局 3.1.1 选择器件并进行RTL分析 3.1.2 进入平面设计 3.1.3 收发器布…

堆排序(C++实现)

参考&#xff1a; 面试官&#xff1a;请写一个堆排序_哔哩哔哩_bilibiliC实现排序算法_c从小到大排序-CSDN博客 堆的基本概念 堆排实际上是利用堆的性质来进行排序。堆可以看做一颗完全二叉树。 堆分为两类&#xff1a; 最大堆&#xff08;大顶堆&#xff09;&#xff1a;除根…

Java-IO流使用场景

Java IO 流是Java编程中非常重要的组成部分,用于处理文件读写、网络通信等数据传输任务。 1. 字节流 1.1 读取文件 import java.io.FileInputStream; import java.io.IOException;public class ReadFileExample {public static void main(String[] args) {try (FileInputSt…

Unity实现自定义图集(一)

以下内容是根据Unity 2020.1.0f1版本进行编写的   Unity自带有图集工具,包括旧版的图集(设置PackingTag),以及新版的图集(生成SpriteAtlas)。一般来说,unity自带的图集系统已经够用了,但是实际使用上还是存在一些可优化的地方,例如加载到Canvas上的资源,打图集不能…

PyQt 入门教程(3)基础知识 | 3.2、加载资源文件

文章目录 一、加载资源文件1、PyQt5加载资源文件2、PyQt6加载资源文件 一、加载资源文件 常见的资源文件有图像与图标&#xff0c;下面分别介绍下加载资源文件的常用方法 1、PyQt5加载资源文件 2、PyQt6加载资源文件 PyQt6版本暂时没有提供pyrcc工具&#xff0c;下面介绍下在不…

雷池社区版本SYSlog使用教程

雷池会对恶意攻击进行拦截&#xff0c;但是日志都在雷池机器上显示 如何把日志都同步到相关设备进行统一的管理和分析呢&#xff1f; 如需将雷池攻击日志实时同步到第三方服务器, 可使用雷池的 Syslog 外发 功能 启用 Syslog 外发 进入雷池 系统设置 页面, 配置 Syslog 设置…

北京京恋在喧嚣的都市中助你邂逅自己的爱情

北京的夜晚&#xff0c;灯火璀璨&#xff0c;车水马龙。刘凡站在他位于国贸的公寓阳台上&#xff0c;望着眼前熙熙攘攘的街道&#xff0c;心中却有一丝落寞。32岁的他&#xff0c;是一家知名互联网公司的中层管理&#xff0c;事业有成&#xff0c;收入稳定&#xff0c;甚至朋友…

anaconda(jupyter)安装教程

目录 一、下载anaconda安装包 二、安装程序 三、怎么使用 四、把jupyter界面语言修改成中文 一、下载anaconda安装包 anaconda官网&#xff1a;下载 Anaconda Distribution |蟒蛇 清华大学开源软件镜像站官网&#xff1a;清华大学开源软件镜像站 | Tsinghua Open Source M…