Flink基本原理 + WebUI说明 + 常见问题分析

news2024/10/2 8:20:57

Flink 概述

Flink 是一个用于进行大规模数据处理的开源框架,它提供了一个流式的数据处理 API,支持多种编程语言和运行时环境。Flink 的核心优点包括:

  1. 低延迟:Flink 可以在毫秒级的时间内处理数据,提供了低延迟的数据处理能力。
  2. 高吞吐:吞吐量巨大。
  3. 分布式计算:Flink 支持分布式计算,它可以在大规模集群上运行,并提供了高可用和容错机制。
  4. 流式数据处理:Flink 基于流式数据处理模型,支持实时数据处理和数据增量更新。
  5. 事件驱动:Flink 的计算引擎是基于事件驱动的,它使用消息传递机制来处理数据。

Flink 的数据处理流程

Flink 的数据处理流程包括以下几个步骤:

  1. 数据输入:Flink 可以从各种数据源中读取数据,如 Kafka、HDFS 等。
  2. 数据转换:Flink 可以使用 DataStream API 或 SQL API 对数据进行转换和处理。
  3. 数据分区:Flink 可以根据数据的属性或规则对数据进行分区,以便在分布式集群上进行处理。
  4. 数据传输:Flink 可以使用网络传输机制将数据传输到其他节点或进程。
  5. 数据输出:Flink 可以将处理后的数据写入到各种数据存储中,如 Kafka、HDFS 等。

Flink架构解析

Flink 运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。
[图片]

JobManager

类似于司令官,分配工作给干活的士兵(TaskManager),听取士兵的汇报,当士兵失败时做出恢复等反应。
JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:

  • ResourceManager
  • ResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的基本单位。
  • Dispatcher
  • Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每一个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。
  • JobMaster
  • 1个JobMaster 负责管理1个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。
    始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby(请参考 高可用(HA))。

TaskManager

TaskManager(也称为 worker):执行JobManager分配过来的任务,并向JobManager汇报。taskManager之间也会交换数据
TaskManager中会有一到多个task slot, task slot是资源调度的最小单位, task slot 的数量表示并发处理task的数量。假设1个task有N个算子,那么执行这个task的slot 就会执行N个算子(直到结束)。

Client

Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。

Task和算子(Operator)

非分布式场景

在这里插入图片描述
假设程序目前需要依次经过以下算子:source->map->keyBy->window->apply->Sink,如果每个算子都用1个线程执行的话,一共有多达6个线程,不仅导致线程间切换、缓冲数据会有不小的开销,还降低了吞吐量。
为降低线程切换、缓冲的开销,Flink会把可以在同一个线程中执行的算子,链在一起,我们管他叫“算子链”。如图有3个算子链:source+map是1个算子链,keyBy+window+apply是1个算子链,sink是一个。每个算子链会由1个Task来执行。
统计下数量:共有3个Task,会占用3个Task Slot执行。
线程数从6缩减成3个,降低了线程间切换、缓冲数据的开销。
把哪些算子“链”在一起,是可以配置的。

分布式场景

[图片]

分布式场景下,工作会有多个taskManager共同完成工作。如图所示,当前并行度为2.
统计下数量:共有5个Task,每个Task会被分配到1个Task Slot上执行,所以会占用5个Slot。
所以Task Slot的数量,决定了可以并行执行多少个Task。

Task Slots 和资源

1个TaskManager下的task slots共享CPU资源,但内存会分开。
1个TaskManager都是一个 JVM 进程,这导致TaskManager下的slot会共享TCP连接和心跳信息。

Task Slot共享解决阻塞问题

继续上面的例子,1个Task被分配到1个Slot中:
[图片]

这样会有1个问题:只有Source\Map拿到数据后,keyBy操作才能开始处理,这会导致keyBy所在算子有可能空闲。
为解决这样一个问题,Flink使用了Slot共享:slot被多个Task共享,如下图:
[图片]

通过Slot共享,将示例中的基本并行度从 2 个增加到 6 个,让每个Slot都可以执行Source算子,这样Source所在的Slot就不会阻塞别的Slot了。这样可以充分利用Slot的资源,同时确保繁重的Task们在 TaskManager 之间公平分配。

小总结:

1. Flink通过将多个算子链在一起,减少了线程之间的切换开销
2. 将任务分配到多个TaskManager上,提高了处理的速度
3. 最后通过Slot共享,确保Slot之间不会阻塞,充分让Slot忙碌起来。

WebUI界面+常见问题排查思路

通过Web UI,可以看到TaskManager、Slot的数量用于速度调优,也可以查看日志用于问题排查。
Flink的Web UI界面的地址是http://localhost:8081,其中localhost是JobManager的主机地址,8081是JobManager的Web UI端口号。在浏览器中输入这个地址,就可以访问Flink的Web UI界面了。

集群概览:查看任务是否正常运行、资源是否需要扩容
[图片]

点击1个Job查看Job详情:
在这里插入图片描述

点击1个算子查看算子详情:查看数据倾斜、反压等性能问题
[图片]

TaskManager:可以查看TaskManager的日志排查问题,注意蛋疼的是问题不一定出现在哪个TaskManager上。
[图片]

JobManager:
[图片]

Flink 的容错机制

Flink 的容错机制是通过 Checkpointing 实现的。Checkpointing 允许用户在处理流式数据时定期保存状态,以便在出现故障时恢复状态。Flink 的容错机制包括以下几个步骤:

  1. 定义 Checkpointing 策略:用户需要定义 Checkpointing 的频率和保存状态的位置。
  2. 触发 Checkpointing:在处理数据时,Flink 会根据定义的 Checkpointing 策略触发 Checkpointing。
  3. 恢复状态:在出现故障时,Flink 会根据保存的 Checkpointing 恢复状态。

Flink 的应用场景

Flink 可以应用于多种场景,如:

  1. 实时数据处理:Flink 可以用于实时数据处理,如实时监控、实时分析等。
  2. 数据清洗:Flink 可以用于数据清洗,如数据去重、数据清洗等。
  3. 数据分析:Flink 可以用于数据分析,如数据统计、数据挖掘等。
  4. 数据集成:Flink 可以用于数据集成,如数据同步、数据迁移等。

Flink常见算子

Flink 的常见算子包括:

  1. Source:从上游收集数据
  2. Sink:发送数据给下游
  3. Map:对输入数据进行转换操作,如数据清洗、数据格式化等。
  4. FlatMap:对输入数据进行扁平化操作,将一个数据项转换为多个数据项。
  5. Filter:对输入数据进行筛选操作,只保留符合条件的数据项。
  6. KeyBy:对输入数据进行分组操作,根据指定的键对数据进行分组。
  7. Reduce:对输入数据进行聚合操作,将多个数据项聚合为一个数据项。
  8. Window:对输入数据进行窗口操作,将数据按照指定的窗口大小进行分组。
  9. Union:对多个输入数据进行合并操作,将多个数据集合并为一个数据集。
  10. Split:对输入数据进行分裂操作,将一个数据集分裂为多个数据集。
  11. Join:对多个输入数据进行连接操作,将多个数据集按照指定的键进行连接。
  12. SQL:对输入数据进行 SQL 查询操作,使用 SQL 语句对数据进行查询和分析。
    这些算子可以组合使用,以实现更复杂的数据处理逻辑。

总结

Flink 是一个用于进行大规模数据处理的开源框架,它提供了一个流式的数据处理 API,支持多种编程语言和运行时环境。Flink 的核心特点包括流式数据处理、事件驱动、分布式计算、低延迟等。Flink 的核心组件包括 DataStream API、SQL API、Stateful Stream Processing、Checkpointing 等。Flink 的数据处理流程包括数据输入、数据转换、数据分区、数据传输、数据输出等。Flink 的状态管理是通过 Stateful Stream Processing 实现的,它允许用户在处理流式数据时维护状态。Flink 的容错机制是通过 Checkpointing 实现的,它允许用户在处理流式数据时定期保存状态,以便在出现故障时恢复状态。Flink 可以应用于多种场景,如实时数据处理、数据清洗、数据分析、数据集成等。

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

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

相关文章

架构(十五)Java字节码增强

一、引言 一般如果需要做增强类的架构工具会使用SpringBoot提供的切面,但是这逃不开两个问题:1、使用方需要加注解代码;2、版本更新导致的发布。 所以java还提供了字节码层面的增强方案,对使用的系统是无感的。 二、字节码增强选…

数独游戏(dfs)

代码注释如下 #include <iostream> using namespace std; const int N 10; bool col[N][N], rol[N][N], cell[3][3][N]; char g[N][N]; bool dfs(int x, int y) { //用bool这样在找到一个方案就可以迅速退出if(y 9) x, y 0; //若y超出边界&#xff0c;则第二…

李沐动手学习深度学习——3.6练习

本节直接实现了基于数学定义softmax运算的softmax函数。这可能会导致什么问题&#xff1f;提示&#xff1a;尝试计算exp(50)的大小。 可能存在超过计算机最大64位的存储&#xff0c;导致精度溢出&#xff0c;影响最终计算结果。 本节中的函数cross_entropy是根据交叉熵损失函数…

人工智能指数报告2023

人工智能指数报告2023 主要要点第 1 章 研究与开发第 2 章 技术性能第 3 章 人工智能技术伦理第 4 章 经济第 5 章 教育第 6 章 政策与治理第 7 章 多样性第 8 章 舆论 人工智能指数是斯坦福大学以人为本的人工智能研究所&#xff08;HAI&#xff09;的一项独立倡议&#xff0c…

基于 LLaMA 和 LangChain 实践本地 AI 知识库

有时候,我难免不由地感慨,真实的人类世界,本就是一个巨大的娱乐圈,即使是在英雄辈出的 IT 行业。数日前,Google 正式对外发布了 Gemini 1.5 Pro,一个建立在 Transformer 和 MoE 架构上的多模态模型。可惜,这个被 Google 寄予厚望的产品并未激起多少水花,因为就在同一天…

STM32 中断流程介绍

STM32可以产生中断的事件多种多样&#xff0c;比如&#xff1a;定时器时间结束、串口接收到数据、某个GPIO检测到电平变化等等等等。 1、STM32 gpio 中断处理流程介绍 1、从引脚进入的高低电平首先由输入驱动器处理&#xff0c;如下图 2、经过输入驱动器处理后的信号会进…

BUUCTF---[极客大挑战 2019]LoveSQL1

1.题目描述 2.一般遇到登录&#xff0c;用户名会尝试admin&#xff0c;密码会尝试万能密码" or 11#或者 or 11#。这里尝试了第一种&#xff0c;但是不对。 3.接着尝试第二种 or 11#。提示登录成功了说明这里是单引号注入&#xff0c;并给了一串字符 4.sql注入题一般会设计…

获取linuxIP、内存、cpu、磁盘IO等信息的Shell脚本及其讲解

shell基础知识 1.grep grep是一个在Unix和Unix-like系统上使用的命令行工具&#xff0c;用于在文本文件中搜索匹配指定模式的行。它的名字来自于"global regular expression print"&#xff08;全局正则表达式打印&#xff09;的缩写。grep的基本用法是通过指定一个…

神经网络之万能定理python-pytorch实现,可以拟合任意曲线

神经网络之万能定理python-pytorch实现&#xff0c;可以拟合任意曲线 博主&#xff0c;这几天一直在做这个曲线拟合的实验&#xff0c;讲道理&#xff0c;网上可能也有很多这方面的资料&#xff0c;但是博主其实试了很多&#xff0c;效果只能对一般的曲线还行&#xff0c;稍微…

设计模式——中介者模式(mediator pattern)

概述 如果在一个系统中对象之间的联系呈现为网状结构&#xff0c;如下图所示。对象之间存在大量的多对多联系&#xff0c;将导致系统非常复杂&#xff0c;这些对象既会影响别的对象&#xff0c;也会被别的对象所影响&#xff0c;这些对象称为同事对象&#xff0c;它们之间通过彼…

智慧市容环境卫生管理信息系统建设项目初步设计参考指南

第四章项目建设方案 梳理和编制数据标准规范&#xff0c;为数据体系建设提供建设指导。数据标准规范体系是根据统一市容环卫基础数据资源建立的&#xff0c;从要素分类、编码、符号、制图、更新机制等层 面解决各类规划标准不衔接、各自为政问题。标准规范体系包括&#xff1…

数据挖掘入门项目二手交易车价格预测之数据分析

文章目录 1. 相关库的引入2. 数据的加载3. 数据概况3.1 统计值查看3.2 查看数据类型 4. 判断缺失值4.1 统计每一列空值的数量4.2 可视化缺失值数量 5. 判断异常值5.1 异常值检测 6. 了解预测值的分布6.1 统计各预测值的分布6.2 总体分布概况6.2 查看预测值的具体频数6.3 查看sk…

HTTPS的实现原理

图片来源&#xff1a;HTTPS 详解一&#xff1a;附带最精美详尽的 HTTPS 原理图 - 个人文章 - SegmentFault 思否 加密流程按图中的序号分为&#xff1a; 客户端请求 HTTPS 网址&#xff0c;然后连接到 server 的 443 端口 (HTTPS 默认端口&#xff0c;类似于 HTTP 的80端口)。…

双周回顾#006 - 这三个月

断更啦~~ 上次更新时间 2023/11/23, 断更近三个月的时间。 先狡辩下&#xff0c;因为忙、着实忙。因为忙&#xff0c;心安理得给断更找了个借口&#xff0c;批评下自己~~ 这三个月在做啥&#xff1f;跨部门援助&#xff0c;支援公司互联网的 ToC 项目&#xff0c;一言难尽。 …

【随记】分享第1期(2024.03.02)

记录这段时间&#xff0c;看到的有趣/有用/值得分享的东西 灵感来源&#xff1a;分类&#xff1a;周刊 - 阮一峰的网络日志 (ruanyifeng.com) 文章目录 大佬博客实用工具文章文摘 大佬博客 云风的 BLOG (codingnow.com) 美团技术团队 (meituan.com) 计算机科学 – 刘未鹏 | Mi…

可以用来测试的接口

实际开发过程中&#xff0c;我们可以通过postman工具来测试接口 get请求 https://api.github.com/events?id1&nameuser post请求 http://httpbin.org/post 参数1&#xff1a;key1value1 参数2&#xff1a;key2value2

springboot238光影视频

光影视频平台 摘 要 使用旧方法对光影视频平台的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在光影视频平台的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开…

第二讲:用geth和以太坊交互

一&#xff1a;安装geth brew install ethereum geth github网址&#xff1a; https://github.com/ethereum/go-ethereum 二&#xff1a; 用geth连接以太坊 以太坊有主网络&#xff08;Ethereum Mainnet&#xff09;&#xff0c;有测试网络&#xff08;Sepolia、Goerli 等等…

打基础!张宇《30讲》vs 武忠祥《基础篇》

张宇老师和武忠祥老师的课程都很推荐&#xff0c;两个老师也都很有实力 我在考研的时候跟的是张宇老师&#xff0c;然后强化阶段跟的是武忠祥老师&#xff0c;我真实的听过两个老师的课程&#xff0c;所以我觉得我有一些发言权。因此对大家在考研数学备考选择老师方面&#xf…

单细胞Seurat - 降维与细胞标记(4)

本系列持续更新Seurat单细胞分析教程&#xff0c;欢迎关注&#xff01; 非线形降维 Seurat 提供了几种非线性降维技术&#xff0c;例如 tSNE 和 UMAP&#xff0c;来可视化和探索这些数据集。这些算法的目标是学习数据集中的底层结构&#xff0c;以便将相似的细胞放在低维空间中…