传统大数据处理框架的问题
在当前的互联网用户、设备、服务等激增的时代下,其产生的数据量非常大,Map Reduce、Spark等框架,在某些场景没法满足用户的需求,如下:
双十一,各家电商 如何 实时了解各个商品的购买量 ,将购买量高的商品推到首页,购买量低的商品移出首页
旅游景点 如何 实时掌握游客数量,防止出现安全事故
解决
需要 实时处理框架,每来一条数据,就处理一条
Flink介绍
应用场景
滴滴出行大量核心业务指标需要具备 实时监控 能力,比如安全指标监控,财务指标监控,投诉进线指标监控等
美团:
- 经营分析、运营分析、实时营销
- 推荐、搜索
- 风控、系统监控
- 安全审计
爱奇艺、抖音推荐:需要在 几秒内,根据用户的观看行为,实时推荐相关性更高的文章、视频,对数据的时效性要求更高
微博:内容监控
更多参见 链接
架构
JobClient
JobClient是Flink程序和JobManager交互的桥梁,主要负责接收程序、解析程序的执行计划、优化程序的执行计划,然后提交执行计划到JobManager。
JobManager
JobManager是一个进程,在接收到JobClient提交的执行计划之后,针对收到的执行计划,负责申请资源,协调以及控制整个job的执行过程,具体包括,调度任务、处理checkpoint、容错等等
一旦资源就绪,就调度task到TaskManager
另一主要工作是 checkpoint 容错
高可用
保证高可用,一般会有多个JobManager进程同时存在,它们之间也是采用主从模式,一个进程被选举为Leader,其他进程为follower。Job运行期间,只有Leader在工作,follower在闲置,一旦Leader挂掉,随即引发一次选举,产生新的Leader继续处理Job。
TaskManager
TaskManager是一个进程,主要作用是接收并执行JobManager发送的task,并且与JobManager通信,反馈任务状态信息。
在TaskManager内可以运行多个task。多个task运行在一个JVM内有几个好处:
- 首先task可以通过多路复用的方式TCP连接
- 其次task可以共享节点之间的心跳信息,减少了网络传输。
每个TaskManager像一个容器一样,包含一个多或多个Slot
Slot
是TaskManager资源粒度的划分,每个Slot都有自己独立的内存。所有Slot平均分配TaskManger的内存,
比如TaskManager分配给Solt的内存为8G,两个Slot,每个Slot的内存为4G,四个Slot,每个Slot的内存为2G
注意:Slot仅划分内存,不涉及cpu的划分。同时Slot是Flink中的任务执行器(类似Storm中Executor),每个Slot可以运行多个task,而且一个task会以单独的线程来运行。
Slot主要的好处:
- 可以起到隔离内存的作用,防止多个不同job的task竞争内存。
- Slot的个数就代表了一个Flink程序的最高并行度,简化了性能调优的过程
- 允许多个Task共享Slot,提升了资源利用率


