手记

Flink技术架构

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

Flink特点

  • 支持高吞吐、低延迟、高性能的流处理

  • 支持有状态计算的Exactly-once语义

  • 支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作

  • 支持基于轻量级分布式快照(Snapshot)实现的容错

  • 一个运行时同时支持Batch on Streaming处理和Streaming处理

  • Flink在JVM内部实现了自己的内存管理

  • 支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

  • 支持迭代计算

Flink组件栈

  • Flink以层级式系统形式组件其软件栈、上层依赖下层服务

  • 支持 local、cluster、cloud运行模式

  • 运行时,将dataStream 和 dataSet抽象成jobGraph

Flink进程

  • JobManagers(master):用于协调分布式程序执行。它们用来调度task,协调检查点,协调失败时恢复等

  • TaskManagers(worker):用于执行一个dataflow的task(或者特殊的subtask)、数据缓冲和data stream的交换。

  • flink应用程序的执行流程图——standalone 

  • flink应用程序的执行流程图——flink on yarn 

Flink程序的核心概念

  • flink程序三个基本构建块

    • source:数据源

    • transformations:基于数据流的一组operate操作

    • sink:数据处理结果的目的地 

  • 并行数据流

    • One-to-one:类似于spark中的窄依赖

    • Redistributing:类似于spark中的宽依赖

    • 在flink中,transformation是由一组operator组成,每一个operator被分割成operator subtask,同一个operator的多个 subtasks在不同的线程、不同的物理机或不同的容器中彼此互不依赖得并行执行。

    • Stream在operator有两种形式

  • operator chains

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

  • 窗口

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

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

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

    • 事件窗口

  • 时间

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

    • event Time:表示事件创建时间

    • Ingestion Time:表示事件进入到Flink Dataflow的时间

    • Processing Time:表示某个Operator对事件进行处理事的本地系统时间(是在TaskManager节点上)


原文出处

0人推荐
随时随地看视频
慕课网APP

热门评论

幕课网没有关于flink的教程?什么时候能出一个呀

幕课网没有关于flink的教程?什么时候能出一个呀

查看全部评论