flink1.12.x 介绍

传统大数据处理框架的问题

在当前的互联网用户、设备、服务等激增的时代下,其产生的数据量非常大,Map Reduce、Spark等框架,在某些场景没法满足用户的需求,如下:

  1. 双十一,各家电商 如何 实时了解各个商品的购买量 ,将购买量高的商品推到首页,购买量低的商品移出首页

  2. 旅游景点 如何 实时掌握游客数量,防止出现安全事故

解决

需要 实时处理框架,每来一条数据,就处理一条

Flink介绍

官网:https://flink.apache.org/

应用场景

  • 滴滴出行大量核心业务指标需要具备 实时监控 能力,比如安全指标监控,财务指标监控,投诉进线指标监控等

  • 美团:

    • 经营分析、运营分析、实时营销
    • 推荐、搜索
    • 风控、系统监控
    • 安全审计
  • 爱奇艺、抖音推荐:需要在 几秒内,根据用户的观看行为,实时推荐相关性更高的文章、视频,对数据的时效性要求更高

  • 微博:内容监控

  • 更多参见 链接

架构

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,提升了资源利用率


原文出处:/show_1IX2NpEL27T0.html