繁体   English   中英

使用 Flink 管理具有相同时间戳的消息的操作员的 state 问题

[英]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 个元素AB的情况下,它们都具有相同的Key和时间戳。 state 中的值是5A的值是 3, B的值是 4。人们会期望someState在处理这两个元素后的值是 12。我的问题是这有保证吗? 也就是说,是否会对AB应用一些排序元素 - 或者是否可能存在竞争条件,即 state 中的值可以间歇地为 8 或 9,具体取决于首先处理A还是B (注意:这是我正在处理的简化版本,但我相信这是我们的管道正在发生的不确定行为)。 如果这个假设是正确的,我可以采取什么方法来解决这个问题?

提前谢谢大家!

不存在由相同时间戳引起的竞争条件。 您将被调用两次,每个元素一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM