大家好,很高兴有机会和大家分享关于Apache Beam的架构原理及其应用。在这个快速发展的IT行业中,我们不断地搬运数据,无论是前端还是后台服务器端开发。这两年来,各种数据库和数据源层出不穷,大数据组件和框架也日新月异,从Hadoop发展到现在的Spark、Flink等。那么,是否存在一种统一的数据搬运工具呢?
接下来,我们将介绍Apache Beam,这是一种一致性的数据处理框架,它可以帮助我们在不同的环境中进行高效的数据处理。
大数据概念源于Google在2003年发布的三篇论文——GoogleFS、MapReduce、BigTable。遗憾的是,Google虽然发布了这些论文,但并未公开其源码。不过,Apache开源社区迅速发展,相继推出了Hadoop、Spark、Apache Flink等产品。而Google外部则主要采用闭源的BigTable、Spanner、Millwheel等技术。直到2016年2月,Google将其DataFlow项目贡献给了Apache基金会,成为Apache的一个顶级开源项目,这就是Apache Beam的前身。2017年5月17日,Apache Beam发布了首个稳定版本2.0。
Apache Beam是一种统一的数据处理框架,其目标是实现前后端一致的数据处理模型。其中,管道处理和逻辑处理由框架自身提供,而数据源和执行引擎则来自第三方。
数据源 - Apache Beam已经接入了34种Java数据源,还有7种正在接入。Python也有13种数据源。
编程模型 - Beam统一了流处理和批处理,提供了统一的API接口。
大数据引擎 - Beam支持多种大数据引擎,如Flink、Spark和DataFlow等。
Beam的程序可以在多种平台上运行,包括Flink、Spark等。
Beam具有高度的可扩展性,可以根据需求扩展出新的技术需求,如自定义数据编码、集成Pulsar等。
在AIoT领域,我们经常遇到两种数据:摄像头和传感器的实时报警信息以及不同数据库的数据。Beam可以同时支持这两种数据。
Beam支持Java、Python、Go和Scala等多种语言,方便开发者使用自己擅长的语言进行开发。
DAG(有向无环图)是Beam的重要组成部分,它可以简化开发人员的工作,提供高级操作。
Apache Beam的总体架构由多种语言的SDKs组成,它们通过数据源进行管道逻辑操作,最后发布到大数据引擎上执行。
Apache Beam的部署流程包括构建Beam Job API,通过Job服务器和大数据执行平台,最终提交到Flink或Spark的作业集群执行。
Beam程序由SDK、Pipeline和Runners组成,其中SDK负责编写管道,Pipeline负责处理数据,Runners负责执行任务。
SDK是一个编写Beam管道的一部分,可以是一个客户端或类库组件,最终提交到大数据运行平台上执行。
Beam 2.6.0版本的API较为稳定,但在兼容性方面有所欠缺。Beam 2.4和2.5版本更受欢迎。
withBootstrapServers()
方法设置。withTopic()
方法设置。updateConsumerProperties()
方法设置。withLogAppendTime()
方法设置。withReadCommitted()
方法设置。commitOffsetsInFinalize()
方法设置。withoutMetadata()
方法设置。apply(Values.create())
方法设置。Runners在Beam模型中有四个支持维度:计算方式、数据计算范围、计算时机、处理迟到数据的方式。
在AIoT场景中,实时数据处理非常重要,例如视频分析、语音分析等。例如,130W路摄像头每秒产生300GB的数据。为了处理这种大规模数据,我们可以考虑使用Apache Beam。
底层是Beam SDK,上层是抽象封装的输入输出组件、清洗组件、类型管理、第三方SDK等。
以上就是今天分享的内容,希望对大家有所帮助。感谢大家的聆听!
嘉宾简介:
张海涛,海康威视金融事业部架构师,国际注册云安全系统认证专家。目前负责全国金融行业AI大数据的基础架构工作,主导建设过云基础平台的架构设计及核心开发,并自研大数据组件获得过国家发明专利。专注安防及AIoT云计算大数据方向,是Apache Beam中文社区发起人之一及ClickHouse开源社区的核心开发人员。