BigData | 优秀的流处理框架 Flink

?  Index

  • Flink核心模型介绍

  • Flink的架构介绍

  • Flink与Spark的异同之处

? Flink核心模型介绍

Apache Flink就是其中的翘楚,它采用了基于操作符(operator)的连续流模型,可以做到微秒的延迟。Flink最核心的数据结构是Stream,它代表一个运行在多个分区上的并行流,它没有边界,随着时间的增长而不断变化,而且它是逐条进行操作的,每当有新数据进行就会被执行,这也是Flink低延迟的根本。

当一个Flink程序被执行的时候,会被映射为Streaming Dataflow,如下图:

640?wx_fmt=png

图来自极客时间

其中,Streaming Dataflow由 Operator以及Stream组成,Transformation Operator把一个或多个Stream转换成Stream,一个Stream可以包含多个分区(Stream Partitions),一个操作符可以被分成多个操作符子任务,每个子任务在不同的线程或者不同的机器节点中独立执行。

Stream与Operator之间传输数据有两种形式:

  • One-to-One(一对一):Stream维护着分区以及元素的顺序,每个操作符与Stream之间一一对应。

  • Redistributing(重新分布):Stream中数据的分区会发生改变,操作符的每一个子任务把数据发送到不同的目标子任务。

? Flink的架构介绍

Flink的架构如下图所示:

640?wx_fmt=png

图来自极客时间

同样的,这架构也是大致分成4层:存储层、部署层、核心处理引擎层、high-level的API和库

  • 存储层:兼容多种主流文件系统,如HDFS、Amazon S3,多种数据库,如HBase,多种数据流,如Kafka、Flume等

  • 部署层:支持本地运行,还可以在独立集群或者被YARN或Mesos管理的集群上运行,也可以部署在云端

  • 核心处理引擎:其实就是Streaming Dataflow,因为所有的程序都会被映射成这种形式来执行

  • High-Level:核心API就是DataSet API以及DataStream API,一个用来做批处理、一个用来做流处理

? Flink与Spark的异同之处

Flink的诞生总是有原因的,简单来说因为它统一了批处理和流处理,并且对于实时计算可以实现微秒级别的输出。

与Spark一样的地方

  • 基于内存计算

  • 都有统一的批处理和流处理API

  • 都支持SQL编程

  • 都支持多种转换操作,如map、filter、count、groupBy等等

  • 都有完善的错误恢复机制

  • 都支持Exactly One的语义一执行

与Spark不一样的地方

  • Spark虽然也支持流处理,但是其实也还是批处理,因为它只是把流处理当成了window很小的批处理,所以延迟性得不到保证;而Flink是基于每个事件去处理,每当由新数据进来的时候就会马上执行,延迟上明显优于Spark

  • 虽然都支持SQL编程,但Spark提供的SparkSQL会在使用性能上更优,而Flink提供的Table API仍有很大的进步空间,如相应的优化、扩展和性能方面

  • 生态圈方面,Spark会明显优于Flink

? Spark和Flink的适用场景

在下面的场景,可以优先使用Spark:

  • 数据量大而且业务逻辑复杂的批处理,并且对计算效率有很高要求

  • 基于历史数据的交互式查询

  • 对实时流数据处理,延迟仅仅需要数百毫秒到数秒之间

在下面的场景,可以优先使用Flink:

  • 对延迟要求很高的实时数据处理场景,如实时日志报表

? References

  • 百度百科

  • 蔡元楠-《大规模数据处理实战》21小节 —— 极客时间

    更多大数据的原创文章 ?   

如果觉得不错~

欢迎点击右下角的 “在看” 鼓励鼓励~

顺便扫码关注一下哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值