1.Flink简介

1.Flink简介

1.1 离线批计算与实时流计算


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

Flink图1
图1
  • 批计算
    针对有界流,由于在产出计算结果前可以看到整个(完整)数据集,因而如下计算都可实现,对数据排序,计算全局统计值,对输入数据的整体产出最终汇总聚合报表。
  • 流计算
    针对无界流,由于永远无法看到输入数据的整体(数据的输入永远无法结束),只能每逢数据到达就进行计算,并输出“当时”的计算结果(因而计算结果也不会是一个一次性的结果,而是源源不断的无界的结果流)
Flink图2
图2

Flink是一个以流为核心的高可用,高性能的分布式计算引擎。具备流批一体、高吞吐、低延迟、容错能力、大规模复杂计算等特点,在数据流上提供数据分发、通信等功能。

  • 数据流
    所有产生的数据都天然带有时间概念,把事件按照时间顺序排列起来,就形成了一个事件流,也被称作数据流。

  • 流批一体
    首先必须明白什么是有界数据和无界数据

    • 有界数据
      有界数据就是在一个确定的时间范围内的数据流,有开始,有结束,一旦确定就不会再改变,一般批处理用来处理有界数据,如图1的bounded stream。
    • 无界数据
      无界数据就是持续产生的数据流,数据是无限的,有开始,无结束,一般流处理用来处理无界数据,如图1的unbounded stream。

    Flink的设计思想是以流为核心,批是流的特例,擅长处理无界和有界数据,Flink提供精确的时间控制能力和有状态计算机制,可以轻松应对无界数据流,同时提供窗口处理有界数据流,所以被称为流批一体。

  • 容错能力
    在分布式系统中,硬件故障、进程异常、应用异常、网络故障等异常无处不在,Flink引擎必须保证故障发生后不仅可以重启应用程序,还要确保其内部状态保持一致,从最后一次正确的时间点重新出发。
    Flink提供集群级容错和应用级容错能力

    • 集群级容错
      Flink与集群管理器紧密连接,如YARN、Kubernetes,当进程挂掉后,自动重启新进程接管之前的工作,同时具备高可用性,可消除所有单点故障。
    • 应用级容错能力
      Flink使用轻量级分布式快照,设计检查点(checkpoint)实现可靠容错。

    Flink利用检查点特性,在框架层面提供 Exactly-once 语义,即端到端的一致性,确保数据仅处理一次,不会重复也不会丢失,即使出现故障,也能保证数据只写一次。

1.3 Flink的架构

Flink架构分为技术架构和运行架构两部分。

如下图为Flink技术架构
Flink图3

Flink 作为流批一体的分布式计算引擎,必须提供面向开发人员的API层,同时还需要跟外部数据存储进行交互,需要连接器,作业开发、测试完毕后,需要提交集群执行,需要部署层,同时还需要运维人员能够管理和监控,还提供图计算、机器学习、SQL等,需要应用框架层。

如下图为Flink运行架构
Flink图4

Flink 集群采取 Master - Slave 架构,Master的角色为 JobManager,负责集群和作业管理,Slave的角色是 TaskManager,负责执行计算任务,同时,Flink 提供客户端 Client 来管理集群和提交任务,JobManager 和 TaskManager 是集群的进程。

(1)Client

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

(2)JobManager

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

(3)TaskManager

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

1.4 Flink的特性

适用于几乎所有流式数据处理场景
  • 事件驱动型应用
  • 流、批数据分析
  • 数据管道及ETL
Flink图5
自带状态管理机制
Flink图6
强大的准确性保证
  • Exactly-once 状态一致性
  • 事件时间处理
  • 专业的迟到数据处理
灵活丰富的多层API
  • 流、批数据之上的SQL查询
  • 流、批数据之上的TableAPI
  • DataStream流处理API、DataSet批处理API
  • 精细可控的processFunction
Flink图7
规模弹性扩展
  • 可扩展的分布式架构
  • 支持超大状态管理
  • 增量checkpoint机制
Flink图8
算子粒度的独立并行度灵活配置(槽位资源可扩展、算子任务实例可扩展)
强大的运维能力
  • 弹性实施部署机制
  • 高可用机制
  • 保存点恢复机制
优秀的性能
  • 低延迟
  • 高吞吐
  • 内存计算