gpt4 book ai didi

mysql - 一种从 Apache Beam 中的有界源定期执行管道的方法

转载 作者:行者123 更新时间:2023-11-29 01:19:41 24 4
gpt4 key购买 nike

我有一个管道从 MySQl 服务器获取数据并使用 DataFlow Runner 插入到数据存储中。它作为执行一次的批处理作业运行良好。问题是我想近乎实时地将新数据从 MySQL 服务器获取到数据存储中,但是 JdbcIO 将有界数据作为源(因为它是查询的结果),所以我的管道只执行一次。

我是否必须每 30 秒执行一次管道并重新提交数据流作业?或者有没有办法让管道自动重做而无需提交另一个作业?

与题目相似Running periodic Dataflow job但我找不到 CountingInput 类。我认为它可能因 GenerateSequence 类而改变,但我真的不明白如何使用它。

欢迎任何帮助!

最佳答案

这是可能的,您可以通过多种方式实现。这取决于您的数据库的结构以及它是否承认有效地查找自上次同步以来出现的新元素。例如,您的元素是否有插入时间戳?您能否负担得起在 MySQL 中包含已保存到 Datastore 的最后一个时间戳的另一个表?

  • 您确实可以使用 GenerateSequence.from(0).withRate(1, Duration.standardSeconds(1))那会给你一个 PCollection<Long>每秒发射 1 个元素。你可以搭载那个 PCollectionParDo (或更复杂的转换链)进行必要的周期性同步。你可能会发现 JdbcIO.readAll()方便,因为它可以占用 PCollection查询参数,因此每次 PCollection 中的新元素都可以触发出现。

  • 如果MySql的数据量不是很大(最多几十万条记录),可以使用Watch.growthOf()转换以持续轮询整个数据库(使用常规 JDBC API)并发出新元素。

也就是说,Andrew 建议的(向 Pubsub 额外发送记录)也是一种非常有效的方法。

关于mysql - 一种从 Apache Beam 中的有界源定期执行管道的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48712142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com