我很难理解GCP数据流/Apache Beam和Spring Cloud数据流之间的差异。我试图做的是转向一个更云原生的解决方案,用于流数据处理,这样我们的开发人员可以更专注于开发核心逻辑,而不是管理基础设施。
我们有一个现有的流解决方案,由Spring云数据流“模块”组成,我们可以独立迭代和部署,就像微服务一样,效果很好,但我们希望迁移到我们的业务提供的GCP现有平台,要求我们使用GCP数据流。在高级别上,解决方案很简单:
流1:
Kafka Source (S0) -> Module A1 (Ingest) -> Module B1 (Map) -> Module C1 (Enrich) -> Module D1 (Split) -> Module E1 (Send output to Sink S1)
流2:
Kafka Source (S1) -> Module A2 (Ingest) -> Module B2 (Persist to DB) -> Module B3 (Send Notifications through various channels)
根据我的理解,我们想要移动到的解决方案应该是相同的,但是模块将成为GCP数据流模块,并且源/接收器将成为GCP Pub/Sub而不是kafka。
我遇到的大多数文档都没有将SCDF和Apache Beam(GCP数据流模块)作为类似的解决方案进行比较,因此我想知道如何/是否有可能将我们现有的逻辑移植到这样的架构。
如有任何澄清,我们将不胜感激。提前谢谢。
首先澄清:Spring云数据流与GCP数据流完全不同。
Spring云数据流与Apache Beam相当。两者都有一个用于描述数据转换的框架,如ETL。
GCP数据流是一个托管在GCP上的自动可扩展和管理平台。它接受用Apache Beam框架描述的处理流。GCP数据流负责运行管道,根据管道要求生成虚拟机的数量,将流调度到这些虚拟机,。。。
Apache Beam是一个具有许多连接器的开源项目。在GCP上有很多(因为它最初是一款开源的谷歌产品),但也有其他连接器,比如Kafkaio连接器。
Beam还集成了不同的运行器:DirectRunner用于在当前机器上运行管道,DataflowRunner用于在GCP Dataflow上运行它,SparkRunner用于在Hadoop Spark集群上运行它,...
这是一个很棒的解决方案,但与Spring云数据流没有任何直接关系、遵从性和可移植性。您必须重写代码以从一个传递到另一个。
希望这对你的理解有所帮助
我想在@guillaume-blaquiere的回复中添加1:“重写代码”。让我也在这个主题上增加一点色彩。
SCDF概述:
Spring云数据流(SCDF)的核心只是一个RESTful服务,甚至是一个轻量级的Spring Boot应用程序。这就是全部。它不需要运行时来运行;Boot应用程序可以在任何有Java的地方运行,包括在笔记本电脑或任何容器平台(k8s、cf、nomad等)中,在任何云(aws、gcp、azure等)上。
SCDF(Boot App/Über-jar)附带仪表板、Shell/CLI和API,因此开发人员和运营商可以使用它们来设计和部署流或批处理数据管道。
SCDF中的数据管道由Spring云流或Spring云任务应用程序组成。由于这些是独立和自主的微服务应用程序,用户可以单独修补或滚动升级单个应用程序,而不会影响数据管道中的上游或下游应用程序-此处提供了有关架构的更多详细信息。
SCDF与GCDF:
Spring Cloud Stream和Spring Cloud任务与Apache Beam大致相当。这些是SDK/库。
另一方面,SCDF与Google Cloud Dataflow(GCDF)中的数据管道有一些相似之处,但GCDF中的模块预计将使用Apache Beam构建。换句话说,您不能将在SCDF到GCDF中运行的Spring Boot流媒体/批处理微服务作为模块运行——您必须使用Apache Beam API重写它们。SCDF和GCDF基金会直接依赖于上述各自的框架及其能力。
另一个需要强调的重要区别是运行Apache Beam模块所需的运行时组件。在GCDF中,所有运行时/运行者期望都对用户隐藏,因为它是由GCP管理的。然而,在SCDF中,要以高度可扩展的方式运行它,您可以选择自己选择的平台。SCDF在平台上作为本机容器应用程序运行。
GKE/GCP上的SCDF:
您可以在GCP上提供一个GKE集群,并使用SCDF的Helm图表在Kubernetes本地运行SCDF和当前的流/批处理(Spring启动)应用程序,作为GCP上的托管服务。
使用标准的GCP提供的存储/文本文件来发布Sub数据流模板,但是尽管我已经设置了#workernodes eq 1,但是对于下游组件来说,处理的消息吞吐量“太高”。 在 Pub/Sub 中的消息事件上运行的 Cloud 函数会命中 GCP 配额,并且使用 CloudRun,我在开始时收到一堆 500、429 和 503 个错误(由于步进突发率)。 有没有办法控制数据流的处理速率?需要获得更软/更慢
我正在构建一个事件驱动的微服务架构,它应该是云不可知的(尽可能多)<由于这最初是在GCP中进行的,我不想在配置和所有这些方面花费太长时间,我打算直接将GCP的发布/订阅用于事件队列,并在稍后处理其他云实现,但后来我遇到了Spring云数据流,这看起来很好,因为这些是Spring Boot微服务,我需要一种方法来协调它们 Spring Cloud数据流是否支持Pub Sub作为事件队列? 在配置和设
我已经通过。但是,我注意到Reshuffle()没有出现在发行版中。这是否意味着我将不能在任何数据流管道中使用?有什么办法可以绕过这个吗?或者pip包可能只是不是最新的,如果Reshuffle()在github的master中,那么它将在Dataflow上可用? 根据对这个问题的回答,我试图从BigQuery中读取数据,然后在将数据写入GCP存储桶中的CSV中之前对数据进行随机化。我注意到,我用来
严格的单向数据流是 Redux 架构的设计核心。 这意味着应用中所有的数据都遵循相同的生命周期,这样可以让应用变得更加可预测且容易理解。同时也鼓励做数据范式化,这样可以避免使用多个且独立的无法相互引用的重复数据。 如果这些理由还不足以令你信服,读一下 动机 和 Flux 案例,这里面有更加详细的单向数据流优势分析。虽然 Redux 不是严格意义上的 Flux,但它们有共同的设计思想。 Redux
有时,您希望发送非常巨量的数据到客户端,远远超过您可以保存在内存中的量。 在您实时地产生这些数据时,如何才能直接把他发送给客户端,而不需要在文件 系统中中转呢? 答案是生成器和 Direct Response。 基本使用 下面是一个简单的视图函数,这一视图函数实时生成大量的 CSV 数据, 这一技巧使用了一个内部函数,这一函数使用生成器来生成数据,并且 稍后激发这个生成器函数时,把返回值传递给一个