Window 操作创建的 DataStream 中的上下文时间戳
Context Timestamp in DataStream created by Window operation
假设我有一个 inputStream,我对其执行了一些 window 操作。
通过对其执行某些 window 操作而创建的事件的时间戳是多少。
....
DataStream<Integer> inputStream = // ...
DataStream<Integer> countStream = inputStream.keyBy(0)
.timeWindow(time.Seconds(1))
.sum();
DataStream<Integer> maxStream = inputStream.keyBy(0)
.timeWindow(time.Seconds(1))
.max();
现在我想合并流 countStream 和 maxStream 以查找最后一秒的 countStream 等于 maxStream 的所有时间戳。
注意:
这不完全是我要解决的问题,但这是一个有代表性的例子。解决这个问题将帮助我解决我需要解决的真正问题。
如果时间windows 是事件时间windows,它们发出的事件将被标记为发生在window 结束时。在处理时间 windows 的情况下,事件将没有时间戳,CPU 时间时钟将用作计时信息的来源。
更新:
Flink 中的时间 windows 与纪元对齐——它们与第一个事件或类似事件无关。您可以保证具有相同持续时间和偏移量的两个事件时间 windows,例如,两个一秒长的翻滚 windows,将收集完全相同的时间间隔的事件。
事件时间 window 发出的事件流本身就是带有事件时间戳的流,并且可以像任何其他带时间戳的事件流一样进一步 windowed。请记住,一个 window 实例(即同一秒)产生的所有事件都将具有相同的时间戳。因此,如果您跟随 1 秒 window 和较短的 window,例如 100 毫秒,那么 10 次中有 9 次较短的 window 将看不到任何事件。
- 对于基于事件时间的翻滚windows,间隔为 1 秒。让我们看看 [start_ts、end_ts) 中有一个 window 范围,它会发出时间戳为 [= 的结果50=] - 1 (也就是说 start_ts - 999 因为 end_ts 等于start_ts + 1000)。
- 对于基于进程时间的 senoraios,没有时间戳信息。生成。
更新:
如果您希望来自同一上游 window 的元素最终出现在同一下游 window。您可以使用 Consecutive windowed operation。
步骤:
- 通过
union
. 将您的 countStream 与 maxStream 合并
- window 与
windowAll
. 的组合流
- 在
windowAll
之后的某些 process
函数中执行您的业务逻辑。
假设我有一个 inputStream,我对其执行了一些 window 操作。 通过对其执行某些 window 操作而创建的事件的时间戳是多少。
....
DataStream<Integer> inputStream = // ...
DataStream<Integer> countStream = inputStream.keyBy(0)
.timeWindow(time.Seconds(1))
.sum();
DataStream<Integer> maxStream = inputStream.keyBy(0)
.timeWindow(time.Seconds(1))
.max();
现在我想合并流 countStream 和 maxStream 以查找最后一秒的 countStream 等于 maxStream 的所有时间戳。
注意: 这不完全是我要解决的问题,但这是一个有代表性的例子。解决这个问题将帮助我解决我需要解决的真正问题。
如果时间windows 是事件时间windows,它们发出的事件将被标记为发生在window 结束时。在处理时间 windows 的情况下,事件将没有时间戳,CPU 时间时钟将用作计时信息的来源。
更新:
Flink 中的时间 windows 与纪元对齐——它们与第一个事件或类似事件无关。您可以保证具有相同持续时间和偏移量的两个事件时间 windows,例如,两个一秒长的翻滚 windows,将收集完全相同的时间间隔的事件。
事件时间 window 发出的事件流本身就是带有事件时间戳的流,并且可以像任何其他带时间戳的事件流一样进一步 windowed。请记住,一个 window 实例(即同一秒)产生的所有事件都将具有相同的时间戳。因此,如果您跟随 1 秒 window 和较短的 window,例如 100 毫秒,那么 10 次中有 9 次较短的 window 将看不到任何事件。
- 对于基于事件时间的翻滚windows,间隔为 1 秒。让我们看看 [start_ts、end_ts) 中有一个 window 范围,它会发出时间戳为 [= 的结果50=] - 1 (也就是说 start_ts - 999 因为 end_ts 等于start_ts + 1000)。
- 对于基于进程时间的 senoraios,没有时间戳信息。生成。
更新:
如果您希望来自同一上游 window 的元素最终出现在同一下游 window。您可以使用 Consecutive windowed operation。
步骤:
- 通过
union
. 将您的 countStream 与 maxStream 合并
- window 与
windowAll
. 的组合流
- 在
windowAll
之后的某些process
函数中执行您的业务逻辑。