每天5分钟Flink – Flink介绍:架构与模型

今天是 Flink 系列的开篇作!

准备从 Flink 入手的原因是,无论是机器学习算法方向还是大数据方向,Flink 的势头越来越猛,也越来越受到业界的青睐。

该系列会从 Flink 的简单介绍到最后的实际应用,进行通述。

目标:通过每天一小会儿,熟悉 Flink 的方方面面

第一篇:《每天5分钟Flink – 介绍:Flink架构与模型》

Flink的流计算时代

在处理大数据流方面,从最开始的 Storm,到后面的 Spark,再到现在的 Flink。

每一次技术的迭代和更新都有其重要的原因。

Storm 稍有没落之意,但是现在 Spark 和 Flink,几乎平分天下。Flink 更具有侵占流计算这一块的势头。

目前,无论是 BAT 还是 TMD,都在大力推进 Flink 的部署。而同时 Flink 社区和 GitHub 也成为最活跃的项目之一。

Flink构建实时数仓天然优势

相比于传统 T+1 构建数据仓库,Flink 可以做到从 Source – Transformations – Sink 的数据 ETL 过程,而传统的 ETL 过程是需要将清洗后的数据加载到 HDFS 中或者其他存储介质中,再进行 SQL 计算,最后到 BI 平台展示。

每天5分钟Flink - Flink介绍:架构与模型

另外, Flink 天然的优势使得在流计算这一块更具有可靠的数据处理保证:

  • 状态管理 – 数据在进行 Transformer 的阶段进行各种聚合计算的时候,Flink 会自动进行状态的管理;
  • 丰富 API – Flink 提供了不同层级的 API,包括 Streaming API、Batch API 和 Flink SQL;
  • 生态完善 – 作为通用实时流处理引擎,提供不同的 Source 和 Sink,包括 Kafka、ES、JDBC 等;
  • 批流一体 – Flink 在批流一体的 API 方面进行了高度统一。

在事件驱动型方面的优势:

  • 状态管理 – Flink 自带的 State Backend 特性对于存储中间状态信息非常完善;
  • 窗口支持 – Flink 支持滚动窗口、滑动窗口、Session窗口及其他窗口;
  • 时间语义 – Flink 支持 Event Time、Processing Time 和 Ingestion Time;
  • 不同级别容错 – Flink 支持 At Least Once 或 Exactly Once 容错级别。

Flink架构分层模型

Flink 在不同的层级都提供了丰富的 API,在流式处理和批处理以及 SQL 方面都是非常友好的。

每天5分钟Flink - Flink介绍:架构与模型

Flink目前支持 4 层抽象,最常用的是在 Core API 的使用,Streaming API 和 Batch API 的使用。

另外,在 SQL 方面已经逐渐成熟,极大推动高效开发。

Flink数据流模型

以官网的一幅图来进行说明:

流(Streams):每一个数据流始于一个或多个 Source,中间进行计算转换(Transformations),包括Map、KeyBy、window等等,最终止于一个或多个 Sink。

这样,整个一条流进行结束。

每天5分钟Flink - Flink介绍:架构与模型

如上图,咱们拿大数据中最为经典的 wordcount 案例来描述:

  • 流入(Source):Stream 流从 Source 流入
  • 转换(Transformation)
    • 中间经历了map映射,将每个元素赋值为 1,即:(element, 1)
    • keyBy操作:将每个元素进行分组
    • window:限定数据流窗口大小
    • apply:聚合操作,比如求和
  • 流出(Sink):将结果数据存储到某介质

上述转换(Transformation)根据具体的业务情况也会有更多的数据转换操作。

上图中展示的单并行度的数据流方式,在我们实际业界的使用,一般来说是集群的方式,少则几十台机器组成的集群,多则成千上万台机器同时进行数据流的处理。

这就涉及到数据流并行处理的问题,在不同的算子计算过程中,可以设置并行度(Parallelism),而这一点也是在实际工作中一项重要的调参优化方向。

如下图进行说明:

每天5分钟Flink - Flink介绍:架构与模型

相较于单结点的计算流程,多并行度数据处理会涉及很多注意的点,这个后面会有详细说明。

数据流的来源是多个 Source,在多并行度的算子上,比如说Map,是可以多并行度同时处理。

而到了 KeyBy / window / apply 的算子操作上,是一定会经历 suffer 阶段,数据流进行重新分配。

最后 Sink 进行输出。

Flink的窗口与时间以及其他高级特性

Flink 在处理流式数据的时候,由于流是无限的(无界的),一定会涉及到窗口的概念,比如说每十分钟计算PV、UV。

另外,窗口的驱动形式,可以是时间驱动(例如每1秒),也可以是数据量驱动(例如每100条数据)。

当前 Flink 支持了多种窗口模型, 包括滚动窗口、滑动窗口、会话窗口等。

滚动窗口:Tumbling Windows

如下图:每个窗口不重叠

image-20210916130003413

滑动窗口:Sliding Windows

如下图:每个窗口会重叠,窗口大小不变。

每天5分钟Flink - Flink介绍:架构与模型

此外,Flink 支持了各种时间语义。

  • 事件时间(Event Time)
  • 摄取时间(Ingestion Time)
  • 处理时间(Processing Time)

通常来说,实际数据摄取取的是事件本身的时间(Event Time)

总结

无论是流式处理还是微批处理,Flink 在当前时代的势头是越来越强,他的架构、完整并且易用的 API 都极大的推动开发效率。

另外,Flink 的算子操作、容错机制、Checkpoint、Exactly-once 状态一致性语义等等也是保障数据应用稳定性的重要因素。

以上所以说到的细节都会在后面的《每天5分钟Flink系列》进行系统描述。

备注:以上部分内容摘自官网:https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/learn-flink/overview/

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/2115/

转载文章受原作者版权保护。转载请注明原作者出处!

(4)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部