Apache flink Flink State后端密钥原子性和分布

Apache flink Flink State后端密钥原子性和分布,apache-flink,Apache Flink,在阅读完flink文档(相关部分如下所述)后,我仍然没有完全理解原子性和密钥分布 考虑一个由KEYBE->平面图(包含一个MAP状态)组成的图,以及1个具有4个任务槽的并行性,FLink确保每个密钥在分布式环境中只存在一次(在一个任务槽中),它是原子单元吗? 提前感谢所有帮助者 您可以将键控状态视为已分区或切分的运算符状态,每个键只有一个状态分区。每个键控状态在逻辑上都绑定到一个唯一的组合,由于每个键“属于”一个键控运算符的一个并行实例,我们可以简单地将其视为 键控状态进一步组织为所谓的键组。键

在阅读完flink文档(相关部分如下所述)后,我仍然没有完全理解原子性和密钥分布

考虑一个由KEYBE->平面图(包含一个MAP状态)组成的图,以及1个具有4个任务槽的并行性,FLink确保每个密钥在分布式环境中只存在一次(在一个任务槽中),它是原子单元吗? 提前感谢所有帮助者

您可以将键控状态视为已分区或切分的运算符状态,每个键只有一个状态分区。每个键控状态在逻辑上都绑定到一个唯一的
组合,由于每个键“属于”一个键控运算符的一个并行实例,我们可以简单地将其视为

键控状态进一步组织为所谓的键组。键组是弗林克重新分配键控状态的原子单位;关键组的数量与定义的最大并行性完全相同。在执行过程中,键控操作符的每个并行实例与一个或多个键组的键一起工作


对于任何给定的并行操作符,具有相同键的所有事件都由相同的操作符实例处理——即,在相同的任务槽中

Flink将密钥组织为密钥组,每个密钥(及其状态)都与特定的密钥组永久关联。此外,每个任务槽负责处理一个或多个密钥组的密钥

您引用的文档使用短语“原子单元”来表示“不可分割”,当考虑重新缩放Flink作业时会发生什么情况(即,更改并行性时),这一点就变得非常重要

重新缩放Flink作业时,并行运算符的实例数将更改,这需要重新分配状态。完成状态的这种重新分配(或重新存储)的粒度不是逐键的,而是更大的——它是在键组级别完成的。因此,键组是重新分配键控状态的原子单元


有关此主题的更多信息,请参阅。

对于任何给定的并行运算符,具有相同键的所有事件都由相同的运算符实例处理——即,在相同的任务槽中

Flink将密钥组织为密钥组,每个密钥(及其状态)都与特定的密钥组永久关联。此外,每个任务槽负责处理一个或多个密钥组的密钥

您引用的文档使用短语“原子单元”来表示“不可分割”,当考虑重新缩放Flink作业时会发生什么情况(即,更改并行性时),这一点就变得非常重要

重新缩放Flink作业时,并行运算符的实例数将更改,这需要重新分配状态。完成状态的这种重新分配(或重新存储)的粒度不是逐键的,而是更大的——它是在键组级别完成的。因此,键组是重新分配键控状态的原子单元

有关此主题的更多信息,请参阅