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

Google cloud dataflow 步骤之间的数据流控制高扇出,google-cloud-dataflow,apache-beam,google-cloud-pubsub,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,我在数据流管道中有3个数据流步骤 从pubsub读取,保存在表中,并拆分为多个事件(放入上下文输出) 对于每个拆分,查询db并使用其他数据装饰事件 发布到另一个pubsub主题以进行进一步处理 问题: 在步骤1之后,将其拆分为10K到20K事件 现在,在步骤2中,它的数据库连接已用完。(我有一个静态hikari连接池) 它工作非常好,将减少数据量。我使用的是n1-standard-32机器 我应该如何将输入限制到下一步?因此,并行性将受到限制或限制事件进入下一步。我认为基本思想是在执行步骤2时降

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

  • 从pubsub读取,保存在表中,并拆分为多个事件(放入上下文输出)
  • 对于每个拆分,查询db并使用其他数据装饰事件
  • 发布到另一个pubsub主题以进行进一步处理
  • 问题:
    在步骤1之后,将其拆分为10K到20K事件

    现在,在步骤2中,它的数据库连接已用完。(我有一个静态hikari连接池)

    它工作非常好,将减少数据量。我使用的是n1-standard-32机器


    我应该如何将输入限制到下一步?因此,并行性将受到限制或限制事件进入下一步。

    我认为基本思想是在执行步骤2时降低并行性(如果您有大量并行性,则20k事件需要20k连接,因为20k事件是并行处理的)

    这些想法包括:

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

  • 每个捆绑包一个连接。您可以在startBundle初始化一个连接,并使同一个bundle中的元素使用同一个连接(如果我的理解是正确的,在bundle中,执行可能是序列化的)


  • 在步骤2中,您认为每个捆绑包设置一个连接的想法是否可行?ParDo的startBundle API允许您对每个捆绑包进行一些初始化。是的,您尝试过使用200个捆绑包。仍然给出了相同的错误。
    20k事件,因为20k事件是并行处理的
    并行性不受机器内核的限制吗?我说的是一个极端情况。