基础篇(一):Flink的定义、运行架构

一、 定义

Flink是一个分布式大数据处理引擎,可对有界或无界的数据流进行有状态或无状态的计算,具有低延迟、高吞吐、事件精确一次处理的特点。

对定义中的基本术语理解如下:

  • streams(数据流)
    有界数据流 是指批处理,无界数据流 是指实时流处理,flink实现了流批一体,它的世界观里一切皆是流

  • state(状态)
    状态计算 是指需要记录中间结果信息的计算操作,有状态的作用:
    1)输出多个事件处理后的结果,根据最新输入的事件及已存储的状态值,更新当前最新的状态值
    2)容错性 通过持久化存储,保证系统运行失败或者挂掉的情况下做到exactly-once
    无状态计算只关注当前输入的事件,即根据当前事件输出结果,显然flink更偏爱有状态计算

  • 流计算时增加了以下时间语义:
    1)event time 事件创建的时间,通常由事件消息里带的时间字段表示(业务最常用
    2)ingestion time 接入时间 指从flink source进来的时间
    3)process time 处理时间 指操作算子的本地服务器时间(默认使用)

  • API 通常分为三层
    基础篇(一):Flink的定义、运行架构_第1张图片

自下向上看:
ProcessFunction 最底层API,表达能力最强,过程函数process function 通常和DataStreamAPI结合使用,允许用户自由处理事件 如:用户可以指定时间语义注册定时器并处理回调,从而可以处理复杂的计算
DataStreamAPI 流处理API DataStreamAPI 处理无界流数据,DataSetAPI 处理有界数据集(还提供了额外的数据支持,如循环和迭代)
Table API/SQL Table API可以内嵌Java、Scala,以表为中心的声明式编程,遵循扩展的关系模型(表有schema),最高层级的抽象是SQL,可以通过SQL语句在TableAPI创建的临时表或者视图上操作

二、架构

  • flink在yarn上的部署方式
    1)per job模式 :运行一个单独的job,一旦job结束,flink集群停止,释放所有资源, 推荐在生产环境部署该模式,该模式应用提交流程如下
    基础篇(一):Flink的定义、运行架构_第2张图片
    提交应用指令:
    ./bin/flink run -m yarn-cluster ./path/to/job.jar
    -m yarn-cluster指定提交的主机为yarn集群,可以添加其它参数

    2)session模式:运行多个job,slot会出现共有,job之间的隔离性不好,该模式应用提交流程如下
    基础篇(一):Flink的定义、运行架构_第3张图片
    提交应用指令:
    #启动会话
    ./bin/yarn-session.sh
    #向会话提交作业
    ./bin/flink run ./path/to/job.jar

  • 运行组件

1)Jobmanager 作业管理器
一个application对应一个Jobmanager ,负责将应用程序作业图(JobGraph)转换成物理执行图(ExecutionGraph),分发到将要运行任务的TaskManager上,在任务执行中,同时负责协调操作,比如检查点(checkpoints)的协调

2)Taskmanager 任务管理器
一个Taskmanager至少有一个插槽(slot),slots数量决定了任务的并发数

3)ResourceManager 资源管理器
负责管理的Taskmanager的资源slots

4)Dispatcher 分发器
接收一个提交的应用时,会启动相应的作业管理器JobManager,在yarn的session模式部署时才会有该组件

  • 数据传输
    flink算子数据传输有两种形式:
    1、one-to-one 即按照顺序一对一传输,此类算子有map、filter、flatMap
    2、redistributing 一对多传输,类似spark中的shuffle

为了提升数据传输性能,flink引入任务链的优化技术,及一对一、并行度相同的算子可以合成一个子任务在一个slot(线程)上执行,类似于spark中的stage

三、使用场景

  • 实时数仓 通过实时ETL对数据清洗,然后写入下游的实时数仓,保证实时数据采集、实时数据处理及下游的实时查询
  • 实时推荐
  • 实时大屏、实时报表
  • 风控预警 将风控系统处理的各种复杂规则引入到DataStreamAPI或者ProcessFunction API中,当事件进入就会触发相应的规则,然后进行预警并发送到下游产生业务通知

你可能感兴趣的:(Flink,大数据,flink)