写点什么

10 分钟了解 Flink

用户头像
代码诗人
关注
发布于: 2020 年 05 月 29 日
10分钟了解Flink

1、WHY Flink



从google趋势看,flink 从2015年迅速崛起, 近两年spark 和hadoop 一直在下降,flink 却保持良好的增长



趋势。Flink 为什么越来越受欢迎,来看下 flink 的几个优势。

1)、 高吞吐、低延迟、纯流式

2)、支持对乱序时间的处理

3)、有状态、提供exactly-once 语义

4)、高度灵活窗口机制

5)、失败恢复、故障转移、水平扩展

6)、批处理、流处理统一API

2、HOW Flink



Checkpooint 容错



Checkpoint是Flink实现容错机制最核心的功能,它能够根据配置周期性地基于Stream中各个

Operator/task的状态来生成一个轻量级的分布式快照,从而将这些状态数据定期持久化存储下来,当Flink

程序一旦意外崩溃时,重新运行程序时可以有选择地从这些快照进行恢复,从而修正因为故障带来的程序数

据异常。默认情况下,检查点不会保存,仅用于从失败中恢复作业。取消程序时会删除它们。但是,您可以

配置要保存的定期检查点。根据配置 ,当作业失败或取消时,不会自动清除这些保存的检查点。这样,如

果您的工作失败,您将有一个检查点可以从中恢复。



Flink 实现了一个轻量级的分布式快照机制,其核心点在于 Barrier。 Coordinator 在需要触发检查点的时候要求数据源注入向数据流中注入 barrie, barrier 和正常的数据流中的消息一起向前流动,相当于将数据流中的消息切分到了不同的检查点中。当一个 operator 从它所有的 input channel 中都收到了 barrier,则会触发当前 operator 的快照操作,并向其下游 channel 中发射 barrier。当所有的 sink 都反馈收到了 barrier 后,则当前检查点创建完毕。



在此过程中会涉及到对齐操作,一些 operator 拥有多个 input channel,它往往不会同时从这些 channel 中接收到 barrier。如果 Operator 继续处理 barrier 先到达的 channel 中的消息,那么在所有 channel 的 barrier 都到达时,operator 就会处于一种混杂的状态。在这种情况下,Flink 采用对齐操作来保证 Exactly Once 特性。Operator 会阻塞 barrier 先到达的 channel,通常是将其流入的消息放入缓冲区中,待收到所有 input channel 的 barrier 后,进行快照操作,释放被阻塞的 channel,并向下游发射 barrier。



State状态管理



按照组织形式可划分为, Managed State Raw State



Managed State,这类State的内部结构完全由Flink runtime内部来控制,包括如何将它们编码写入到checkpoint中等等。

Raw State,这类State就比较显得灵活一些,它们被保留在操作运行实例内部的数据结构中。从Flink系统角度来观察,在checkpoint时,它只知道的是这些状态数据是以连续字节的形式被写入checkpoint中。等待进行状态恢复时,又从字节数据反序列化为状态对象。



按照数据划分为 Keyed State Operator State



在Flink中如何使用State





Window窗口机制



窗口类型:

滚动窗口,窗口间元素无重复

滑动窗口:窗口间的元素可能重复

session window(会话窗口)

global window(全局窗口)



Flink 中 Window 可以将无限流切分成有限流,是处理有限流的核心组件,现在Flink 中 Window 可以是时间驱动的(Time Window),也可以是数据驱动的(Count Window),如下图所示:





上图中,基于时间的窗口操作,在每个相同的时间间隔对Stream中的记录进行处理,通常各个时间间隔内的窗口操作处理的记录数不固定;而基于数据驱动的窗口操作,可以在Stream中选择固定数量的记录作为一个窗口,对该窗口中的记录进行处理。



用户头像

代码诗人

关注

文艺程序员 2019.08.30 加入

优雅代码诗

评论

发布
暂无评论
10分钟了解Flink