Flink技术架构

Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能。Flink将流处理和批处理统一起来,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。

Flink特点

  • 支持高吞吐、低延迟、高性能的流处理
  • 支持有状态计算的Exactly-once语义
  • 支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作
  • 支持基于轻量级分布式快照(Snapshot)实现的容错
  • 一个运行时同时支持Batch on Streaming处理和Streaming处理
  • Flink在JVM内部实现了自己的内存管理
  • 支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存
  • 支持迭代计算

Flink组件栈

image

  • Flink以层级式系统形式组件其软件栈、上层依赖下层服务
  • 支持 local、cluster、cloud运行模式
  • 运行时,将dataStream 和 dataSet抽象成jobGraph

Flink进程

  • JobManagers(master):用于协调分布式程序执行。它们用来调度task,协调检查点,协调失败时恢复等
  • TaskManagers(worker):用于执行一个dataflow的task(或者特殊的subtask)、数据缓冲和data stream的交换。
  • flink应用程序的执行流程图——standalone image
  • flink应用程序的执行流程图——flink on yarn image

Flink程序的核心概念

  • flink程序三个基本构建块

    • source:数据源
    • transformations:基于数据流的一组operate操作
    • sink:数据处理结果的目的地 image
  • 并行数据流

    • 在flink中,transformation是由一组operator组成,每一个operator被分割成operator subtask,同一个operator的多个 subtasks在不同的线程、不同的物理机或不同的容器中彼此互不依赖得并行执行。
    • Stream在operator有两种形式
      • One-to-one:类似于spark中的窄依赖
      • Redistributing:类似于spark中的宽依赖

    image

  • operator chains

    出于分布式程序效率考虑,Flink将前后有依赖关系的一组operator的subtask链接在一起形成operator chains。operator chain在一个线程中执行,它能减少线程之间的切换和基于缓存区的数据交换,在减少时延的同时提升吞吐量。链接的行为可以在编程API中进行指定

    image

  • 窗口

    flink可以基于窗口对在流上对数据进行聚合操作。flink支持的窗口有:

    • 时间窗口(tumbing windows(不重叠),sliding windows(有重叠,session windows(有空隙的活动)) image
    • 数据窗口(tumbing windows(不重叠),sliding windows(有重叠,session windows(有空隙的活动))
    • 事件窗口
  • 时间

    Stream中的记录时,记录中通常会包含各种典型的时间字段,Flink支持多种时间的处理:

    • event Time:表示事件创建时间
    • Ingestion Time:表示事件进入到Flink Dataflow的时间
    • Processing Time:表示某个Operator对事件进行处理事的本地系统时间(是在TaskManager节点上)
    • image

参考:http://shiyanjun.cn/archives/1508.html

猜你喜欢

转载自blog.csdn.net/believe2017slwx/article/details/79978244