计算引擎

大数据计算引擎分为离线计算和实时计算,离线计算就是我们通常说的批计算,代表是Hadoop MapReduce、Hive等大数据技术。实时计算也被称作流计算,代表是Storm、Spark Streaming、Flink等大数据技术。

计算引擎也在不断更新迭代,下图展示的是每一代计算引擎的代表,从第一代的Hadoop MapReduce,到第二代的Spark,再到第三代的Flink技术,从批处理到微批,再到真正的流式计算。

实时计算

实时计算是相对离线计算的概念,重要是时效性。举个例子,我们知道离线计算通常是天级别的计算任务,比如统计一天的新增用户,商品销量,销售收入等。但是实时计算是只要有事件发生,统计结果就会发生变化,比如有一个新用户注册登录了,那么我们的新增用户数就发生了变化,商品只要新增一个销售,销量就会发生变化,销售收入也会变化。所以实时计算让我们能更及时了解我们的现状,以及根据实时的统计结果做出决策,决策也更加具有时效性。

Flink介绍

Apache Flink是一个开源的流处理框架,应用于分布式、高性能、高可用的数据流应用程序。可以处理有限数据流和无限数据,即能够处理有边界和无边界的数据流。无边界的数据流就是真正意义上的流数据,所以Flink是支持流计算的。有边界的数据流就是批数据,所以也支持批处理的。不过Flink在流处理上的应用比在批处理上的应用更加广泛,统一批处理和流处理也是Flink目标之一。Flink可以部署在各种集群环境,可以对各种大小规模的数据进行快速计算。

随着大数据技术在各行各业的广泛应用,要求能对海量数据进行实时处理的需求越来越多,同时数据处理的业务逻辑也越来越复杂,传统的批处理方式和早期的流式处理框架也越来越难以在延迟性、吞吐量、容错能力以及使用便捷性等方面满足业务日益苛刻的要求。其中流式计算的典型代表是Storm和Flink技术。它们数据处理的延迟都是亚秒级低延迟,但是Flink相比Storm还有其他的一些优势,比如支持exactly once语义,确保数据不会重复。 Storm支持at least once语义,保证数据不会丢失。保证数据不会重复的代价很高,比如数据下游操作属于幂等操作。另外从测试结果来看,Flink在低延迟的基础上还能保证高吞吐,优势明显。

在这种形势下,新型流式处理框架Flink通过创造性地把现代大规模并行处理技术应用到流式处理中来,极大地改善了以前的流式处理框架所存在的问题。

前世今生

诞生于2009年,原来叫StratoSphere,是柏林工业大学的一个研究性项目,早期专注于批计算。2014年孵化出Flink并捐给Apache,2015年Flink开始崭露头角,引起大家注意。它不仅是一个高吞吐,低延迟的计算引擎,同时还提供有状态的计算,支持状态管理,支持强一致性的语义,以及支持EventTime和waterMark 对消息乱序的处理。这也是阿里看上Flink的原因,并决心投入重金研究基于Flink的blink。2016年Flink在阿里得到大规模应用。

Flink特征

1.一切皆为流

事件驱动应用(Event-driven Applications)

2.正确性保证

唯一状态一致性(Exactly-once state consistency)

事件-事件处理(Event-time processing)

高超的最近数据处理(Sophisticated late data handling)

3.多层api

基于流式和批量数据处理的SQL(SQL on Stream & Batch Data)

流水数据API & 数据集API(DataStream API & DataSet API)

处理函数 (时间 & 状态)(ProcessFunction (Time & State))

4.易用性

部署灵活(Flexible deployment)

高可用安装(High-availability setup)

保存点(Savepoints)

5.可扩展性

可扩展架构(Scale-out architecture)

大量状态的支持(Support for very large state)

增量检查点(Incremental checkpointing)

6.高性能

低延迟(Low latency)

高吞吐量(High throughput)

内存计算(In-Memory computing)

Flink优点

支持批处理和流处理。

优雅流畅的支持java和scala。

高吞吐量和低延迟。

支持事件处理和无序处理通过SataStream API,基于DataFlow数据流模型。

在不同的时间语义(事件时间,摄取时间、处理时间)下支持灵活的窗口(时间,滑动、 翻滚,会话,自定义触发器)。

仅处理一次的容错担保,通过event time & watermarker。

自动背压机制,下游对上游的反压。

图处理(批) 机器学习(批) 复杂事件处理(流)。

在dataSet(批处理)API中内置支持迭代程序(BSP)。

高效的自定义内存管理,和健壮的切换能力在in-memory和out-of-core中。

兼容hadoop的mapreduce和storm。

集成YARN,HDFS,Hbase 和其它hadoop生态系统的组件,丰富的connector。

Flink模型

Flink提供不同级别的抽象来开发流/批处理应用程序。

最低级的抽象接口是状态化的数据流接口(stateful streaming)。这个接口是通过 ProcessFunction 集成到 DataStream API 中的。该接口允许用户自由的处理来自一个或多个流中的事件,并使用一致的容错状态。另外,用户也可以通过注册 event time 和 processing time 处理回调函数的方法来实现复杂的计算。

大部分程序通常会使用以 DataStream API(有界/无界数据流)、DataSet API(有界数据集)为代表的 Core APIs,并不会使用低级抽象接口。这些API为数据处理提供了大量的通用模块(common building block),包括用户定义的各种各样的变换(transformations)、连接(joins)、聚合(aggregations)、窗口(windows)、状态(state)等等。DataStream API 集成了 low level 处理函数,使得对一些特定的操作提供更低层次的抽象。此外,DataSet API 也为有界数据集提供了一些补充的编程原语,例如循环(loops)、迭代(iterations)等。

Table API 是一种以数据表为核心地声明式 DSL,能够动态地修改表(表示流时)。Table API 的是一种(扩展的)关系型模型:每个都有一个 schema(类似于关系型数据库中的表结构),API也提供以下操作: select,project,join,group by,aggregate等。Table API 程序定义的是应该执行什么样的逻辑操作,而不是直接准确地指定程序代码运行的具体步骤。尽管 Table API 可以通过各式各样的自定义函数进行扩展,但是它在表达能力上仍然比不上 Core APIs,不过在使用上更简练(可以减少很多代码)。此外,Table API 程序在运行之前也会使用一个优化器对程序进行优化。用户可以在 tables 与 DataStream/DataSet 之间进行无缝切换,程序也可以混合使用 Table API 和 DataStream/DataSet APIs。

Flink 提供的最高级接口是 SQL。这个层次的抽象接口和 Table API 非常相似,包括语法和接口的表现能力,唯一的区别是通过 SQL 查询语言实现程序。SQL 抽象接口和 Table API 的交互非常紧密,而且 SQL 查询也可以在 Table API 中定义的表上执行。

应用类型

1.实时BI

对于淘宝和考拉这种电商场景,有着海量的在线交易和用户数据,实时计算不同维度的数据统计数据对于指导运营有很大的帮助。

实时BI系统的流程:在线服务系统和数据库会产生大量的日志数据,通过日志收集工具采集到消息队列比如Kafka,FlinkJob实时读取处理这些数据,然后将各种统计结果实时写到Mysql或者Hbase中,通过可视化技术,运营用户可从DashBoard中实时看到各个维度的统计分析结果。

最直观的例子就是双十一的实时GMV成交额,大屏实时显示最新的销售总额,看似一个简单的数据,背后需要Flink平稳、精准的计算。

2.实时数仓

离线计算阶段,数据仓库都是非实时的,通常是天级别或者小时级别的ETL作业,通过MapReduce,将数据进行批处理,将数据load到hive分区表。但是离线建立的数据,时间上具有延迟性,按天级别任务的ETL,只能到第二天才能对前一天的数据进行查询和计算。如果希望可以查询到实时数据,实时的ETL就显的尤为必要。

通过Flink,可以实时将数据进行处理,load到Hive表,从而实现实时数仓的搭建,数据实时可查询。

3.在线模型

传统的离线机器学习需要T+1的分析用户的历史行为,训练模型,第二天上线,但是用户的需求和预期可能已经发生了改变,因此模型的实时性就显得尤为重要。我们知道,机器学习的特征一般都是通过复杂计算得到的,所以提取特征需要大量的计算任务。FlinkJob通过实时的日志,根据需求提取需要的特征,并在线上使用最新的特征和结果数据,增量训练模型,从而达到在线机器学习的目的。

在线模型的计算更加密集和复杂,而这些正是Flink的优势所在。通过在线学习,模型也会更加实时,可以给用户带来更好的使用体验。

4.实时监控

监控系统一般采集的数据量都是巨大的,通过参数的一些阈值设定,实时报警,Flink在这类场景中也有应用。通过用户的实时行为数据,可以做到实时监控。比如广告系统的实时反作弊,美团、招商等运营活动的实时反薅羊毛都是实时计算的案例,Flink在其中也能发挥巨大的价值。

Flink未来

Flink会进行批计算的突破、流处理和批处理无缝切换、界限越来越模糊、甚至混合。

Flink会开发更多语言支持。

Flink会逐步完善Machine Learning 算法库,同时 Flink 也会向更成熟的机器学习、深度学习去集成(比如Tensorflow On Flink)。

Flink概述的更多相关文章

  1. <译>Flink官方文档-Flink概述

    Overview This documentation is for Apache Flink version 1.0-SNAPSHOT, which is the current developme ...

  2. Flink概述| 配置

    流处理技术的演变 在开源世界里,Apache Storm项目是流处理的先锋.Storm提供了低延迟的流处理,但是它为实时性付出了一些代价:很难实现高吞吐,并且其正确性没能达到通常所需的水平,换句话说, ...

  3. Flink简介及使用

    一.Flink概述 官网:https://flink.apache.org/ mapreduce-->maxcompute HBase-->部门 quickBI DataV Hive--& ...

  4. Flink学习笔记-新一代Flink计算引擎

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  5. 实时计算框架:Flink集群搭建与运行机制

    一.Flink概述 1.基础简介 Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算.Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算.主要特性包 ...

  6. Flink基础概念入门

    Flink 概述 什么是 Flink Apache Apache Flink 是一个开源的流处理框架,应用于分布式.高性能.高可用的数据流应用程序.可以处理有限数据流和无限数据,即能够处理有边界和无边 ...

  7. Flink01

    1. 什么是Flink? 1.1 4代大数据计算引擎 第一代: MapReducer 批处理 Mapper, Reducer Hadoop的MapReducer将计算分为两个阶段, 分别为Map和Re ...

  8. Apache Flink系列(1)-概述

    一.设计思想及介绍 基本思想:“一切数据都是流,批是流的特例” 1.Micro Batching 模式 在Micro-Batching模式的架构实现上就有一个自然流数据流入系统进行攒批的过程,这在一定 ...

  9. Flink学习笔记:Connectors概述

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

随机推荐

  1. 【软件工程】Beta冲刺(2/5)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 新增修改用户信息.任务完成反馈等功能API 服务器后端部署,API接口的bet ...

  2. kotlin array

    (1)Kotlin语言使用Array表示数组. (2)[] 可以用于访问数组的元素, [] 被进行了操作符的重载,调用的是 Array 类的 setter 和 getter 方法 2.创建数组 (1) ...

  3. qt+opencv编译环境的配置

    第一步:安装与配置Qt 从https://account.qt.io/downloads下载Qt,并注册账户.开始安装.首先下载qt-opensource-windows-x86-mingw482_o ...

  4. 发布机制-灰度发布-例子:Gmail Labs

    ylbtech-发布机制-灰度发布-例子:Gmail Labs Gmail Labs是一个新特性橱窗,用户可以自己选择一些未正式发布的新特性进行体验,不喜欢可以关闭,在这个过程中,吃了螃蟹,也当了Go ...

  5. 在CentOS7阿里云服务器部署ThinkPHP5,并配置phpstrom实现同步开发(微信小程序及管理员后端)

    小程序和后端同步开发 1.服务器安装tp5框架: 方法很多比如:github.linux命令直接手动下.composer 都可以,方法很多,百度一下,不再累述 2.这时你会发现怎么都访问出现不了这个令 ...

  6. 004-tomcat优化-Catalina中JVM优化、Connector优化、NIO化

    一.服务端web层 涉及内容Nginx.Varnish.JVM.Web服务器[Tomcat.Web应用开发(Filter.spring mvc.css.js.jsp)] 1.1.基本优化思路 1.尽量 ...

  7. R语言与概率统计(四) 判别分析(分类)

    Fisher就是找一个线L使得组内方差小,组间距离大.即找一个直线使得d最大. ####################################1.判别分析,线性判别:2.分层抽样 #inst ...

  8. Oracle面试题

    0.绑定变量的优缺点及使用场合分别是什么? 优点:能够避免SQL的硬解析以及与之相关的额外开销(SQL语法.语义的分析.逻辑分析.生成较佳的执行计划等开销),提高执行效率. 缺点:如果在表存在数据倾斜 ...

  9. linux下正确卸载rpm包

    linux下正确卸载rpm包 rpm -qa | grep -i ntp 执行结果: [root@bogon elasticsearch-head]# rpm -qa | grep -i ntp fo ...

  10. spring 配置参数从配置文件中加载到PropertiesFactoryBean 和配置参数从数据库加载到PropertiesFactoryBean 的实现,及项目中的相关应用

    1.加载.properties文件中的配置参数加载到PropertiesFactoryBean容器中 <bean id="configProperties" class=&q ...