Apache Flink核心概念思维导图
2025-12-22 15:09:47 0 举报
AI智能生成
Apache Flink核心概念思维导图
作者其他创作
大纲/内容
概念
Apache Flink is a
framework and distributed processing engine
for
stateful computations over
unbounded and bounded
data streams.
framework and distributed processing engine
for
stateful computations over
unbounded and bounded
data streams.
Apache Flink 是一个
分布式大数据处理引擎,
可对有限数据流和无限数据流
进行有状态计算。
分布式大数据处理引擎,
可对有限数据流和无限数据流
进行有状态计算。
优势
批流统一
Runtime 和 SQL 层批流统一,提供高吞吐低延时计算能力和更强大的SQL支持。
生态兼容
与 Hadoop Yarn / Apache Mesos / Kubernetes 集成,并且支持单机模式运行。
部署灵活,Flink 底层支持多种资源调度器,包括 Yarn、Kubernetes 等。Flink 自身带的 Standalone 的调度器,在部署上也十分灵活。
性能卓越
性能卓越的批处理与流处理支持。
极高的可伸缩性,阿里巴巴双 11 大屏采用 Flink 处理海量数据,使用过程中测得 Flink 峰值可达 17 亿 / 秒。
极致的流式处理性能。Flink 相对于 Storm 最大的特点是将状态语义完全抽象到框架中,支持本地状态读取,避免了大量网络 IO,可以极大提升状态存取的性能。
规模计算
作业可被分解成上千个任务,分布在集群中并发执行。
01. 流式计算概念
Streaming Process Concepts
流式计算概念
流式计算概念
Bounded and Unbounded Data and Processing
有界/无界数据与处理
有界/无界数据与处理
Latency and Throughput
延迟与吞吐
延迟与吞吐
Batch processing
批处理
批处理
高吞吐
Streaming processing
流处理
流处理
低延迟
吞吐与延迟
Time Semantics
时间语义
时间语义
时间种类
Event Time
事件发生时间/数据的业务时间
数据乱序
Event-Time处理
Processing Time
被处理时的系统时间
Window
Trigger
处理窗口数据的触发器,定义何时(时机)启动应用程序定义的数据处理任务、让一个窗口内聚集后的结果对外可见等
Watermarks
数据乱序问题的处理
window+watermark
比如偏移为5秒的watermark策略,大小为10秒的窗口,为了能更好的理解watermark,我们作如下类比,数据发生的时间空间为A时间空间,watermark的时间空间为B时间空间,则B时间空间总比A时间空间晚5秒发生。
计算场景
滑动窗口 vs 滚动窗口
了解每个task产出的数据存于内存是个什么形式
比如只是计算pv这种指标,哪怕你是使用窗口大小为24hours的滑动窗口也是可取的,因为这个状态在内存当中只是一个聚合值,不怎么占内存,当然如果多维聚合,条数特别多也是另当别论。
如果是流量数据,做map操作,哪怕是使用10min的滚动窗口,内存可能就吃不消了(具体要看每个flink任务分配多少内存和核数),因为流量数据非常大,而且在内存当中是以明细的形式存在,这时候就会非常占用内存。
数据量大,时间跨度长,需要聚合数据
上滑动窗口,窗口大小可以大一点,因为状态不怎么占内存(多维度聚合值条数可能也很大,需要具体判断)。
数据量大,时间跨度长,且需要明细数据
一般使用较小窗口大小的滚动窗口,比如10s的滚动窗口,然后将这个窗口计算完的值存于持久化存储hbase当中,然后在进行下一个10s窗口的计算,那么这样状态也不会丢失,flink内存也只需要存储10s的状态就好。
数据量大,时间跨度长,需要去重累计
这种情况应该是流式计算里面最麻烦的一种情况了,但是确实又存在,比如计算天级的uv(按userid进行去重得到的指标)
这种情况,不能将状态直接聚合累计,因为它需要去重,因为要去重就要维护着整个时间跨度内的明细数据,但是这样又非常占用内存,看似非常矛盾的一件事情,该如何去解决。
有多种方法,使用Hbase或者Redis都可以实现,这里以hbase为例,比如现在需要按照stat_date(日期)维度计算uv指标,那么可以将MD5(start_date+userid)作为rowkey插入到hbase当中,那么如果是同样的start_date+userid记录插入到hbase当中,记录数是不会增加的,因为rowkey一定是全局唯一,这样就实现了去重,那么如何实现累计呢,累计其实就是将hbase里面符合的条数取出,自己写一个小方法,思路大概就是这样。Redis其实是一样的原理。
02. 架构
Architecture
架构
架构
Layered APIS
分层API
分层API
SQL/Table API(dynamic tables)
便捷度最高
DataStream API(stream, windows)
ProcessFunction(events, state, time)
表达能力最强
Components of a Flink Setup
Flink组件构成
Flink组件构成
Runtime架构
JobManager - also called Masters
负责协调整个集群的计算
TaskManagers - also called workers
Task Manager是在JVM中的一个或多个线程中执行任务的工作节点。
任务执行的并行性由每个 Task Manager 上可用的任务槽(Slot 个数)决定。每个任务代表分配给任务槽的一组资源。例如,如果 Task Manager 有四个插槽,那么它将为每个插槽分配 25% 的内存。
通过分配slot,可以提高资源的利用率,并且可以使一个Task中可以装下整个pipline从source到slink
Clients
Task Execution
Operators
Tasks
Setting Parallelism
Operator level
Execution Environment Level
Client Level
System Level(set parallelism in flink-conf.yaml)
Task Failure Recovery
Restart Strategies
Failover Strategies
Slots and Resources
03. 状态管理
State Management
What is State
有状态计算 VS 无状态计算
无状态计算指的是数据进入Flink后经过算子时只需要对当前数据进行处理就能得到想要的结果
有状态计算就是需要和历史的一些状态或进行相关操作,才能计算出正确的结果
比如去重、滑动窗口
状态是计算过程中的数据信息,在容错恢复和 Checkpoint 中有重要的作用,流计算在本质上是 Incremental Processing,因此需要不断查询保持状态;
为了确保 Exactly- once 语义,需要数据能够写入到状态中;而持久化存储,能够保证在整个分布式系统运行失败或者挂掉的情况下做到 Exactly- once,这是状态的另外一个价值。
状态管理的目标:易用、高效、可靠
State Backends
状态的存储
状态的存储
存储流程
顶层:放置Flink用户代码,例如,KeyedProcessFunction其中包含一些值状态的用户代码。这是一个简单的变量,其值状态注释使它可以在运行时自动容错,重新缩放和查询。
这些变量由位于堆上或磁盘上的已配置状态后端(RocksDB状态后端)提供支持,并提供数据局部性,与计算的接近性以及涉及到按记录计算的速度。最后,在进行升级时,将引入新功能或错误修复,并保持现有状态不变,这就是保存点的所在。
保存点是在逻辑时间点上应用程序的分布式全局状态的快照,并存储在外部分布式文件系统或Blob存储(例如HDFS或S3)中。在升级应用程序或实现代码更改(例如添加新的运算符或更改字段)后,Flink作业可以通过将应用程序状态从保存点重新加载到状态后端中进行重新启动,使其处于本地状态并可用于计算和继续处理,好像什么都没发生。
存储方式
RocksDBStateBackend
写时写入rocksDB->本地磁盘中
作业state比较大时,一般采用RocksDB
FsStateBackend
写也是写入TaskManager的jvm中,备份写入分布式文件系统中
写速度快、同时防止了数据的丢失,但依旧有本地jvm 内存大小的限制
MemoryStateBackend
内存
内存
TaskManager写到jvm中,备份时会写入JobManager内存中
单点限制、性能高,一般用来做测试、验证用
Kinds of state in Flink
状态类型
状态类型
Operator State
可以用于所有的算子
一个operator对应一个state
并发改变时需要选择分配方式,内置:1.均匀分配 2.所有state合并后再分发给每个实例
需要你实现CheckPointedFunction或ListCheckPointed接口
只支持 List state、Union List state、Broadcast state
Keyed State
只能应用在KeyedSteam上
每个key 对应一个 state,一个operator处理多个key,会访问相应的多个state
并发改变时,state随着key在实例间迁移
通过RuntimeContext访问,需要operator是一个richFunction
支持ValuedState、ListState、Reducing State、MapState、Aggregating State
示意图
Fault Tolerance
状态容错
状态容错
容错数据流向图
Check pointing
备份
备份
Checkpoint 是 Flink 实现容错机制的核心,它周期性的记录计算过程中 Operator 的状态,并生成快照持久化存储,备份至远程的分布式系统中。
Barriers
Exactly Once & At Least Once
Asynchronous State Snapshots
异步check point
异步check point
Checkpointing Algorithm(Chandy-Lamport)
checkpoint算法
checkpoint算法
Incremental Checkpointing
Save points
当 Flink 作业发生故障崩溃时,可以有选择的从 Checkpoint 中恢复,保证了计算的一致性。
State Rescalable
Queryable State
State Schema Evolution
State Processor API(read, write, and modify savepoints and checkpoints using Flink's batch DataSet API)
ValueState 单个值 update/get
MapState Map put/putAll/remove/contains/entries/iterator/keys/values
ListState List add/addAll/update/get
ReducingState 单个值 add/addAll/update/get
AggregatingState 单个值 add IN类型,get Out 类型
Flink DataStream
Setup Environment
设置环境
设置环境
Local And Remote
Source
配置数据源
配置数据源
Built-in Source(readTextFile,FromCollection,etc)
Custom Source
Transformations
数据处理
数据处理
Basic Transformations
Map
FlatMap
Filter
KeyedStream Transformations
KeyBy
Aggregations
Reduce
Multistream Transformations
Union
Connect,coMap,coFlatMap
Split&select
Distribution Transformations
Random
Round-Robin
Rescale
Broadcast
Global
Custom
Sink
输出
输出
Built-in Sink(WriteAsText, writeAsCsv, etc)
Custom Sink(addSink)
Data Types
Types
TypeInformation
Functions
Iterations
Time-Based and Window Operators
Time characteristics
参照01.Streaming Process Concepts
Assgin Timestamps and generating watermarks
ProcessFunction
TimeService and Timer
Emitting toSide Outputs
Windows
Window Assigners
Window Functions
Triggers
Evictors
Allowed Lateness
Side Output
Joining
Window Join
Tumbling Window Join
Sliding Window Join
Session Window Join
Interval Join
Async I/O
Flink Table API & SQL
Streaming Concepts
Dynamic Tables
Time Attributes
Processing Time
Event Time
Temporal Tables
Query Configuration
SQL
DDL
Create/Drop/Alter Table/Datebases/Function
Query
Operators(Select/Filter/Aggregations/Joins/etc.)
SQL Client
Table API
Java/ScalaTable API
Python Table API
Functions
Built-in Functions
Scalar Functions
Aggregate Functions
User Defined Functions
Scalar Functions
Table Functions
Aggregation Functions
Table Aggregation Fucntions
Connect to External Systems
Table Connectors
Table Formats
Table Schema
Update Modes
User-defined Table Sources & Slinks
Planners
Flink Planner
Blink Planner
Modules
Catalog
Register an External Catalog
Register Tables in Catalog
Hive Integration
Flink Deployment And Operations
Deployment Modes
Local Cluster
Standalone Cluster
YARN
Mesos
Docker
Kubernetes
HighAvailability
Standalone Cluster High Availability
YARN Cluster High Availability
Command-Line Interface
Job Submission
Job Management
Savepoints
Python REPL
Scala REPL
Security
Kerberos
SSL
File System
Local File System
Pluggable File Systems
子主题
HSFD and Hadoop File System Support
收藏
收藏
0 条评论
下一页