大数据处理架构演进历程,文末留言有机会获取Flink图书

关注 iteblog_hadoop 公众号并在本文末评论区留言(认真写评论,增加上榜的机会)。留言点赞数排名前6名的粉丝,各免费赠送一本《深入理解Flink - 实时大数据处理实战》,活动截止至4月30日18:00。

640?wx_fmt=jpeg

谷歌发表的三篇划时代论文(分别介绍 MapReduce、GFS和 BigTable),特别是介绍 MapReduce 的那篇论文,开启了大规模数据处理波澜壮阔的发展历程。一篇篇论文和那些大数据从业者耳熟能详的大数据处理架构,是这个历程中的重要里程碑,图1-1 所示为主流大数据处理架构的发展历程。

640?wx_fmt=png

图 1-1 主流大数据处理架构的发展历程

2003年,谷歌的工程师便开始构建各种定制化数据处理系统,以解决大规模数据处理的几大难题:大规模数据处理特别困难(DataProcessingishard),这里的难有多个方面,仅仅是在大规模数据上构建一个处理程序也不是一件容易的事情;保证可伸缩性很难(Scalability is  hard),让处理程序在不同规模的集群上运行,或者更进一步,让程序根据计算资源状况自动调度执行,也不是一件容易的事情;容错很难(Fault-toleranceishard),让处理程序在由廉价机器组成的集群上可靠地运行,更不是一件容易的事情。这些困难促使 MapReduce(不是 Hadoop 中的 MapReduce)诞生。MapReduce将处理抽象成 Map+Shuffle+Reduce的过程, 这种抽象对大数据处理理论变革有着深远的影响。

以计算词频为例,MapReduce 将输入(Input)文本以行为单位分片(Split),每个 Map 任务将分片中的每个词映射为键值对的形式(Dear,  1),Shuffle 将相同键的记录组合在一起,最后由Reduce 任务计算词频并输出(Output)结果,图 1-2 描述了一个有 3 个 Map 和 3 个 Reduce 的词频计算过程。

640?wx_fmt=png


图 1-2 基于MapReduce 计算词频的过程

笔者有一段相似的架构经历,能够帮助读者更好地理解是什么驱动谷歌的工程师开发 MapReduce 这个通用框架。驱动笔者开发一个定制化数据处理程序的想法主要来自业务需求,也有 MapReduce 思想的启发。当时,笔者就职的公司有TB级的短文本数据,笔者需要将这些文本的一些相邻行合并成一条记录,再对这些记录进行聚合操作,并在这之上构建一个用于语义分析的应用。出于保密要求, 这些数据被分批归集到公司内网的一台 x86 服务器上,语义分析程序也运行在这台内网机器上。笔者有两套方案,其中一套方案使用 Hadoop,但是由于只有两台物理机器,而且用 Hadoop 有点“大炮打蚊子”的感觉,加之因着迷于 Linux 内核之美而“继承”下的“一言不合便动手造轮子”的理念,笔者决定采用另一套方案:使用 Java语言自己动手构建一个简易的、定制化的多线程数据处理框架(类MapReduce 数据处理框架),如图 1-3 所示。

其中,Reader 用于并行读取数据;Dealer 用于实现可级联的数据处理逻辑, 如先计算记录总数,再过滤非目标记录,最后分词并计算语义标签;Writer 将Dealer处理的最终结果以配置的格式写入输出文件。

640?wx_fmt=png

图 1-3 类MapReduce 数据处理框架

 

多线程并行处理将程序运行速度提高了好几个量级。尽管如此,这段经历也令笔者回味深长:

(1)语义分析应用程序和底层组件间耦合得太紧,以至于这套软件只能由笔者维护。因为承担这个任务的部门的其他同事都是做数据分析的,没有软件开发工伤经验。

(2)语义分析训练通常是相当耗时的,没有功能更强大的框架支持,手工操作的时间成本比较高。

这段经历让笔者深刻领悟到 MapReduce 框架的深思熟虑。2004 年,DougCutting 和 MikeCafarella 在构建 Nutch 时受到谷歌公司发表的MapReduce 论文的启发,实现了开源版本的 MapReduce,即 Hadoop。此后,Pig、Hive、HBase 等工具不断涌现,Hadoop 批处理生态系统蓬勃发展,也让人们再次领教了开源的力量,图 1-4 展示了 Hadoop 生态系统。

640?wx_fmt=png

图 1-4   Hadoop 生态系统

 批处理(batch)的概念由来已久。在操作系统理论中,批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。这种操作系统被称为批处理操作系统,它是为了提高CPU 的利用率而提出的一种操作系统。例如,在DOS 和 Windows 系统中,我们可以在扩展名为.bat 的脚本文件中顺序定义一系列操作命令,让操作系统自动运行这些命令。

在数据处理理论中有对应的批处理系统。批处理系统的核心功能是在大容量静态数据集上运行预定义功能的、可预期完成时间的计算任务。这里的静态是指数据集是有界的,是数据集的时间属性。

流处理(streaming)系统则是构建在无界数据集之上的、可提供实时计算的另一类数据处理系统。

经过一段时间的应用实践,MapReduce的缺陷也逐渐暴露,最让人诟病的是Map+Shuffle+Reduce编程模型导致计算作业效率低下。为此,2007年,谷歌发起了 Flume 项目。起初,Flume 只有 Java 版本,因此也被称为 Flume Java(这里所说的 Flume 和 Apache 的 Flume 不同)。Flume 将数据处理过程抽象成计算图(有向无环图),数据处理逻辑被编译成 Map+Shuffle+Reduce 的组合,并加入物理执行计划优化,而不是简单地将 Map+Shuffle+Reduce 串联。

Flume 引入的管道Pipeline、动态负载均衡(谷歌内部称为液态分片和流语义思想成为大数据处理技术变革的宝贵理论财富。

产生于处理推特信息流的流式数据处理框架 Storm 以牺牲强一致性换取实时性,并在一些场景下取得了成功。为了让数据处理程序兼备强一致性和实时性,工程师们将强实时性的 Storm 和强一致性的Hadoop 批处理系统融合在一起,即Lambda 架构。其中,Storm 负责实时生成近似结果,Hadoop 负责计算最终精准结果。Lambda 架构需要部署两套队列集群,数据要持久化存放两份,这会导致数据冗余,增加系统维护成本。Lambda 架构示意图,如图 1-5 所示。

640?wx_fmt=png

图 1-5   Lambda 架构示意图

 

MapReduce 模型严重依赖分布式文件系统,如Map 将计算结果临时写入文件系统,而 Shuffle 从文件系统中读入该结果,这往往会产生较大的计算性能损耗,因此基于内存的计算是另一个选择,这就是 Spark 成功的秘诀。此外,Spark 还支持流式数据处理,即 Spark Streaming,其原理是将多个微批处理任务串接起来构建流式数据处理任务。但是这种采用微批重复运行的机制牺牲了低延迟和高吞吐的优势,引发了Spark Streaming 是不是真正流式数据处理引擎的争议。Spark Streaming 流式数据处理任务的架构方案,如图 1-6 所示。

640?wx_fmt=png

图 1-6 Spark Streaming 流式数据处理任务的架构方案

这期间,流式数据处理继续发展,出现了 MillWheel、Kafka和 DataFlow。exactly-once语义、数据源端的持久化和可重放、动态表理论,以及时间、窗口、水印、触发器等流式数据处理核心理论的提出,加快了流式数据处理框架的发展步伐。

作为流式数据处理中容错的解决方案之一的轻量级快照机制,借助上述流式数据处理相关理论,以及开源的旺盛生命力,Flink 于 2015 年迅速登上实时数据处理的舞台,并将推动大数据发展新的浪潮。正是在这种背景下,笔者决定深入Flink 实现底层,为读者呈现其中的智慧之光。Flink 架构,如图 1-7 所示。

640?wx_fmt=png

图 1-7   Flink 架构

赠书福利

【1】关注本公众号(过往记忆大数据,ID:iteblog_hadoop),并在评论区留言获点赞数最高前6名将赠送《深入理解Flink - 实时大数据处理实战》1本,共送出6本;

【2】活动时间:即日起至4月30日18:00点;

【3】活动结束后,收到中奖通知的用户请在公众号私信:微信号 + 姓名 + 地址+ 电话 + 邮编;

【4】本活动解释权归过往记忆大数据所有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Flink 和 Kafka 是一种分布式数据处理架构,可以帮助企业构建实时的、可靠的数据处理流程,为企业应用提供实时的数据服务。Flink 是 Apache 的一项开源项目,提供简单、高效、可靠的数据处理架构,Kafka 是一种分布式消息队列,支持高性能的消息传输。它们可以结合在一起,为企业提供实时数据处理能力。 ### 回答2: Kafka Flink数据处理架构是一种将Apache Kafka与Apache Flink集成的架构设计。Apache Kafka是一种高性能、可持久化、分布式流处理平台,而Apache Flink是一种强大的流处理框架。 在Kafka Flink数据处理架构中,Kafka作为数据源,负责收集、存储和分发数据。数据可以以流的形式实时流入Kafka,并被分为多个主题(topics)。每个主题可以有多个分区(partitions),以提高负载均衡和可伸缩性。 Flink作为数据处理引擎,连接到Kafka集群,实时处理从Kafka主题中读取的数据。Flink提供了各种功能和API来对数据进行转换、计算和分析,并将结果写回到Kafka主题或其他外部存储系统。 在Kafka Flink数据处理架构中,Flink提供了一些关键概念和机制来处理数据流。例如,窗口功能允许对数据流进行时间或其他属性的分段处理,以便进行聚合操作。流与表之间的无缝转换使得可以方便地进行复杂的流和批处理操作。 此外,Kafka Flink数据处理架构还支持故障处理和容错机制。Flink可以使用检查点机制来定期记录流处理应用程序的状态,并在故障恢复时恢复到最后一个一致的状态。 总而言之,Kafka Flink数据处理架构结合了Kafka和Flink的优势,为实时数据处理提供了可靠,高效和可伸缩的解决方案。它能够处理大量的数据流,并提供丰富的功能和灵活的API来满足不同的数据处理需求。 ### 回答3: Kafka Flink数据处理架构是一种常用的大数据处理架构,它结合了Apache Kafka和Apache Flink这两个开源项目的特性,实现了高效、可扩展的数据流处理。 在这个架构中,Apache Kafka充当着数据流引擎的角色。它是一个分布式的流处理平台,用于高吞吐量、低延迟的发布和订阅消息。Kafka以主题(topic)为单位组织数据流,生产者将数据发布到特定的主题,消费者则从主题中订阅和消费数据。Kafka保证了消息的持久化存储和高可用性,能够支持大规模的数据流处理。 而Apache Flink则是一个分布式流处理框架,用于在数据流中进行实时的、有状态的计算和分析。Flink提供了丰富的流处理操作符和函数,可以进行窗口聚合、数据转换、流量控制等操作。Flink具有低延迟、高吞吐量的特性,并且支持Exactly-once语义,保证了数据的准确性和一致性。 在Kafka Flink数据处理架构中,Kafka作为输入源和输出目的地,将数据流通过主题传输到FlinkFlink通过Kafka的消费者接口实时获取数据流,进行各种计算和处理操作,并将结果写回到Kafka的指定主题。这种架构可以实现大规模数据的实时流处理和分析,具有高度容错性和可伸缩性。 此外,Kafka Flink数据处理架构还支持和其他数据存储和计算系统的集成,可以将计算结果写回到数据库、数据仓库或其他存储系统中,也可以将处理过的数据传输给其他分布式计算框架进行更复杂的计算和分析。 总之,Kafka Flink数据处理架构是一个强大而灵活的大数据处理方案,能够支持实时流处理和分析,实现高效可扩展的数据处理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值