前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >001. Flink产生的背景以及简介

001. Flink产生的背景以及简介

作者头像
CoderJed
发布2019-08-02 09:24:30
2K0
发布2019-08-02 09:24:30
举报
文章被收录于专栏:Jed的技术阶梯Jed的技术阶梯

1. 一些大数据计算相关的术语

  • 离线处理与实时处理

实时处理是指从数据产生到根据该数据计算的结果产生之间的这段延迟可以满足业务的需求,假如业务需求是延迟不超过10ms,而你的处理延迟为15ms,就不能算实时处理,而假如业务要求处理数据的延迟为30min,而你的数据可以在20min内计算出来,这也算实时处理。

离线处理是指数据计算的时间与线上的业务系统无关,换句话说,对时效性没有要求,啥时候得到计算结果对业务系统没影响。

  • 有界流与无界流

有界流有一个定义的开始和结束。在执行任何计算之前,可以通过摄取所有数据来处理有界流。处理有界流不需要有序摄取,因为有界数据集总是可以排序的。

无界流有一个开始,但没有定义的结束。它们不会在生成数据时终止并提供数据。必须连续处理无边界流,即,事件在被摄入后必须立即处理。等待所有输入数据到达是不可能的,因为输入是无界的,并且不会在任何时间点完成。处理无界数据通常需要以特定的顺序接收事件,例如事件发生的顺序,以便能够推断出结果的完整性。无界流是一种不断增长的,本质上无限的数据集。这些通常被称为“流数据”。

  • 批处理与流处理

处理有界流的计算称之为批处理,处理无界流的结算称之为流处理。

  • 一个问题?流处理一定是实时处理吗?批处理一定不是实时处理吗?

不一定,假如流处理的延迟满足不了业务系统的需求,即使它一直在处理无界数据,它也不是实时计算,假如连续的批处理可以满足业务系统对时效性的需求,它就是实时计算,SparkStreaming是一个典型的可以做到使用批处理来完成实时计算的引擎。

最终总结: 离线和实时应该指的是:数据处理的延迟; 批量和流式指的是:数据处理的方式。

2. 四代计算引擎的比较

(1) 计算方式

  • MapReduce:批处理引擎,为其他计算引擎提供了大数据处理的核心思想,即map、reduce
  • Storm:流计算引擎,为了满足更高的实效性而产生
  • Spark:集流式处理和批处理于一身的统一的计算引擎,基于内存计算,提高了性能
  • Flink:集流式处理和批处理于一身的统一的计算引擎,吸收了以上3个框架的优点并改进后的计算框架

可以看出,计算引擎由批处理向流处理发展,由一个组件干一个事向一个组件可以干全部事的方向转变,一代代计算引擎的发展,它们追求的目标是:更通用,更高效,更优雅,更易用的一栈式(可以批处理,可以流处理)的计算引擎。

一个好的组件,一个可以满足开发者使用的组件,它的发展趋势一定是更易用,更高效,有更好的UI(可以使用页面操作代替手工写代码),而且一个重要的点,一定需要支持SQL。

(2) 为什么Flink会产生?

MapReduce作为初代计算引擎,它最大的价值在于提供了一种分布式计算的核心思想,map和reduce,但随着业务中海量的无限数据集越来越普遍,使用为无限数据流处理而设计的系统处理数据的场景越来越多,MapReduce的局限性也突显出来。

于是Storm应运而生,但是作为第一代的流式计算引擎,Storm有以下缺点:

  • 使用Clojure(基于JVM)语言开发,这意味着你如果想看看源码,可能得多学一门语言
  • Storm本身还存在一些bug,生产上发生过集群崩溃的事件
  • 不具备一些流处理中需要的高级功能,例如exactly once等

阿里试图用Java重写Storm并进行优化,取得了一些成果,但是没有坚持下去,因为期间Flink就产生了,阿里转向对Flink的改进以及优化。阿里巴巴为什么选择Apache Flink?

Spark集批处理,流处理,SQL功能,图计算,机器学习于一身,并且支持SparkR和PySpark来做科学计算,可以说是当下最完美的一套计算引擎,基于内存的计算大大提高了计算效率,目前社区活跃度很高,是目前最流行的计算引擎。

Flink与Spark类似,具有Spark拥有的全部功能,那么在有Spark的前提下,我们为什么还需要Flink?

Spark与Flink最大的不同在于核心理念的不同,Spark所有的组件都是基于它的核心模块SparkCore而开发,而SparkCore是用于批处理的,也就是说,Spark认为,批处理是数据处理的常态,把流处理作为批处理的一种特殊情况来看待,于是,SparkStreaming是利用连续的微批处理来模拟实时处理。

而Flink认为,流处理是常态,批处理是流处理的一种特殊情况,在无界流中去某段范围内的全量数据进行处理就是批处理,于是Flink把核心放在流处理上,实现了一些高级的也是必须的功能,例如数据状态、事件时间、分布式快照、watermark等。

那么这两种理念到底哪一种是正确的呢?事实上,应该是Flink的理念更符合自然状态,我们生活中的数据,其实都是流数据,淘宝从上线开始就一直产生数据,我们不知道什么时候可以拿到全量数据,某家超市从营业开始就一直会有交易,我们也不知道什么时候可以拿到全部数据,当然,超市倒闭后可以拿到全量数据,但你却不知道它什么时候倒闭.....

事实上,Spark也意识到自己在流处理这个模块中确实做得不够好,于是新增了Structured Streaming这个模块来实现比较完备的,具有一些高级功能的流处理引擎,但是,Structured Streaming的很多功能又与Flink的功能如出一辙...

于是乎,Flink来了,悄悄的来了,虽然目前Flink还是没有Spark火,但我们有理由相信,这个计算引擎终将会占据一个核心的位置。

3. Flink介绍

Flink诞生于欧洲的一个大数据研究项目StratoSphere。该项目是柏林工业大学的一个研究性项目。早期,Flink是做批处理的,但是在2014年,StratoSphere里面的核心成员孵化出Flink,同年将Flink捐赠给Apache,并在后来成为Apache的顶级大数据项目,同时Flink将计算的主流方向定位为流处理,即用流式计算来做所有大数据的计算,这就是Flink技术诞生的背景。

Flink是什么?Stateful Computations over Data Streams,有状态的流式计算引擎。

Flink核心特性

  • Streaming-first,流处理引擎
  • Fault-tolerant,容错,可靠性,checkpoint
  • Scalable,可扩展性,1000节点以上
  • Performance,性能,高吞吐量,低延迟
  • 支持高吞吐、低延迟、高性能的流处理
  • 支持带有事件时间的窗口操作
  • 支持高度灵活的窗口操作,支持基于time、count、session,以及data-driven的窗口操作
  • 支持具有Backpressure功能的持续流模型
  • 支持基于轻量级分布式快照(Snapshot)实现的容错
  • 同时支持Batch on Streaming处理和Streaming处理
  • 在JVM内部实现了自己的内存管理
  • 支持迭代计算
  • 支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存
  • 低延时:提供ms级时延的处理能力
  • Exactly Once:支持有状态计算的Exactly-once语义,提供异步快照机制,保证所有数据真正处理一次
  • HA:JobManager支持主备模式,保证无单点故障
  • 水平扩展能力:TaskManager支持手动水平扩展

Hadoop 兼容性:

  • 支持Yarn,能够从HDFS和HBase中获取数据
  • 能够使用所有的Hadoop的格式化输入和输出
  • 能够使用Hadoop原有的Mappers和Reducers,并且能与FLink的操作混合使用
  • 能够更快的运行Hadoop作业

Flink核心四大基石

  • Checkpoint
  • State
  • Time
  • Window

不多提了,开始学习Flink!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.07.31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 一些大数据计算相关的术语
  • 2. 四代计算引擎的比较
    • (1) 计算方式
      • (2) 为什么Flink会产生?
      • 3. Flink介绍
        • Flink核心特性
          • Hadoop 兼容性:
            • Flink核心四大基石
            相关产品与服务
            大数据
            全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档