首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >keyBy和以下算子的Flink水印

keyBy和以下算子的Flink水印
EN

Stack Overflow用户
提问于 2021-08-11 09:24:47
回答 1查看 222关注 0票数 0

Flink源函数引入了水印,并将其传递给下游的操作人员,根据这些操作,不同的基于时间的东西可以执行。对于使用多个流的算子,目前认为输入水印上的最小值是算子的水印。

keyBy将源流分解为多个逻辑流,然后传递给下游运算符(例如。过程函数)。

例如:

代码语言:javascript
复制
driversStream.keyBy(driver => driver.Id).process(new ProcessDriversFunction)

class ProcessDriversFunction extends ..... {
   override def processElement(record Driver, ctx Context, out Collector) {
      // Register an event timer to fire after 5 seconds
      ctx.timerService().registerEventTimeTimer(record.timestamp+5)
   }
}

假设有四个子任务的进程功能(例如。P1, P2, P3, P4),并且有100个密钥组(比方说,KG1, KG2....KG100),每个子任务处理25个关键组,即。P1 processing KG1 to KG25P2 processing KG26 to KG50等。

如果从下午5点开始DriverStream中没有任何元素,则任何P1,P2,P3,P4都不会在下午5点之后获得水印,因此在下午5点之后不会触发计时器。

比方说,在下午5点,驱动程序流开始获得记录,所有这些记录都映射到一个关键组,即。KG1,因此由进程函数的一个子任务(即。P1)。

  • 在P2、P3、P4上执行事件时间进度,因为他们没有收到任何记录。通过KG1元素注册的计时器
  • on P1将被触发。但是,在KG2 to KG25 on P1上注册的计时器是否会被触发,因为它们没有接收到P1.

中的任何元素。

EN

回答 1

Stack Overflow用户

发布于 2021-08-11 13:20:30

在P2、P3、P4上执行事件时间进度,因为它们没有收到任何记录。

这取决于源函数是否有空闲实例,以及水印策略是否使用withIdleness()。如果源函数的所有实例都在处理来自KG1的记录,或者使用了withIdleness(),那么水印将在P2、P3和P4上前进。

...在KG2 to KG25 on P1上注册的计时器会被解雇吗?

是的他们有。currentWatermark应用于整个给定的子任务,而不考虑键或密钥组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68739336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档