Flink介绍

Flink是一个(批流统一的)框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。


Flink的特点

事件驱动(Event-driven)

传统关系型事务处理(关系型数据库的交互):用户发起数据请求,经过后台处理流程读取或者写入关系型数据库,最终得到结果,返回给用户,触发一个操作。



事件驱动:用户有数据产生日志,这些日志先收集起来读取到Flink内部,存到本地状态里,本地状态为了保证容错做了一个定期的存盘放在远程的持久化存储空间里,在通过本地状态和当前读入数据的计算,得出一个结果直接输出到对应的输出事件日志里或者触发一个操作。(数据流:数据像水流一样来【不能指定什么时候开始什么时候结束】,当启动任务后,等在那里,来一个数据做一次计算)


基于流的世界观

在Flink的世界观中,一切都是由流组成的,离线数据是有界的流;实时数据是一个没有界限的流(这就是所谓的有界流和无界流)。


容易使用的分层API

越顶层越抽象,表达含义越简明,使用越方便
越底层越具体,表达能力越丰富,使用越灵活


  • SQL/Table API(最高级的API):使用简单,里面的方法容易理解,直观看的话都是表操作,可以直接写SQL,容易实现简单需求
  • DataStream API(核心API):数据流API,处理无界流和实时计算。能获取到数据流里数据的各种信息,还能做窗口相关的操作和精细控制。
  • ProcessFunction API(最底层的API):能做的事情更多,能拿到每个事件,状态(支持自定义状态)和时间(支持自定义定时事件)。

支持事件时间(event-time)和处理时间(processing-time)语义

支持精确一次(exactly-once)的状态一致性保证

出现故障后也保证恢复结果的正确

低延迟,高吞吐

理论上可以实现毫秒级的延迟,而且每秒处理数百万个事件

与众多常用存储系统做方便的连接

高可用、动态扩展,真正实现7x24小时全天候运行

Flink和Spark Streaming的对比

流和微批

Spark Streaming也是用来做实时处理的,特点也是实时、延迟比较低。Spark Streaming的延迟是秒级的(攒批、划分数据集来计算),Flink是毫秒级别的延迟。Spark Streaming是微批处理(micro-batching)-把流式数据当做特殊的批,Flink才是真正的流处理(来一个处理一个)。如果要用Flink做批计算要把流转成有界流。

数据模型

Spark采用RDD【Resilient Distributed Datase】模型(弹性分布式数据集),Spark Streaming的Dstream实际上也是一组组小批数据的RDD集合
Flink基本数据模型是数据流(Data Flow),以及事件(Event)序列。

运行时架构

Spark是批计算,Spark的转换算子和行动算子将DAG划分为不同的Stage,一个Stage完成后才可以计算下一个。(不同的分区和节点处理有先后,当前节点已经处理完了,但是别的没处理完就还得等当前Stage结束才能进行下一步计算【中间还要做shuffle和一些其他的调整,不能直接打乱】)
Flink是标准的流执行模式,不用等待,一个事件在一个节点处理完后可以直接发往下一个节点进行处理

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容