在 Flink 的 Operator 之间共享状态
Share state among operators in Flink
不知道Flink是否可以在算子之间共享状态
例如,我在操作符上按键进行分区,我需要分区 C
内的分区 A
的一段状态(出于任何原因)(图 1.a),或者我需要下游运算符 F
中运算符 C
的状态(图 1.b)。
我知道可以 broadcast
记录到所有分区。因此,如果您在记录中包含运算符的内部状态,则可以与下游运算符共享您的内部状态。
然而,这可能是一个昂贵的操作,而不是简单地让 op1
专门要求 op2
状态。
最近围绕可查询状态的发展是朝着这个概念发展还是它们只是为了让外部用户查询拓扑的内部状态?
提前感谢您的见解
一般情况下,Flink的设计不允许对相同或不同算子的其他子任务的状态进行读写。如您所说,您可以使用 broadcast
使状态全局可用。可查询状态功能用于外部用户查询。
但是,我听说有用户在一个运算符中利用此功能从同一作业的其他运算符中获取数据。我不知道这有多好(稳定性和性能方面)。如果您想尝试一下,我会向您指出用户邮件列表以获得更深入的技术讨论。
不知道Flink是否可以在算子之间共享状态
例如,我在操作符上按键进行分区,我需要分区 C
内的分区 A
的一段状态(出于任何原因)(图 1.a),或者我需要下游运算符 F
中运算符 C
的状态(图 1.b)。
我知道可以 broadcast
记录到所有分区。因此,如果您在记录中包含运算符的内部状态,则可以与下游运算符共享您的内部状态。
然而,这可能是一个昂贵的操作,而不是简单地让 op1
专门要求 op2
状态。
最近围绕可查询状态的发展是朝着这个概念发展还是它们只是为了让外部用户查询拓扑的内部状态?
提前感谢您的见解
一般情况下,Flink的设计不允许对相同或不同算子的其他子任务的状态进行读写。如您所说,您可以使用 broadcast
使状态全局可用。可查询状态功能用于外部用户查询。
但是,我听说有用户在一个运算符中利用此功能从同一作业的其他运算符中获取数据。我不知道这有多好(稳定性和性能方面)。如果您想尝试一下,我会向您指出用户邮件列表以获得更深入的技术讨论。