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

十念  金牌会员 | 2025-1-12 12:40:50 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 887|帖子 887|积分 2661

Flink 概述

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

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

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

  • 数据输入:Flink 可以从各种数据源中读取数据,如 Kafka、HDFS 等。
  • 数据转换:Flink 可以利用 DataStream API 或 SQL API 对数据进行转换和处理。
  • 数据分区:Flink 可以根据数据的属性或规则对数据进行分区,以便在分布式集群上进行处理。
  • 数据传输:Flink 可以利用网络传输机制将数据传输到其他节点或进程。
  • 数据输出: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个标题:只有SourceMap拿到数据后,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 的容错机制包括以下几个步骤:

  • 界说 Checkpointing 策略:用户必要界说 Checkpointing 的频率和保存状态的位置。
  • 触发 Checkpointing:在处理数据时,Flink 会根据界说的 Checkpointing 策略触发 Checkpointing。
  • 规复状态:在出现故障时,Flink 会根据保存的 Checkpointing 规复状态。
Flink 的应用场景

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

  • 实时数据处理:Flink 可以用于实时数据处理,如实时监控、实时分析等。
  • 数据洗濯:Flink 可以用于数据洗濯,如数据去重、数据洗濯等。
  • 数据分析:Flink 可以用于数据分析,如数据统计、数据挖掘等。
  • 数据集成:Flink 可以用于数据集成,如数据同步、数据迁徙等。
Flink常见算子

Flink 的常见算子包括:

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表