首页 > 解决方案 > Flink 流式处理:事件是否根据它们的键分别分配到每个任务槽?

问题描述

因此,例如,如果我有事件与键 A 和事件与键 B 和并行度为 2。是否所有具有键 A 的事件都进入一个任务槽,而键 B 的事件进入另一个任务槽?

如果我只使用密钥 A 按顺序获取事件会发生什么。它们是否也被分配到两个任务槽。这是否意味着我失去了它们来的顺序?

标签: parallel-processingstreamingapache-flinkdata-stream

解决方案


不,这不是它的工作原理。

发生的情况是每个键都映射到一个键组,其中键组的总数由集群的最大并行度(配置设置)决定。然后将键组映射到任务槽。如果有两个键和两个槽,则完全有可能将两个键分配到同一个槽。

密钥的密钥组是:

MathUtils.murmurHash(key.hashCode()) % maxParallelism

密钥组的插槽是:

keyGroup * actualParallelism / maxParallelism

至于维护排序,请参阅https://stackoverflow.com/a/69094404/2000823https://stackoverflow.com/a/69757412/2000823


推荐阅读