Dataflow GroupByKey 对于小 window 的流式管道非常慢(最好是 2 秒)
Dataflow GroupByKey is very slow for streaming pipeline with small window (preferably 2 seconds)
我有一个简单的数据流管道配置为 2 秒固定 windows。它从 pub/sub 中读取,将消息反序列化为对象,记录对象,按给定键对对象进行分组,然后对分组的对象进行一些处理。请记住,这是一个从 1 个 VM 开始的数据流作业(不像它甚至需要进行随机播放,因为它只有 1 个 VM)。而且它只看到几个(比如 2-3 个)messages/sec.
| "read_messages" >> io.ReadFromPubSub(subscription=input_topic_subscription_path)
| "window" >> WindowInto(FixedWindows(2))
| "deser_obj" >> ParDo(DeSerializeToObject())
| "key_by_id" >> WithKeys(lambda obj: obj.id)
| "group_by_player_id" >> GroupByKey()
| "process_group" >> ParDo(ProcessGroup())
我看到的问题是 GroupByKey 持续花费大约 36 秒。 process_group
阶段的日志总是比 deser_obj
阶段的日志晚 25-40 秒。因此,管道的 data freshness
大约需要 36 秒。这似乎没有意义:拥有一个以 2 秒微批次处理的流式管道,但每个微批次需要 36 秒才能完成。
我什至完全遵循了这个 GCP 教程,结果是一样的(即每个 window 需要 36 秒,GroupByKey 是瓶颈):https://cloud.google.com/pubsub/docs/pubsub-dataflow#python
Dataflow 不是设计为以小时间间隔(如 2 秒微批次)进行流式传输吗?根据我看到的数字,如果您的流媒体需求的 SLA > 40 秒,我只推荐数据流流媒体。
数据流(尚未)调整为处理 10 秒以下的延迟是正确的,尽管 36 秒似乎有点慢。仅供参考,ReadFromPubSub 确实引入了随机播放以确保恰好一次,即没有重复),并且 GroupByKey 也进行了完整的分布式随机播放,尽管只有一个虚拟机。
我有一个简单的数据流管道配置为 2 秒固定 windows。它从 pub/sub 中读取,将消息反序列化为对象,记录对象,按给定键对对象进行分组,然后对分组的对象进行一些处理。请记住,这是一个从 1 个 VM 开始的数据流作业(不像它甚至需要进行随机播放,因为它只有 1 个 VM)。而且它只看到几个(比如 2-3 个)messages/sec.
| "read_messages" >> io.ReadFromPubSub(subscription=input_topic_subscription_path)
| "window" >> WindowInto(FixedWindows(2))
| "deser_obj" >> ParDo(DeSerializeToObject())
| "key_by_id" >> WithKeys(lambda obj: obj.id)
| "group_by_player_id" >> GroupByKey()
| "process_group" >> ParDo(ProcessGroup())
我看到的问题是 GroupByKey 持续花费大约 36 秒。 process_group
阶段的日志总是比 deser_obj
阶段的日志晚 25-40 秒。因此,管道的 data freshness
大约需要 36 秒。这似乎没有意义:拥有一个以 2 秒微批次处理的流式管道,但每个微批次需要 36 秒才能完成。
我什至完全遵循了这个 GCP 教程,结果是一样的(即每个 window 需要 36 秒,GroupByKey 是瓶颈):https://cloud.google.com/pubsub/docs/pubsub-dataflow#python
Dataflow 不是设计为以小时间间隔(如 2 秒微批次)进行流式传输吗?根据我看到的数字,如果您的流媒体需求的 SLA > 40 秒,我只推荐数据流流媒体。
数据流(尚未)调整为处理 10 秒以下的延迟是正确的,尽管 36 秒似乎有点慢。仅供参考,ReadFromPubSub 确实引入了随机播放以确保恰好一次,即没有重复),并且 GroupByKey 也进行了完整的分布式随机播放,尽管只有一个虚拟机。