在阅读了flink文档之后(下面提到的相关部分)我仍然没有完全理解原子性和密钥分布。
\n\n即考虑一个由 keyby->flatmap(包含映射状态)组成的图,并行度设置为 1,有 4 个任务槽,flink 是否确保每个键在分布式环境中只存在一次(在一个任务槽中),是吗?原子单位?\n提前感谢所有帮助者。
\n\n\n\n您可以将键控状态视为已分区或分片的操作员状态,每个键只有一个状态分区。每个键控状态在逻辑上都绑定到 的唯一组合
\n\n<parallel-operator-instance, key>,并且由于每个键 \xe2\x80\x9c 都属于\xe2\x80\x9d 恰好是键控运算符的一个并行实例,因此我们可以将其简单地视为<operator, key>。键控状态进一步组织成所谓的键组。Key Groups 是 Flink 可以重新分配 Keyed State 的原子单元;关键组的数量与定义的最大并行度完全相同。在执行期间,键控运算符的每个并行实例都使用一个或多个键组的键。
\n
对于任何给定的并行运算符,具有相同键的所有事件都由同一运算符实例处理——即在同一任务槽中。
Flink 将密钥组织成密钥组,每个密钥(及其状态)都与特定的密钥组永久关联。此外,每个任务槽负责处理一个或多个密钥组的密钥。
您引用的文档使用短语“原子单元”来表示“不可分割”,当考虑重新调整 Flink 作业时(即更改并行性时)会发生什么时,这一点变得相关。
当 Flink 作业重新缩放时,并行算子的实例数量会发生变化,这需要重新分配状态。状态重新分配(或重新分片)的粒度不是逐个键,而是更大——它是在键组级别完成的。因此,密钥组是重新分配密钥状态的原子单元。
有关此主题的更多信息,请参阅data Artisans 博客文章中有关“Flink 中的状态和重新扩展有状态流作业”的部分。
| 归档时间: |
|
| 查看次数: |
838 次 |
| 最近记录: |