Flink系列-1、流式计算简介

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

大数据系列文章目录

官方网址:https://flink.apache.org/

学习资料:https://flink-learning.org.cn/
在这里插入图片描述

目录

  • 数据的时效性
  • 流式计算和批量计算
  • 流式计算流程和特性
  • 分布式计算引擎
  • 什么是Flink
  • Flink中的批和流
  • 性能比较
  • Flink流处理特性
  • 发展历史
  • Flink在阿里的现状
  • Flink的优势
  • Flink的应用场景
  • 国内使用情况

数据的时效性

日常工作中,我们一般会先把数据存储在表,然后对表的数据进行加工、分析。既然先存储在表中,那就会涉及到时效性概念。

如果我们处理以年,月为单位的级别的数据处理,进行统计分析,个性化推荐,那么数据的的最新日期离当前有几个甚至上月都没有问题。但是如果我们处理的是以天为级别,或者一小时甚至更小粒度的数据处理,那么就要求数据的时效性更高了。比如:

  • 对网站的实时监控
  • 对异常日志的监控

这些场景需要工作人员立即响应,这样的场景下,传统的统一收集数据,再存到数据库中,再取出来进行分析就无法满足高时效性的需求了。

流式计算和批量计算

上面说到的统一收集数据->存储到DB->对数据进行批量处理,就是我们说到的批量计算。而流式计算,顾名思义,就是对数据流进行处理,是实时计算
主要原理是:

  • 与批量计算那样慢慢积累数据不同,流式计算立刻计算,数据持续流动,计算完之后就丢弃。
  • 批量计算是维护一张表,对表进行实施各种计算逻辑。流式计算相反,是必须先定义好计算逻辑,提交到流式计算系统,这个计算作业逻辑在整个运行期间是不可更改的。
  • 计算结果上,批量计算对全部数据进行计算后传输结果,流式计算是每次小批量计算后,结果可以立刻实时化展现。

Flink系列-1、流式计算简介_第1张图片

  • Batch Analytics,右边是 Streaming Analytics。Batch Analysis 就是传统意义上使用类似于 Map Reduce、Hive、Spark Batch 等,对作业进行分析、处理、生成离线报表
  • Streaming Analytics 使用流式分析引擎如 Storm,Flink 实时处理分析数据,应用较多的场景如实时大屏、实时报表。

流式计算流程和特性

  • 流程
    1、提交流计算作业
    2、等待流式数据触发流计算作业
    3、计算结果持续不断对外写出
  • 特性
    1、实时,低延迟
    2、无界,数据是不断输出无终止的
    3、连续,计算连续进行,计算之后数据就会被丢弃

分布式计算引擎

这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有 Hadoop、Storm,以及后来的 Spark,他们都有着各自专注的应用场景。Spark 掀开了内存计算的先河,也以内存为赌注,赢得了内存计算的飞速发展。Spark 的火热或多或少的掩盖了其他分布式计算的系统身影。就像 Flink,也就在这个时候默默的发展着。
在国外一些社区,有很多人将大数据的计算引擎分成了 4 代,当然,也有很多人不会认同。我们先姑且这么认为和讨论。

第1代——Hadoop MapReduce

首先第一代的计算引擎,无疑就是 Hadoop 承载的 MapReduce。它将计算分为两个阶段,分别为 Map 和 Reduce。对于上层应用来说,就不得不想方设法去拆分算法,甚至于不得不在上层应用实现多个 Job 的串联,以完成一个完整的算法,例如迭代计算。

  • 批处理
  • Mapper、Reducer

第2代——DAG框架(Tez) + MapReduce

由于这样的弊端,催生了支持 DAG 框架的产生。因此,支持 DAG 的框架被划分为第二代计算引擎。如 Tez 以及更上层的 Oozie。这里我们不去细究各种 DAG 实现之间的区别,不过对于当时的 Tez 和 Oozie 来说,大多还是批处理的任务。

  • 批处理
  • 1个Tez = MR(1) + MR(2) + … + MR(n)
  • 相比MR效率有所提升

Flink系列-1、流式计算简介_第2张图片

第3代——Spark(批为主、兼容流计算)

接下来就是以 Spark 为代表的第三代的计算引擎。第三代计算引擎的特点主要是 Job 内部的 DAG 支持(不跨越 Job),以及强调的实时计算。在这里,很多人也会认为第三代计算引擎也能够很好的运行批处理的 Job。

  • 批处理、流处理、SQL高层API支持
  • 自带DAG
  • 内存迭代计算、性能较之前大幅提升

第4代——Flink(原生流计算,兼容批,实时即未来)

随着第三代计算引擎的出现,促进了上层应用快速发展,例如各种迭代计算的性能以及对流计算和 SQL 等的支持。Flink 的诞生就被归在了第四代。这应该主要表现在 Flink 对流计算的良好支持,以及更一步的实时性上面。当然 Flink 也可以支持 Batch 的任务,以及 DAG 的运算。

  • 批处理、流处理、SQL高层API支持
  • 自带DAG
  • 流式计算性能更高、可靠性更高

什么是Flink

Flink诞生背景

  • Flink起源于Stratosphere(斯cua投斯费尔)项目,Stratosphere是在2010~2014年由地处柏林的大学和欧洲的一些其他的大学共同进行的研究项目
  • 2014年4月捐赠给了Apache软件基金会
  • 2014年12月成为Apache软件基金会的顶级项目。(DS调度花费2年,可见Flink很快了)

LOGO介绍

  • 在德语中,Flink一词表示快速和灵巧,项目采用松鼠的彩色图案作为logo,Flink的松鼠logo尾巴的颜色与Apache软件基金会的logo颜色相呼应,也就是说,这是一只Apache风格的松鼠。

Flink系列-1、流式计算简介_第3张图片

Flink概述

Flink系列-1、流式计算简介_第4张图片

Flink主页在其顶部展示了该项目的理念:“Apache Flink是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架”

Flink是一款分布式的计算引擎,它可以用来做批处理;也可以用来做流处理

哪些公司在使用Flink

Flink系列-1、流式计算简介_第5张图片

Flink中的批和流

批处理的特点是有界、持久、大量,非常适合需要访问全部记录才能完成的计算工作,一般用于离线统计。

流处理的特点是无界、实时, 无需针对整个数据集执行操作,而是对通过系统 传输的每个数据项执行操作,一般用于实时统计。

而在Flink中,一切都是由流组成的,Flink认为有界数据集是无界数据流的一种特例,离线数据是有界限的流,实时数据是一个没有界限的流,这就是所谓的有界流和无界流。

无界流:意思很明显,只有开始没有结束。必须连续的处理无界流数据,也即是在事件注入之后立即要对其进行处理。不能等待数据到达了再去全部处理,因为数据是无界的并且永远不会结束数据注入。处理无界流数据往往要求事件注入的时候有一定的顺序性,例如可以以事件产生的顺序注入,这样会使得处理结果完整。

有界流:也即是有明确的开始和结束的定义。有界流可以等待数据全部注入完成了再开始处理。注入的顺序不是必须的了,因为对于一个静态的数据集,我们是可以对其进行排序的。有界流的处理也可以称为批处理。

Flink系列-1、流式计算简介_第6张图片

性能比较

首先,我们可以通过下面的性能测试初步了解两个框架的性能区别,它们都可以基于内存计算框架进行实时计算,所以都拥有非常好的计算性能。经过测试,Flink计算性能上略好。

测试环境:

  • CPU:7000个;
  • 内存:单机128GB;
  • 版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9
  • 数据:800MB,8GB,8TB;
  • 算法:K-means:以空间中K个点为中心进行聚类,对最靠近它们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
  • 迭代:K=10,3组数据

测试结果:

纵坐标是秒,横坐标是次数
Flink系列-1、流式计算简介_第7张图片
Spark和Flink全部都运行在Hadoop YARN上,性能为Flink > Spark > Hadoop(MR),迭代次数越多越明显,性能上,Flink优于Spark和Hadoop

Flink流处理特性

  • 支持高吞吐、低延迟、高性能的流处理
  • 支持带有事件时间的窗口(Window)操作
  • 支持有状态计算的Exactly-once语义
  • 支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作
  • 支持具有Backpressure功能的持续流模型(自动降速Source)
  • 支持基于轻量级分布式快照(Snapshot)实现的容错
  • 一个运行时同时支持Batch on Streaming处理和Streaming处理
  • Flink在JVM内部实现了自己的内存管理
  • 支持迭代计算
  • 支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

发展历史

Flink系列-1、流式计算简介_第8张图片

  • 2008年,Flink 的前身已经是柏林理工大学一个研究性项目,原名 StratoSphere
  • 2014-04-16,Flink成为 ASF(Apache Software Foundation)的顶级项目之一,从Stratosphere 0.6开始,正式更名为Flink。由Java语言编写
  • 2014-11-04,Flink 0.7.0发布,介绍了最重要的特性:Streaming API
  • 2016-03-08,Flink 1.0.0,支持Scala
  • 2019-01-08,阿里巴巴以9000万欧元的价格收购了总部位于柏林的初创公司Data Artisans,也就是Flink的母公司
  • 最新版本已经到了1.16

我目前的开发是基于flink-1.10.0这个版本来进行的

Flink在阿里的现状

  • 基于Apache Flink在阿里巴巴搭建的平台于2016年正式上线,并从阿里巴巴的搜索和推荐这两大场景开始实现。
  • 目前阿里巴巴所有的业务,包括阿里巴巴所有子公司都采用了基于Flink搭建的实时计算平台。
  • 同时Flink计算平台运行在开源的Hadoop集群之上。
  • 采用Hadoop的YARN做为资源管理调度,以 HDFS作为数据存储。
  • 因此,Flink可以和开源大数据软件Hadoop无缝对接。

Flink系列-1、流式计算简介_第9张图片

目前,这套基于Flink搭建的实时计算平台不仅服务于阿里巴巴集团内部,而且通过阿里云的云产品API向整个开发者生态提供基于Flink的云产品支持。

Flink的优势

Flink 通过实现了 Google Dataflow 流式计算模型实现了高吞吐、低延迟、高性能兼具实时流式计算框架

同时 Flink 支持高度容错的状态管理,防止状态在计算过程中因为系统异常而丢失,Flink 周期性地通过分布式快照技术 Checkpoints 实现状态的持久化维护,使得即使在系统停机或者异常情况下都能计算出正确的结果。

具体的优势有以下几点

  • 同时支持高吞吐、低延迟、高性能
  • 支持事件时间(Event Time)概念
  • 支持有状态计算
  • 支持高度灵活的窗口(Window)操作
  • 基于轻量级分布式快照(Snapshot)实现的容错
  • 基于 JVM 实现的独立的内存管理
  • Save Points 保存点

Flink的应用场景

Flink系列-1、流式计算简介_第10张图片

阿里在Flink的应用主要包含四个模块:实时监控、实时报表、流数据分析和实时仓库。

实时监控

  • 用户行为预警、app crash 预警、服务器攻击预警
  • 对用户行为或者相关事件进行实时监测和分析,基于风控规则进行预警

实时报表

  • 双11、双12等活动直播大屏
  • 对外数据产品:生意参谋等
  • 数据化运营

流数据分析

  • 实时计算相关指标反馈及时调整决策
  • 内容投放、无线智能推送、实时个性化推荐等

实时仓库

  • 数据实时清洗、归并、结构化
  • 数仓的补充和优化

国内使用情况

Flink系列-1、流式计算简介_第11张图片

  • Alibaba 使用 Flink 的分支版本 Blink 来优化实时搜索排名。当商家录入一个商品之后,实时计算引擎(Flink)在秒级别 build 商品索引,优化商品搜索。
  • 腾讯利用 Apache Flink 构建了一个内部平台(Oceanus),以提高开发和操作实时应用程序的效率。
  • 快手使用了 Apache Flink 搭建了一个实时监控平台,监控短视频和直播的质量。
  • 利用 Apache Flink 构建了实时数据仓库,用于即时分析运营活动效果及用户短期兴趣。
  • 华为云提供基于 Flink 的云服务。
  • 滴滴使用 Apache Flink支持了实时监控、实时特征抽取、实时ETL等业务。
  • Ebay 的监控平台由 Flink 提供支持,可在指标和日志流上计算上千条自定义报警规则。
  • 爱立信使用 Flink 构建了一个实时异常检测器,通过大型基础设施进行机器学习。
  • Uber 在 Apache Flink 上构建了基于 SQL 的开源流媒体分析平台 AthenaX。
  • Yelp 利用 Flink 为其数据连接器生态系统和流处理基础架构提供支持。
  • 财富 500 强金融服务公司 Capital One 使用 Flink 进行实时活动监控和报警。

参考官网:https://flink.apache.org/poweredby.html

你可能感兴趣的:(大数据专栏,flink,大数据,java)