Flink 能数到零吗?

Can Flink count to zero?

我在 Flink SQL 中找到了计数的示例,但是我似乎无法计数到零。

最明显的用例是监控,如果未收到更新,则需要采取行动。

这是我到目前为止尝试过的方法:

select count(*) from emptysource
GROUP BY TUMBLE(PROCTIME(), INTERVAL '1' second)

从未收到任何消息的主题末尾开始计数时,计数不显示为零。事实上,这项工作似乎没有产生任何结果,尽管它 运行 成功了。

我没有尝试过更复杂的设置,我们会按键计算。

我主要对 Flink SQL 感兴趣,但如果需要 Flink 中的其他解决方案,那也很好。

我认为问题是Flink目前不支持没有元素的windows,所以Flink基本上只有在这个window的第一个元素到达后​​才会创建一个window .可以找到一些额外的信息,虽然答案是事件时间,但处理时间的规则基本相同。

可能的解决方法取决于确切的用例,但通常可能类似于:

  • 使用键控计时器发出周期性聚合(这仅在至少有一条消息到达键时有效)
  • 仅使用虚拟源以便正确创建 windows(如所述 here