步骤之间的数据流控制高扇出

时间:2019-07-03 12:29:16

标签: apache google-cloud-dataflow apache-beam google-cloud-pubsub

我在数据流管道中有3个数据流步骤。

  1. 从pubsub读取,保存在表中并拆分为多个事件(放入上下文输出)。
  2. 对于每个拆分,查询db并用其他数据装饰事件。
  3. 发布到另一个pubsub主题以进行进一步处理。

问题:
在第1步之后,其分为10K到20K事件。

现在在第2步中耗尽数据库连接。 (我有一个静态的hikari连接池)。

它的工作原理绝对好,将减少数据。我正在使用一台n1-standard-32机器。

我应该怎么做才能将输入限制为下一步?这样就可以限制并行性或限制事件进入下一步。

1 个答案:

答案 0 :(得分:1)

我认为基本思想是在执行步骤2时减少并行性(如果您具有大量并行性,则由于20k个事件是并行处理的,因此需要20k个连接来处理20k个事件)。

想法包括:

  1. 有状态ParDo的执行是按每个窗口的每个键序列化的,这意味着有状态ParDo只需一个连接,因为在给定的时间,一个键和一个窗口只应处理一个元素。

    < / li>
  2. 每个捆绑包一个连接。您可以在startBundle处初始化连接,并使同一包中的元素使用相同的连接(如果我的理解是正确的,则在包中,执行可能会序列化)。