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

相关文章

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

SaaS、PaaS、IaaS简介

云计算、云服务、云平台……现在“云”已成了一个家喻户晓的概念,但PaaS, IaaS 和SaaS的区别估计还没有那么多的人分得清,下面就分别向大家普及一下它们的基本概念: SaaS 软件即服务 SaaS是Software-as-a-Service的简称,意思是软件即服务。随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。 它是一种通过Internet提供

LIBSVM简介

LIBSVM简介 支持向量机所涉及到的数学知识对一般的化学研究者来说是比较难的,自己编程实现该算法难度就更大了。但是现在的网络资源非常发达,而且国际上的科学研究者把他们的研究成果已经放在网络上,免费提供给用于研究目的,这样方便大多数的研究者,不必要花费大量的时间理解SVM算法的深奥数学原理和计算机程序设计。目前有关SVM计算的相关软件有很多,如LIBSVM、mySVM、SVMLight等,这些

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

新一代车载(E/E)架构下的中央计算载体---HPC软件架构简介

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。 时间不知不觉中,快要来到夏末秋初。一年又过去了一大半,成

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随