50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

Flink 基础教程(一):流处理技术的演变

  • 2020-03-26
  • 本文字数:2224 字

    阅读完需:约 7 分钟

Flink基础教程(一):流处理技术的演变

编者按:本文节选自图灵程序设计丛书 《Flink 基础教程》一书中的部分章节。


分开处理连续的实时数据和有限批次的数据,可以使系统构建工作变得更加简单,但是这种做法将管理两套系统的复杂性留给了系统用户:应用程序的开发团队和 DevOps 团队需要自己使用并管理这两套系统。


为了处理这种情况,有些用户开发出了自己的流处理系统。在开源世界里,Apache Storm 项目(以下简称 Storm)是流处理先锋。Storm 最早由 Nathan Marz 和创业公司 BackType(后来被 Twitter 收购)的一个团队开发,后来才被 Apache 软件基金会接纳。Storm 提供了低延迟的流处理,但是它为实时性付出了一些代价:很难实现高吞吐,并且其正确性没能达到通常所需的水平。换句话说,它并不能保证 exactly-once;即便是它能够保证的正确性级别,其开销也相当大。


Lambda 架构概述:优势和局限性

对低成本规模化的需求促使人们开始使用分布式文件系统,例如 HDFS 和基于批量数据的计算系统(MapReduce 作业)。但是这种系统很难做到低延迟。用 Storm 开发的实时流处理技术可以帮助解决延迟性的问题,但并不完美。其中的一个原因是,Storm 不支持 exactly-once 语义,因此不能保证状态数据的正确性,另外它也不支持基于事件时间的处理。有以上需求的用户不得不在自己的应用程序代码中加入这些功能。

后来出现了一种混合分析的方法,它将上述两个方案结合起来,既保证低延迟,又保障正确性。这个方法被称作 Lambda 架构,它通过批量 MapReduce 作业提供了虽有些延迟但是结果准确的计算,同时通过 Storm 将最新数据的计算结果初步展示出来。

Lambda 架构是构建大数据应用程序的一种很有效的框架,但它还不够好。举例来说,基于 MapReduce 和 HDFS 的 Lambda 系统有一个长达数小时的时间窗口,在这个窗口内,由于实时任务失败而产生的不准确的结果会一直存在。Lambda 架构需要在两个不同的 API(application programming interface,应用程序编程接口)中对同样的业务逻辑进行两次编程:一次为批量计算的系统,一次为流式计算的系统。针对同一个业务问题产生了两个代码库,各有不同的漏洞。这种系统实际上非常难维护。


若要依靠多个流事件来计算结果,必须将数据从一个事件保留到下一个事件。这些保存下来的数据叫作计算的状态。准确处理状态对于计算结果的一致性至关重要。在故障或中断之后能够继续准确地更新状态是容错的关键。


在低延迟和高吞吐的流处理系统中维持良好的容错性是非常困难的,但是为了得到有保障的准确状态,人们想出了一种替代方法:将连续事件中的流数据分割成一系列微小的批量作业。如果分割得足够小(即所谓的微批处理作业),计算就几乎可以实现真正的流处理。因为存在延迟,所以不可能做到完全实时,但是每个简单的应用程序都可以实现仅有几秒甚至几亚秒的延迟。这就是在 Spark 批处理引擎上运行的 Apache Spark Streaming(以下简称 Spark Streaming)所使用的方法。


更重要的是,使用微批处理方法,可以实现 exactly-once 语义,从而保障状态的一致性。如果一个微批处理作业失败了,它可以重新运行。这比连续的流处理方法更容易。Storm Trident 是对 Storm 的延伸,它的底层流处理引擎就是基于微批处理方法来进行计算的,从而实现了 exactly-once 语义,但是在延迟性方面付出了很大的代价。


然而,通过间歇性的批处理作业来模拟流处理,会导致开发和运维相互交错。完成间歇性的批处理作业所需的时间和数据到达的时间紧密耦合,任何延迟都可能导致不一致(或者说错误)的结果。这种技术的潜在问题是,时间由系统中生成小批量作业的那一部分全权控制。Spark Streaming 等一些流处理框架在一定程度上弱化了这一弊端,但还是不能完全避免。另外,使用这种方法的计算有着糟糕的用户体验,尤其是那些对延迟比较敏感的作业,而且人们需要在写业务代码时花费大量精力来提升性能。


为了实现理想的功能,人们继续改进已有的处理器(比如 Storm Trident 的开发初衷就是试图克服 Storm 的局限性)。当已有的处理器不能满足需求时,产生的各种后果则必须由应用程序开发人员面对和解决。以微批处理方法为例,人们往往期望根据实际情况分割事件数据,而处理器只能根据批量作业时间(恢复间隔)的倍数进行分割。当灵活性和表现力都缺乏的时候,开发速度变慢,运维成本变高。


于是,Flink 出现了。这一数据处理器可以避免上述弊端,并且拥有所需的诸多功能,还能按照连续事件高效地处理数据。Flink 的一些功能如图 1 所示。



图 1:Flink 的一个优势是,它拥有诸多重要的流式计算功能。其他项目为了实现这些功能,都不得不付出代价。比如,Storm 实现了低延迟,但是在作者撰写本书时还做不到高吞吐,也不能在故障发生时准确地处理计算状态;Spark Streaming 通过采用微批处理方法实现了高吞吐和容错性,但是牺牲了低延迟和实时处理能力,也不能使窗口与自然时间相匹配,并且表现力欠佳


与 Storm 和 Spark Streaming 类似,其他流处理技术同样可以提供一些有用的功能,但是没有一个像 Flink 那样功能如此齐全。举例来说,Apache Samza(以下简称 Samza)是早期的一个开源流处理器,它不仅没能实现 exactly-once 语义,而且只能提供底层的 API;同样,Apache Apex 提供了与 Flink 相同的一些功能,但不全面(比如只提供底层的 API,不支持事件时间,也不支持批量计算)。这些项目没有一个能和 Flink 在开源社区的规模上相提并论。


下面来了解 Flink 是什么,以及它是如何诞生的。


图书简介https://www.ituring.com.cn/book/2036



2020-03-26 10:002328

评论

发布
暂无评论
发现更多内容

python爬虫--网络歌曲

木偶

Python 爬虫 10月月更

苏州太仓| 第六届“创赢太仓”全球创业大赛博士后专场项目征集公告

科兴未来News

生物医药 双创大赛承办 苏州 医疗器械 博士后

开源软件与开源协议的法律问题分析

Andy

开源 架构 调研

双向带头循环链表的(增删查改)的实现

lovevivi

c 数据结构 10月月更

深入浅出ES6中的解构

木偶

JavaScript 前端 ES6 10月月更

【一Go到底】第二十二天---函数参数传递方式、变量作用域

指剑

Go golang 10月月更

Pycharm配置远程解释器并自动上传代码

渔戈

pycharm 开发工具 10月月更

Linux基础命令

渔戈

Linux ubuntu 10月月更

Go语言入门—05数组

良猿

Go golang 后端 10月月更

Ubuntu 20.04上安装和配置MySql5.7

渔戈

ubuntu 开发工具 10月月更

node.js

急需上岸的小谢

10月月更

Docker | Compose创建mysql容器

甜点cc

MySQL Docker 10月月更

程”风破浪的开发者|说说我的学习方法

来碗老郭

学习方法 “程”风破浪的开发者

顺序表的(增删查改)实现

lovevivi

c 数据结构 10月月更

前端布局之浅谈BFC

CoderBin

CSS 面试 前端 10月月更

ES6之let、const与var

木偶

JavaScript 前端 ES6 10月月更

Vue组件入门(十二)具名插槽

Augus

Vue 10月月更

嵌入式 Linux 入门(二、Linux 文件系统、文件类型及权限管理)

矜辰所致

Linux 文件系统 10月月更

ScheduledThreadPoolExecutor踩过最痛的坑

JAVA旭阳

Java 线程池 10月月更

“程”风破浪的开发者|走近 testflight 上架

No Silver Bullet

学习方法 10月月更 “程”风破浪的开发者 testflight iOS上架

日志的艺术

俞凡

架构

单链表的(增删查改)的实现

lovevivi

c 数据结构 10月月更

Flex布局教程:语法篇

木偶

css3 前端 10月月更

消息中间件:概念&应用

agnostic

消息中间件

一文全貌了解线程池的正确使用姿势

JAVA旭阳

Java 线程池 10月月更

科兴未来-江苏盐城|第六届绿巢环保创业大赛火热启动

科兴未来News

新能源 双创 低碳环保

正则表达式入门与进阶

Studying_swz

正则表达式 10月月更

Linux 驱动开发:USB无线wifi驱动开发(MT7601)、完成WIFI管理工具安装

DS小龙哥

10月月更

可靠消息最终一致性分布式事务

C++后台开发

数据库 分布式 后端开发 linux开发 C++开发

spring事务失效的情况

急需上岸的小谢

10月月更

学习线程池原理从手写一个线程池开始

JAVA旭阳

Java 线程池 10月月更

Flink基础教程(一):流处理技术的演变_大数据_科斯塔斯•宙马斯_InfoQ精选文章