Flink State后端密钥atomicy和distribution

时间:2017-08-17 14:34:04

标签: apache-flink

在阅读了flink文档后,(下面提到的相关部分)我仍然没有完全理解原子性和密钥分发。

即考虑由keyby-> flatmap(包含地图状态)组成的图形,并将并行性设置为1,具有4个任务槽,flink确保每个密钥在分布式环境中仅存在一次(在一个任务槽中) ,它是原子单位吗? 提前感谢所有帮助者。

  

您可以将Keyed State视为已分区或分片的运营商状态,每个密钥只有一个状态分区。每个键控状态在逻辑上绑定到<parallel-operator-instance, key>的唯一复合,并且由于每个键“属于”键控运算符的一个并行实例,因此我们可以将其简单地视为<operator, key>

     

键控状态进一步组织成所谓的密钥组。密钥组是Flink可以重新分配密钥状态的原子单元;密钥组与定义的最大并行度完全一样多。在执行期间,键控运算符的每个并行实例都使用一个或多个密钥组的密钥。

1 个答案:

答案 0 :(得分:2)

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

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

您引用的文档使用短语&#34;原子单位&#34;意味着&#34;不可分割&#34;,当考虑重新调整Flink作业时(即,并行性发生变化时)会发生什么,这就变得相关。

重新调整Flink作业时,并行运算符的实例数将发生变化,这需要重新分配状态。完成状态重新分配(或重新分配)的粒度不是按键密钥,而是更大 - 它是在密钥组级别完成的。因此,关键组是重新分配键控状态的原子单元。

有关此主题的更多信息,请参阅the section of a data Artisans blog post about "State in Flink and Rescaling Stateful Streaming Jobs"