[英]When using Broadcast Stream in Flink,the broadcast state of different subtasks of the same operator is isolated or shared?
[英]Issue managing state of an operator for messages with the same timestamp using Flink
在并行处理具有相同密钥和相同时间戳的消息期间,我似乎在管理 state 时遇到了问题。
对于(简化的)示例,让我们假设一个简单的DoFn<Key, Long>
和一个ValueState<Long>
。
@ProcessElement
public void processElement(
final ProcessContext c,
@StateId(STATE_ID)
final ValueState<Long> someState) {
final long val = c.element().value();
final long currentSum = Optional.ofNullable(someState.read()).orElse(0L);
final long newSum = currentSum + val;
someState.write(newSum);
}
这个 state 在某个定时器上间歇性地输出。
我的问题是在有 2 个元素A
和B
的情况下,它们都具有相同的Key
和时间戳。 state 中的值是5
, A
的值是 3, B
的值是 4。人们会期望someState
在处理这两个元素后的值是 12。我的问题是这有保证吗? 也就是说,是否会对A
和B
应用一些排序元素 - 或者是否可能存在竞争条件,即 state 中的值可以间歇地为 8 或 9,具体取决于首先处理A
还是B
(注意:这是我正在处理的简化版本,但我相信这是我们的管道正在发生的不确定行为)。 如果这个假设是正确的,我可以采取什么方法来解决这个问题?
提前谢谢大家!
不存在由相同时间戳引起的竞争条件。 您将被调用两次,每个元素一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.