Google Cloud dataflow streaming job简介

2023-10-08 07:15

本文主要是介绍Google Cloud dataflow streaming job简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简单介绍

首先 gcp 的dataflow 是1个ETL 组件, 它是基于Apache beam的

Apache beam 是1个较新的开源ETL 框架。
对于我们常用的ETL tool Spring batch 有下面的区别

  1. spring batch 更偏向batch (后台处理)的ETL, 而apache beam 同时支持batch 和 streaming 的ETL, 对streaming 的ETL 有更好的支持
  2. spring batch 基于java,apache beam SDK 支持 java, python 和 GO
  3. spring batch 更加轻量级, 但是依赖于1个关系数据存储ETL job(配置, 历史记录)数据. 而且不需要开发人员去设置. 而 Apache Beam本身并没有内置的作业执行历史记录功能 , 这些数据需要自己去记录处理(在runner上)
  4. spring batch 的运行环境需要自己搭建, 而apache beam 这是1个SDK,它只定义 ETL pipeline的流程, 它需要额外的runner去执行

apache beam 暂时支持下面的runner
GCP dataflow
Apache Flink
Apache Spark
AWS data analysic
Java direct runner(调试用)

所以对于日志记录更多地去交给runner去实现。

所以讲, dataflow 只是1个runner , 核心还是apache beam SDK





什么是streaming

在计算领域中,“streaming”(流式处理)是一种数据处理模式,它允许实时处理连续流入的数据,而不是一次性处理静态数据集。
传统的批处理模式是将数据分成固定大小的块(batch),然后对每个批次进行处理。这种方式适用于静态数据集,但对于实时数据流,它可能无法满足实时性和低延迟的要求。
流式处理模式通过连续接收和处理数据流,实现了实时性和低延迟。数据流可以是连续的数据记录、事件流、传感器数据等。流式处理系统会持续地接收数据流,并立即对其进行处理和分析,以产生实时的结果。
流式处理通常具有以下特点:
连续性:数据流是连续不断的,没有明确的开始和结束。处理系统需要实时接收和处理数据流,而不是等待所有数据到达后再进行处理。
实时性:流式处理系统需要尽可能快地处理数据,并产生实时的结果。这对于需要实时决策、监控和反馈的应用程序非常重要。
有限状态:流式处理系统通常使用有限的内存和状态来处理数据流。它们需要在有限的资源下有效地处理无限的数据流。
流式处理可以应用于各种场景,如实时分析、实时监控、实时推荐、欺诈检测等。流式处理框架(如Apache Flink、Apache Kafka Streams、Apache Beam等)提供了方便的工具和API来开发和部署流式处理应用程序。





1个例子

 public void process() {log.info("processing3...");DataflowPipelineOptions options = PipelineOptionsFactory.fromArgs("").as(DataflowPipelineOptions.class);options.setJobName("dataflow-exam3");options.setProject(this.projectId);options.setRegion("europe-west1");options.setTempLocation("gs://jason-hsbc-dataflow/tmp");options.setSubnetwork("regions/europe-west1/subnetworks/subnet-1");options.setNumWorkers(1);options.setStreaming(true);options.setDefaultWorkerLogLevel(DataflowWorkerLoggingOptions.Level.INFO);options.setNumberOfWorkerHarnessThreads(2);//options.setGcpCredential(new File(...));options.setRunner(DataflowRunner.class);log.info(getCurrentAccountName());Pipeline pipeline = Pipeline.create(options);/*** * The effect of using the @UnknownKeyFor annotation is to tell the Apache Beam framework that the PCollection does not need to be grouped or associated based on a specific key.* As a result, Apache Beam can perform more efficient parallel computations and optimizations for operations that do not require key associations.** * When the @NonNull annotation is applied to a PCollection element type, it indicates that elements in the PCollection are not allowed to be null.* This means that when processing data streams, the Apache Beam framework checks elements for non-nullability and issues warnings or errors at compile time to avoid potential null pointer exceptions.the @Initialized annotation informs the compiler that the variable has been properly initialized by marking it at variable declaration time to help detect possible null pointer exceptionsand improve the reliability and readability of the code. However, it should be noted that the @Initialized annotation is only an auxiliary tool, and correct logic and design still need to be ensured in the actual programming process.*/PCollection<@UnknownKeyFor @NonNull @Initialized PubsubMessage> message = pipeline.apply("Read Pub/Sub Messages", PubsubIO.readMessagesWithAttributesAndMessageId().fromSubscription("projects/jason-hsbc/subscriptions/SubscriptionA1"));PCollection<KV<String, String>> combinedMsg = message.apply("Extract", ParDo.of(new ExtractMessageAttributeFn())).apply("appying windowing", Window.into(FixedWindows.of(Duration.standardMinutes(1)))).apply("Group by fileName", GroupByKey.create()).apply("Combine Message",ParDo.of(new CombinedMessagesFn()));combinedMsg.apply("Write to GCS", ParDo.of(new WriteToGCSFn(this.bucketName,this.projectId)));//yupipeline.run().waitUntilFinish();pipeline.run();log.info("processing3... end!");}

上面定义了1个dataflow pipeline, 它会从pubsub 里读取消息, 并把数据作为文件存储到GCS中

我们知道pubsub 是1个streaming 传输的工具, 如果这个job 执行一次就接受, 其实意义不大。

假如这个dataflow pipeling 定义的是1个batch的job而非streaming, 我们需要引入其他组件 才能持续监控pubsub的消息

例如
data sender -> pubsub topic -> pubusb trigger -> cloud functioin -> dataflow job

或者
datasender -> pubsub topic -> push 类型的subscription -> http 服务(cloud run/GKE) -> dataflow job

但是上面代码例子, 它有一行
options.setStreaming(true);
显式制定这个job 是streaming的

但是其实dataflow 本身也会根据一些规则去决定这个job是否为streaming(例如数据源是否为pubsub等)
但是用代码指定会更加安心.





waitUntilFinish() 的作用

代码的最后 有两个方法触发dataflow job方法
分别是 pipeline.run() 和 pipeline.run().waitUntilFinish()

前者会直接执行完成, 不会等待job的状态去执行下一行代码
而后者会等待job执行完成并返回状态结果。

但是, 如果是1个streaming的job的话, waitUntilFinish() 是无意义的, 因为streaming的job就是要长期运行(监控数据源)的啊

这篇关于Google Cloud dataflow streaming job简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/163612

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-