【问题标题】:System time based event trigger in flinkflink中基于系统时间的事件触发
【发布时间】:2021-02-02 06:06:59
【问题描述】:

如何在 Flink 中设置触发器以在特定时间过去后执行某些操作? 例如:每天下午 1 点的流的总和

【问题讨论】:

    标签: apache-flink flink-streaming flink-cep


    【解决方案1】:

    KeyedProcessFunction 可以使用计时器在特定时间触发操作(基于每个键)。这些可以是使用系统时间的处理时间计时器,也可以是由 Watermarks 触发的事件时间计时器。

    以下是每个示例,来自文档中的教程:

    另见the more detailed docs about process functions and timers

    请注意,如果您不想以 key-partitioned 方式应用计时器,而是需要对整个数据流进行操作(即不并行),您可以使用 keyBy(constant) 让自己进入 keyed没有实际划分流的上下文。

    【讨论】:

    • 这会根据程序的启动时间创建一个窗口吗?无论程序执行的开始时间(有时它可能从上午 11 点开始,或者可能从上午 1 点开始),我都需要它,结果总是在下午 1 点计算。
    • 这里这些计时器似乎根据执行开始的时间来计时。
    • 处理时间计时器是相对于时代设置的。它们与执行开始的时间无关。
    • 这意味着如果你想总是在凌晨 1 点开始定时器,你需要获取当前的处理时间,并计算注册定时器时使用什么延迟。
    猜你喜欢
    • 2016-03-24
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多