在Dataflow 2.1.0中是否有IntrabundleParallelization的替代方案?

时间:2017-10-30 20:45:29

标签: google-cloud-dataflow dataflow

根据数据流2.X的发行说明,删除了IntraBundleParallelization。有没有办法在数据流2.1.0上控制/增加DoFns的并行性?

当我在1.9.0版本的数据流上使用IntrabundleParallelization时,我的性能越来越好。

1 个答案:

答案 0 :(得分:1)

它已被删除,因为它的实现会在调用完成后对trait Synchronizable[A,B] { type S <: Synchronizable[_, _] val slaves = MutableList.empty[S] // Create list in trait. def synchronizeWith(q: S) = { if (!slaves.contains(q)) slaves += q } } class SomeClass[A, B] extends Synchronizable[A, B] { override type S = SomeClass[_, _] } 调用的ProcessContext进行处理,这是不安全的,并且无法保证可以正常工作。

但是,我同意这是一个有用的抽象,不幸的是我们还没有替代品。

作为解决方法,您可以尝试以下操作:

  • 在您的DoFn ProcessElement中,创建一个包含所需线程数的@Setup
  • 在您的DoFn Executor中,创建一个包裹执行者的@StartBundle
  • ExecutorCompletionService中,向其提交@ProcessElement,表示处理元素的结果
  • Future@ProcessElement poll()完成未来并输出结果
  • CompletionService中,等待所有剩余的期货完成,输出结果并关闭@FinishBundle

请记住使用期货中的CompletionServiceProcessContext只能在当前线程和当前ProcessContext调用中使用。

相关问题