【发布时间】:2021-12-16 07:37:11
【问题描述】:
因此,例如,如果我有按键 A 的事件和按键 B 的事件以及 2 的并行度。所有带有键 A 的事件都进入一个任务槽,而键 B 的事件进入另一个任务槽?
如果我只使用密钥 A 按顺序获取事件会发生什么。它们是否也被分配到两个任务槽。这是否意味着我失去了它们来的顺序?
【问题讨论】:
标签: parallel-processing streaming apache-flink data-stream
因此,例如,如果我有按键 A 的事件和按键 B 的事件以及 2 的并行度。所有带有键 A 的事件都进入一个任务槽,而键 B 的事件进入另一个任务槽?
如果我只使用密钥 A 按顺序获取事件会发生什么。它们是否也被分配到两个任务槽。这是否意味着我失去了它们来的顺序?
【问题讨论】:
标签: parallel-processing streaming apache-flink data-stream
不,这不是它的工作原理。
发生的情况是,每个键都映射到一个键组,其中键组的总数由集群的最大并行度(配置设置)决定。然后将键组映射到任务槽。如果有两个键和两个槽,则完全有可能将两个键分配到同一个槽。
key的key组是:
MathUtils.murmurHash(key.hashCode()) % maxParallelism
一个密钥组的槽是:
keyGroup * actualParallelism / maxParallelism
关于维护排序,见https://stackoverflow.com/a/69094404/2000823和https://stackoverflow.com/a/69757412/2000823。
【讨论】: