用于基于吞吐量的自动缩放的 Beam Runner 挂钩

Beam Runner hooks for Throughput-based autoscaling

我很好奇是否有人可以指出我更深入地了解各种 Beam Runner 如何管理自动缩放。我们似乎在 'spin up' 和 'spin down' 阶段都遇到了问题,我们不知道该怎么办。这是我们特定流程的背景:

1- 二进制文件到达 gs://,对象通知及时通知 PubSub 主题。 2- 每个文件需要在标准 VM 上进行大约 1 分钟的解析,才能向 Beam DAG 的下游区域发出大约 30K 条记录。 3- 'Downstream' 组件包括 BigQuery 的插入、GS: 中的存储以及各种其他任务。 4- 第 1 步中的文件间歇性到达,通常每小时 200-300 个批次,我们认为这是自动缩放的理想用例。

然而,我们所看到的让我们有些困惑:

1- 看起来当 'workers=1' 时,Beam 有点吃不消了,最终导致了一些内存不足的错误,大概是因为第一个工人试图处理一些PubSub 消息再次需要大约 60 seconds/message 才能完成,因为在这种情况下 'message' 是二进制文件需要在 gs 中反序列化。 2- 在某些时候,跑步者(在这种情况下,具有 jobId 2017-11-12_20_59_12-8830128066306583836 的数据流)收到消息,需要额外的工作人员,现在可以完成真正的工作。在此阶段,错误减少,吞吐量增加。不仅 step1 的反序列化器更多,而且 step3/downstream 任务分布均匀。 3-唉,当 Dataflow 感觉到(我猜)有足够多的 PubSub 消息 'in flight' 开始稍微冷却时,上一步就被缩短了。这似乎来得太早了,工作人员在自己咀嚼 PubSub 消息时被拉了过来——甚至在消息被“确认”之前。

我们仍然对 Beam 感到兴奋,但我猜测不太理想的 spin-up/spin-down 阶段导致 VM 使用量比需要的多 50%。除了 PubSub 消费之外,跑步者还寻找什么?他们看 RAM/CPU/etc 吗???除了 ACK PubSub 消息以向运行器提供需要 more/less 资源的反馈之外,开发人员还能做些什么吗?

顺便说一下,如果有人怀疑 Google 对开源的承诺,我昨天和那里的一名员工谈到了这个话题,她表示有兴趣听听我的用例,尤其是如果它运行 在非 Dataflow 运行器上!我们还没有在 Spark(或其他地方)上尝试过我们的 Beam 工作,但显然很想知道是否有一个跑步者有超强的能力来接受工作人员对 THROUGHPUT_BASED 工作的反馈。

提前致谢, 彼得

首席技术官, ATS 公司

Dataflow 中的流式自动缩放通常是这样工作的:

  • Upscale:如果管道的积压基于当前吞吐量超过几秒,则管道被放大。这里CPU利用率不直接影响升迁量。使用 CPU(假设为 90%),无助于回答问题 'how many more workers are required'。 CPU 确实会间接影响,因为当管道不够用时就会落后 CPU 从而增加积压。
  • 缩减:当积压很低(即 < 10 秒)时,管道会根据当前 CPU 消费者进行缩减。在这里,CPU确实直接影响下码。

希望以上基本描述对您有所帮助。

由于启动新 GCE 虚拟机所涉及的固有延迟,管道会在调整大小事件期间暂停一两分钟。预计在不久的将来会有所改善。

我会针对您在描述中提到的工作提出具体问题。