Flink概述
计算引擎
大数据计算引擎分为离线计算和实时计算,离线计算就是我们通常说的批计算,代表是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概述的更多相关文章
- <译>Flink官方文档-Flink概述
Overview This documentation is for Apache Flink version 1.0-SNAPSHOT, which is the current developme ...
- Flink概述| 配置
流处理技术的演变 在开源世界里,Apache Storm项目是流处理的先锋.Storm提供了低延迟的流处理,但是它为实时性付出了一些代价:很难实现高吞吐,并且其正确性没能达到通常所需的水平,换句话说, ...
- Flink简介及使用
一.Flink概述 官网:https://flink.apache.org/ mapreduce-->maxcompute HBase-->部门 quickBI DataV Hive--& ...
- Flink学习笔记-新一代Flink计算引擎
说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...
- 实时计算框架:Flink集群搭建与运行机制
一.Flink概述 1.基础简介 Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算.Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算.主要特性包 ...
- Flink基础概念入门
Flink 概述 什么是 Flink Apache Apache Flink 是一个开源的流处理框架,应用于分布式.高性能.高可用的数据流应用程序.可以处理有限数据流和无限数据,即能够处理有边界和无边 ...
- Flink01
1. 什么是Flink? 1.1 4代大数据计算引擎 第一代: MapReducer 批处理 Mapper, Reducer Hadoop的MapReducer将计算分为两个阶段, 分别为Map和Re ...
- Apache Flink系列(1)-概述
一.设计思想及介绍 基本思想:“一切数据都是流,批是流的特例” 1.Micro Batching 模式 在Micro-Batching模式的架构实现上就有一个自然流数据流入系统进行攒批的过程,这在一定 ...
- Flink学习笔记:Connectors概述
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
随机推荐
- P3378 【模板】堆 (内含左偏树实现)
P3378 [模板]堆 题解 其实就是一个小根堆啦,STL就可以解决,但是拥有闲情雅致的我学习了Jelly_Goat的左偏树,增加了代码长度,妙啊 Solution 1 STL STL 里面prior ...
- 解决WAMP Server与IIS端口冲突问题
版本前提: 腾讯云服务器 windows server 2012 R2 WampServer3.10 64bit 有两种思路 一.修改wamp端口 文件位置 C:\wamp64\bin\apac ...
- 短信的内容提供者Uri和短信表结构
* sms表 * address :手机号码 * date :收发短信的时间 * read :短信的阅读状态 1,已读 0,未读 * type :收发短信的类型 1,收到短信 2,发出短信 * bod ...
- vector subscript out of range
报这个错时会弹出一个窗口,貌似内存溢出,这是什么由于vector存放的数据超出了vector的大小所造成的. 解决方法如下: 在Vector<string> vector之后,不能直接通过 ...
- 003-tomcat配置文件-server、tomcat-users
1.server.xml讲解 位于conf下 <?xml version="1.0" encoding="UTF-8"?> <!-- Serv ...
- ZUK Z2 AospExtended-v6.7 Android 9.0可用的谷歌相机Mod.md
目录 参考资料 系统版本: AospExtended-v6.7-z2_plus-20190821-1940-OFFICIAL.zip cstark27 ×PXv4.1.1_GoogleCamera_7 ...
- Docker Registry使用记录
一.介绍 有时我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么你就需要Docker Registry,它可以用来存储和管理自己的镜像,即私有镜像库. 二.使用 2.1 获取最新镜 ...
- 软件开发的SOLID原则
再次回顾以前潘加宇老师将的软件开放的原则. SOLID: 单一责任原则 S 开放封闭原则 O 里氏代换原则 L 接口分离原则 I 依赖反转原则 D 所有编程都是维护编程,因为你很少写原创代码.只有你在 ...
- 如何查看linux系统安装时间
第一种方法: 先查看系统盘挂到哪个分区上,然后用 dumpe2fs 查看这个磁盘分区 创建的时间,即可查出此 服务器 系统安装的时间.() # dumpe2fs /dev/sda3|grep -i ...
- 部署 --- Docker
Docker学习 介绍 : Docker速度更快.性能更高.操作更易.我们开发的不同的程序APP是需要在操作系统中单独的环境中隔离运行的. 为了能让我们不同的程序可以在隔离的环境中运行:我们可以使用虚 ...