Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud dataflow 当写入接收器时必须保留事件时间顺序时,apache beam是一个不错的选择吗?_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

Google cloud dataflow 当写入接收器时必须保留事件时间顺序时,apache beam是一个不错的选择吗?

Google cloud dataflow 当写入接收器时必须保留事件时间顺序时,apache beam是一个不错的选择吗?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我正在考虑使用ApacheBeam编写一个流式管道,以应用一个突变流,按照事件时间的顺序将事件从源数据库复制到目标数据库。来源可以是卡夫卡或pubsub 例如,除了突变应用于库的顺序必须与它们到达的顺序相同之外,其他类似 我确实回顾了之前关于维护秩序的一些问题: -这似乎与我感兴趣的用例相同 我知道如果我沿着阿帕奇梁路走,我必须 选择可容纳延迟数据的窗口策略(具有允许延迟的固定窗口策略或具有全局窗口的固定窗口策略,具有用于为延迟数据发出窗格和缓冲区的触发器) 应用变换 GroupByKey

我正在考虑使用ApacheBeam编写一个流式管道,以应用一个突变流,按照事件时间的顺序将事件从源数据库复制到目标数据库。来源可以是卡夫卡或pubsub

例如,除了突变应用于库的顺序必须与它们到达的顺序相同之外,其他类似

我确实回顾了之前关于维护秩序的一些问题:

  • -这似乎与我感兴趣的用例相同
我知道如果我沿着阿帕奇梁路走,我必须

  • 选择可容纳延迟数据的窗口策略(具有允许延迟的固定窗口策略或具有全局窗口的固定窗口策略,具有用于为延迟数据发出窗格和缓冲区的触发器)
  • 应用变换
  • GroupByKey在单个键上进行排序(以便所有内容都进入同一个工作进程),并将其写入接收器
  • 除上述内容外,我还必须确保窗口(如果我遵循固定窗口策略)按顺序执行。步骤3注定是瓶颈

    如果步骤列表中的[2]需要大量计算,那么利用beam提供的并行性是有意义的。但是,如果[2]只是一个简单的一对一映射,那么ApacheBeam对这个复制用例有意义吗。如果我遗漏了什么,请告诉我


    注意:我们确实在数据流上有一个批处理管道,使用apache beam将gcs上的数据转储加载到数据库,其中所有数据都在磁盘上,写入接收器的顺序无关紧要。

    保留顺序是可能的,但不确定这是直接的还是有效的

    它还取决于您期望的数据量(每秒元素数)以及接收器类型。您可能会让管道将有序条目写入GCS,而接收器只是作为辅助进程按顺序读取文件

    您的另一个选择是,使用并行写入并确保数据库仅在最后一个beam阶段的输出水印时间之前可用,这可能是可行的,但实际上并不是Dataflow/Apache beam的核心用例

    也许有办法无序地处理流,但要写入一个中间接收器,以便按顺序轻松地读取。i、 e.写出带有步骤或文件编号的突变批次,当应用于最终接收器时,可以轻松使用该步骤或文件编号来排序文件

    窗口+写入最终接收器的体系结构将很难正确实现,对于低容量的元素来说可能太复杂,对于大容量的元素来说效率太低。这是一个很好的例子


    但是,请再次记住,所有这些方法绝对不是Dataflow/Apache Beam的核心用例。

    因为您希望保证事件的顺序,所以Kafka将是一种更好的方法,如中所述,Pub/Sub不强调对顺序的需要,因为它不是为了这个目的。看一看。如果你想有一个全局排序,你只需要有一个分区的主题。谢谢你的答复。我的问题不是使用pub/sub和kafka。我的问题是关于处理子系统的。即使我使用kafka(带有一个分区)和ApacheBeam,它也不能保证顺序。正如我上面提到的,保证订单的唯一方法是在单个键上使用groupby。我想知道这是否是对apache beam的有效使用。使用apache beam时的另一个选择是进行并行写入,并确保数据库仅在最后一个beam阶段的输出水印时间(需要数据库支持)之前可用。感谢您花时间给出答案。1) 您设想的第二个过程将把GCS中的有序条目写入接收器-我假设这超出了beam的范围?2) 关于确保数据库仅在输出水印时间之前可用的第二个选项,管道阶段的输出水印时间是否可用于外部系统?3) “窗口+写入到最终接收器架构”是指问题中的“窗口+排序+写入”模型以确保顺序,还是回答中的中间接收器模型?