【基础篇】一、什么是Flink

文章目录

  • 1、Flink是什么
  • 2、有界流和无界流
  • 3、有状态流处理
  • 4、Flink的特点
  • 5、Flink对比SparkStreaming
  • 6、Flink的应用场景
  • 7、Flink的分层API

1、Flink是什么

Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。官网主页地址:https://flink.apache.org

Flink核心目标就是:数据流上的有状态计算(Stateful Commputations over Data Streams)

展开解释就是:

  • 数据流:一个个水滴连起来组成水流,把一个个水滴看成一条条数据,就是数据流

  • 有状态:即可以把一些中间的计算结果或者数据本身存储起来

  • 最后,这是用来做数据计算和处理的

【基础篇】一、什么是Flink_第1张图片

如上图,数据进入Flink(这些数据可以是交易、日志等实时数据,也可以是数据库或文件系统里的数据),处理完以后再流向需要数据的地方,比如应用或下游数据库。最后,所谓事件驱动型应用,即有数据来了就干活儿,没数据了就歇着。最后,了解下Flink发展历史:

【基础篇】一、什么是Flink_第2张图片

2、有界流和无界流

无界数据流:

【基础篇】一、什么是Flink_第3张图片

  • 有定义流的开始,但没有定义流的结束
  • 它们会无休止的产生数据
  • 无界流的数据必须持续处理,即数据被摄取后需要立刻处理,我们不能等到所有数据都到达再处理,因为输入是无限的。
有界数据流:

【基础篇】一、什么是Flink_第4张图片

  • 有定义流的开始,也有定义流的结束
  • 有界流可以在摄取所有数据后再进行计算
  • 有界流所有数据可以被排序,所以并不需要有序摄取
  • 有界流处理通常被称为批处理

再举个有界流的例子,水桶下面钻个孔,让水往外流,桶里的流光了,就停了,不会无休止的流,这就是一个有界流。对应到计算机世界,就像读取一个文件,文件大小固定,读完所有数据再处理也行,是有界的。而来自Kafka的数据,生产者服务不挂,它就源源不断有数据往队列走,这就是无界流。

3、有状态流处理

把流处理需要的额外中间数据保存成一个"状态",然后针对这条数据进行处理,并且更新状态。这就是"有状态的流处理"。

状态既指数据结果本身,也指一些中间数据,比如你蹲马路边上,数过往的车辆,过一辆你就在纸上记个1,再过一辆你就记2,1和2就是一个状态。又或者你写正字,写了一会儿数了一下,一共5划,这个5也是一个状态。

【基础篇】一、什么是Flink_第5张图片

对应到Flink上来:外部数据1进来,Flink做个求和运算,然后内部存储下这个1的值,也把这个处理完的值输出到下游

【基础篇】一、什么是Flink_第6张图片
接着2这条数据又进入了Flink,求和完是3,3被Flink存储,也流向下游。且这些状态(数据)也会定期持久到远程存储。

【基础篇】一、什么是Flink_第7张图片

4、Flink的特点

低延迟、高吞吐、结果的准确性和良好的容错性

  • 高吞吐和低延迟:每秒处理数百万个事件,毫秒级延迟

  • 结果的准确性:Flink提供了事件时间 (event-time)处理时间(processing-time) 语义。对于乱序事件流,事件时间语义仍然能提供一致且准确的结果

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

  • 可以连接到最常用的外部系统,如Kafka、Hive、JDBC、HDFS、Redis等

  • 高可用:本身高可用的设置,加上与K8s,YARN和Mesos的紧密集成,再加上从故障中快速恢复和动态扩展任务的能力,Flink能做到以极少的停机时间7X24全天候运行

名词解释:

关于事件事件和处理事件的理解,23:59:59发生的事件的数据,计算完后到了00:00:01,是算今天还是算昨天。而有事件时间,就始终知道它是昨天发生的。

5、Flink对比SparkStreaming

Spark以批处理为根本

  • Spark数据模型:Spak 采用RDD模型,Spark Streaming 的DStream 实际上也就是一组组小批数据RDD的集合
  • Spark运行时架构:Spatk 是批计算,将DAG 划分为不同的 stage,一个完成后才可以计算下一个

【基础篇】一、什么是Flink_第8张图片

Flink以流处理为根本

  • Flink数据模型:Flink 基本数据模型是数据流,以及事件(Event) 序列
  • Flink运行时架构:Flink 是标准的流执行模式,一个事件在一个节点处理完后可以直接发往下一个节点进行处理

【基础篇】一、什么是Flink_第9张图片

对比项 Flink SparkStreaming
计算模型 流计算 微批处理
事件语义 事件时间和处理时间 处理时间
窗口 多、灵活 少、不灵活,窗口必须是批次的整数倍
状态
流式SQL

关于表中一些解释:

  • 比如设置Spark3秒一批,一批一批处理,Flink则是来一条处理一条

  • 关于有状态和无状态:中间状态Flink自己会存储,而Spark则需要借助外部存储,比如MySQL、Redis

  • 关于流式SQL:对于前面提到的Kafka,Flink可以写SQL去处理,Spark没这种SQL

6、Flink的应用场景

  • 电商和市场营销:实时数据报表、广告投放、实时推荐
  • 物联网IOT:传感器实时数据采集和显示、实时报警,交通运输业
  • 物流配送:订单状态实时更新、通知信息推送
  • 银行和金融业:实时结算和通知推送,实时检测异常行为

【基础篇】一、什么是Flink_第10张图片

关键词:实时。来条数据就处理了,可不就是实时的嘛。

7、Flink的分层API

这个分层API,就像Spring框架,你直接用给你定义好的注解很方便,但活动范围也小了。而使用底层的那些扩展接口,复杂,但灵活,可实现的范围广。这就是:越顶层,越抽象(越封装),使用越方便。越底层,越具体,使用越灵活。
【基础篇】一、什么是Flink_第11张图片
DaaStream API(流处理)和DataSet API(批处理)封装了底层处理函数,提供了通用的模块,比如转换 (tansformations,包括map、flatmap等),连接(joins),聚合 (aggregations),窗口(windows)操作等。注意: Flink1.12以后, DataStream API已经实现真正的流批一体,所以DataSet API已经过时。

你可能感兴趣的:(Flink,flink,大数据)