1. 离线批计算与实时流式计算

批计算与流式计算,本质上就是对有界流和无界流的计算

flink 对应go flink -yt_开发语言

  YY-批计算

针对有界流;由于在产出计算结果前可以看到整个(完整)数据集,因而如下计算都可以实现:对数据排序,计算全局统计值,对输入数据的整体产出最终汇总聚合报表;

  YY-流计算

针对无界流;由于永远无法看到输入数据的整体(数据的输入永远无法结束),只能每逢数据到达就进行计算,并输出"当时"的计算结果(因而计算结果也不会是一个一次性的最终结果,而是源源不断的无界的结果流);

2 Flink基本概念

  一个分布式、有状态的实时流式处理系统(编程框架)                                                    

flink 对应go flink -yt_开发语言_02

 flink,主要使用java语言开发而成,但对用户提供了java、scala、python编程api flink,以流处理方式作为基础的世界观,并通过引入有界流来实现批计算,从而实现流批一体                              

3 Flink的运行时架构 

  YY-核心架构角色

flink 对应go flink -yt_数据_03

YY-Flink 集群采取 Master - Slave 架构: 

  • Master 的角色为 JobManager,负责集群和作业管理;
  • Slave 的角色是 TaskManager,负责执行计算任务;
  • 客户端 Client 负责管理集群和提交任务,JobManager 和 TaskManager 是集群的进程;

  YY-各角色主要职责说明 

(1)Client Flink

客户端是 F1ink 提供的 CLI 命令行工具,用来提交 Flink 作业到 Flink 集群,在客户端中负责 StreamGraph (流图)和 Job Graph (作业图)的构建。

(2)JobManager

JobManager根据并行度将Flink客户端提交的Flink应用分解为子任务,从资源管理器 ResourceManager 申请所需的计算资源,资源具备之后,开始分发任务到TaskManager 执行 Task,并负责应用容错,跟踪作业的执行状态,发现异常则恢复作业等。

(3)TaskManager

TaskManager 接收 JobManage 分发的子任务,根据自身的资源情况 管理子任务的启动、 停止、销毁、异常恢复等生命周期阶段。Flink 程序中必须有一个TaskManager。

4 Flink的特性

  YY-适用于几乎所有的流式数据处理场景

  • 事件驱动型应用
  • 流、批数据分析
  • 数据管道及ETL

flink 对应go flink -yt_数据_04

   YY-自带状态管理机制

flink 对应go flink -yt_数据_05

  YY-强大的准确性保证 

  •  exactly-once 状态一致性
  • 事件时间处理
  • 专业的迟到数据处理

  YY-灵活丰富的多层api

  • 流、批数据之上的SQL查询
  • 流、批数据之上的TableApi
  • datastream流处理算子api 、
  • dataset批处理算子api
  • 精细可控的processFunction

flink 对应go flink -yt_flink_06

   YY-规模弹性扩展

  • 可扩展的分布式架构(集群级别的资源规模灵活配置,算子粒度的独立并行度灵活配置)
  • 支持超大状态管理
  • 增量checkpoint机制

flink 对应go flink -yt_数据_07

 算子粒度的独立并行度灵活配置(集群槽位资源可扩展,算子任务实例可扩展)

 YY- 强大的运维能力

  • 弹性实施部署机制
  • 高可用配置
  • 保存点恢复机制  

YY-优秀的性能

  • 低延迟
  • 高吞吐
  • 内存计算