这几年,在整个大数据领域,Flink可算是火得一塌糊,不但将阿里Blink中的大部分特性merge到社区的Flink中,使得Flink在流式实时计算领域更是一骑绝尘,让其他实时计算框架只能望其项背,目前Flink根本经看不到其他的对手!同时Flink新版本又完美的兼容Hive,使得Flink在离线计算也快马加鞭,飞速赶超,完美实现批流统一,甚至很多有人称2020年为批流统一元年!

一、什么是Flink
  • Flink简介

image.png

Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态计算。可部署在各种集群环境,对各种大小的数据规模进行快速计算。

  • Flink的历史

早在 2008 年,Flink 的前身已经是柏林理工大学一个研究性项目, 在 2014 被 Apache 孵化器所接受,然后迅速地成为了 ASF(Apache Software Foundation)的顶级项目之一。

Flink的商业公司 Data Artisans,位于柏林的,公司成立于2014年,共获得两轮融资共计650万欧。该公司旨在为企业提供大规模数据处理解决方案,使企业可以管理和部署实时数据,实时反馈数据,做更快、更精准的商业决策。目前,ING, Netflix 和 Uber 等企业都通过 Data Artisans 的 Apache Flink 平台部署大规模分布式应用,如实时数据分析、机器学习、搜索、排序推荐和欺诈风险等。

2019年1月8日,阿里巴巴以 9000 万欧元收购该公司!

image.png

二、Flink的特点
  • 批流统一

  • 支持高吞吐、低延迟、高性能的流处

  • 支持带有事件时间的窗口(Window)操作

  • 支持有状态计算的Exactly-once语义

  • 支持高度灵活的窗口(Window)操作,支持基于time、count、session窗口操作

  • 支持具有Backpressure功能的持续流模型

  • 支持基于轻量级分布式快照(Snapshot)实现的容错

  • 支持迭代计算

  • Flink在JVM内部实现了自己的内存管理

  • 支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

三、传统Lambda架构的存在的问题

image.png

  • 冗余存储
    数据将会存储在多个系统中,增加冗余存粗。

  • 维护成本高
    每个系统的数据格式不一致,数据需要做转换,增加维护成本,尤其是当业务到达一定量级时,维护成本剧增。

  • 学习成本高
    多个系统之前需要完全打通,不同的产品有不同的开发方式,尤其是针对新人来说,需要投入更多的精力去学习多种系统,增加学习成本。

四、Flink与其他框架的对比
框架 优点 缺点
storm 低延迟 吞吐量低、不能保证exactly-once、编程API不丰富
Spark Streaming 吞吐量高、可以保证exactly-once、编程API丰富 延迟较高
Flink 低延迟、吞吐量高、可以保证exactly-once、编程API丰富 快速迭代中,API变化比较快

image.png

image.png

  • spark streaming

Spark就是为离线计算而设计的,在Spark生态体系中,不论是流处理和批处理都是底层引擎都是Spark Core,Spark Streaming将微批次小任务不停的提交到Spark引擎,从而实现准实时计算,SparkStreaming只不过是一种特殊的批处理而已。

image.png

Spark Streaming存在的问题

  1. 处理延迟较高

  2. 对状态的支持不完美

  3. 对窗口的支持不灵活

  4. 不支持EventTime

image.png

  • Flink

Flink就是为实时计算而设计的,Flink可以同时实现批处理和流处理,Flink将批处理(即有有界数据)视作一种特殊的流处理。

image.png

image.png

五、Flink架构简介

image.png

  • JobManager:

也称之为Master,用于协调分布式执行,它用来调度task,协调检查点,协调失败时恢复等。Flink运行时至少存在一个master,如果配置高可用模式则会存在多个master,它们其中有一个是leader,而其他的都是standby。

  • TaskManager:

也称之为Worker,用于执行一个dataflow的task、数据缓冲和Data Streams的数据交换,Flink运行时至少会存在一个TaskManager。JobManager和TaskManager可以直接运行在物理机上,或者运行YARN这样的资源调度框架,TaskManager通过网络连接到JobManager,通过RPC通信告知自身的可用性进而获得任务分配。

SparkStreaming和Flink的角色对比

Spark Streaming Flink

DStream

DataStream

Trasnformation

Trasnformation
Action Sink
Task SubTask
Pipeline

Oprator chains

DAG

DataFlow Graph

Master + Driver

JobManager

Worker + Executor

TaskManager

转自:https://www.cnblogs.com/weiyiming007/p/15830590.html