flink eventtime键控窗口在某些键到达过慢时不触发

gr8qqesn  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(407)

flink+kafka,两个主题划分,两个并行;

env.setParallelism(2)
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
...
.keyBy(0) //("k",1576726230000)
.timeWindow(Time.seconds(2L))
...

问题般的打击:
“key1”产生速度很快,每秒1个msg
“key2”的生成速度很慢,每4秒1个msg
然后窗口将不会触发2秒,因为key2的水印到达得很慢
如何解决?我有一个想法:setparallelism(1),所以窗口可以每2秒触发一次,但如果我想保持并行性(2),并保持窗口触发2秒(或2.5秒超时触发所有窗口),如何使它?请给点建议,谢谢!
其实,场景是白天消息比较快,晚上消息太慢,但需要每2秒更新一次。

7dl7o3gd

7dl7o3gd1#

解决此问题的一种方法是在将所有分区的事件混合在一起后生成水印,以便慢/空闲分区不会保留整个水印:

stream
  .rebalance()
  .assignTimestampsAndWatermarks(...)
  .keyBy(...)
  .timeWindow(...)

这确实是以额外的网络洗牌为代价的。

相关问题