Google Dataflow Key Distribution On Reshuffle After Autoscaling Event

问题描述 投票:0回答:1

当我的数据流作业从 45 个工作节点扩展到 100 个节点时,我遇到了一些带有键控状态的奇怪行为。

我的代码是键入输入数据,然后使用 Reshuffle 函数重新分配键。洗牌后的第一个 ParDo 函数对每个键的数据执行序列检查,并将最后一个序列号存储在状态变量中,因此它可以将下一条消息与其进行比较。数据在kafka中排序。

发生自动缩放事件后,先前处理的状态似乎不再适用于给定键。这是数据流中的预期行为吗?当发生自动缩放时,是否会重新计算数据流中的关键范围?如果是这样,是否意味着我需要将处理后的序列号存储在外部数据存储中,以便我可以在每次自动缩放事件后重建?我在 Google 文档上找不到任何关于自动缩放期间密钥分发会发生什么的官方文档。

google-cloud-dataflow apache-beam
1个回答
0
投票

你可能看到的是重试。如果自动缩放事件发生在状态被持久化之前,那么事件将在新机器上重试。数据流保证在管道内恰好一次,因此如果在新工作人员上重试输入事件,则新工作人员的状态也必须反映这些事件之前的状态。

如果您使用日志记录来确定状态已写入,您将观察到这些重试。然而,状态是持久的,由于这些重试,它不一定与您的日志语句一致。

© www.soinside.com 2019 - 2024. All rights reserved.