Apache Beam 架构原理及运用实际
作者头像
  • 2019-11-06 13:36:46 5

导读

大家好,很高兴有机会和大家分享关于Apache Beam的架构原理及其应用。在这个快速发展的IT行业中,我们不断地搬运数据,无论是前端还是后台服务器端开发。这两年来,各种数据库和数据源层出不穷,大数据组件和框架也日新月异,从Hadoop发展到现在的Spark、Flink等。那么,是否存在一种统一的数据搬运工具呢?

接下来,我们将介绍Apache Beam,这是一种一致性的数据处理框架,它可以帮助我们在不同的环境中进行高效的数据处理。

Apache Beam 是什么?

1. 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。

2. Apache Beam 的定义

Apache Beam是一种统一的数据处理框架,其目标是实现前后端一致的数据处理模型。其中,管道处理和逻辑处理由框架自身提供,而数据源和执行引擎则来自第三方。

Apache Beam 的优势

1. 一致性

数据源 - Apache Beam已经接入了34种Java数据源,还有7种正在接入。Python也有13种数据源。

编程模型 - Beam统一了流处理和批处理,提供了统一的API接口。

大数据引擎 - Beam支持多种大数据引擎,如Flink、Spark和DataFlow等。

2. 可移植性

Beam的程序可以在多种平台上运行,包括Flink、Spark等。

3. 可扩展性

Beam具有高度的可扩展性,可以根据需求扩展出新的技术需求,如自定义数据编码、集成Pulsar等。

4. 支持批处理和流处理

在AIoT领域,我们经常遇到两种数据:摄像头和传感器的实时报警信息以及不同数据库的数据。Beam可以同时支持这两种数据。

5. 支持多语言开发

Beam支持Java、Python、Go和Scala等多种语言,方便开发者使用自己擅长的语言进行开发。

6. 高度抽象的DAG

DAG(有向无环图)是Beam的重要组成部分,它可以简化开发人员的工作,提供高级操作。

Apache Beam 的架构设计

1. 总体架构

Apache Beam的总体架构由多种语言的SDKs组成,它们通过数据源进行管道逻辑操作,最后发布到大数据引擎上执行。

2. 部署流程

Apache Beam的部署流程包括构建Beam Job API,通过Job服务器和大数据执行平台,最终提交到Flink或Spark的作业集群执行。

Apache Beam 的核心组件分析

1. SDK + Pipeline + Runners

Beam程序由SDK、Pipeline和Runners组成,其中SDK负责编写管道,Pipeline负责处理数据,Runners负责执行任务。

2. SDK 是什么?

SDK是一个编写Beam管道的一部分,可以是一个客户端或类库组件,最终提交到大数据运行平台上执行。

3. Beam 版本与Kafka-clients依赖

Beam 2.6.0版本的API较为稳定,但在兼容性方面有所欠缺。Beam 2.4和2.5版本更受欢迎。

4. SDK Beam-sdks-java-io-kafka 源码分析

  • 指定KafkaIO模型:可以指定KafkaIO的数据类型为Long和String等。
  • 设置Kafka集群地址:通过withBootstrapServers()方法设置。
  • 设置主题类型:可以通过withTopic()方法设置。
  • 设置序列化类型:Beam简化了Kafka的序列化过程。
  • 设置消费者属性:可以通过updateConsumerProperties()方法设置。
  • 设置Kafka吞吐量的时间戳:可以通过withLogAppendTime()方法设置。
  • 设置读取模式:通过withReadCommitted()方法设置。
  • 设置自动提交属性:可以通过commitOffsetsInFinalize()方法设置。
  • 设置返回的元数据:可以通过withoutMetadata()方法设置。
  • 设置返回的值:可以通过apply(Values.create())方法设置。

5. Pipeline

  • 数据源:确定需要构建的数据源数量,并选择合适的SDK IO。
  • 数据类型:Beam处理键值对的数据类型,例如日志文本、格式化设备事件、数据库行等。
  • 数据处理:对数据进行转换、过滤、窗口计算等操作。
  • 数据输出:将处理后的数据写入指定的位置。

6. Runners

Runners在Beam模型中有四个支持维度:计算方式、数据计算范围、计算时机、处理迟到数据的方式。

如何构建AI微服务

在AIoT场景中,实时数据处理非常重要,例如视频分析、语音分析等。例如,130W路摄像头每秒产生300GB的数据。为了处理这种大规模数据,我们可以考虑使用Apache Beam。

1. 案例系统架构图

底层是Beam SDK,上层是抽象封装的输入输出组件、清洗组件、类型管理、第三方SDK等。

2. 示例架构图

  • 摄像头和AI设备:产生报警和抓取的信息上报到后端智能设备。
  • 智能设备:生成的AI分析结果通过网关集群传输。
  • 网关集群:负责数据传输,并根据规则进行数据清洗。
  • 消息中间件:负责数据转发。
  • 实时搜索引擎:存储实时数据。
  • ClickHouse:存储复杂查询、统计和报表数据。
  • BI套件:用于数据分析展示。

3. 示例代码

  • 创建管道工厂:首先创建管道工厂,然后设置执行引擎,读取Kafka的消息。
  • 序列化消息:将消息写入ES备份。
  • 转换数据:将Kafka数据转换成Row类型。
  • 写入ClickHouse:最后将数据写入ClickHouse。

4. 示例效果

  • 写入ES的效果展示。

结语

以上就是今天分享的内容,希望对大家有所帮助。感谢大家的聆听!

关于持续学习

嘉宾简介:

张海涛,海康威视金融事业部架构师,国际注册云安全系统认证专家。目前负责全国金融行业AI大数据的基础架构工作,主导建设过云基础平台的架构设计及核心开发,并自研大数据组件获得过国家发明专利。专注安防及AIoT云计算大数据方向,是Apache Beam中文社区发起人之一及ClickHouse开源社区的核心开发人员。

    本文来源:图灵汇
责任编辑: :
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
架构运用实际原理ApacheBeam
    下一篇