在 Flink 中, 里注册的 Event Time(事件时间)定时器,其触发的唯一动力和条件是 Watermark(水位线)的推进。 具体来说,当且仅当 当前算子接收到的 Watermark >= 定时器注册的时间戳 时,该定时器才会被触发(调用 方法)。 如果在现实时间中“时间已经到了”,但 Event Time 定时器没有触发,99% 的原因是因为 Watermark 没有如期推进。结合 Watermark 的生成、传播和对齐机制,主要有以下几个核心原因: --- 1. 经典问题:多并发下的“空闲分区/流(Idle Partitions)” 机制分析:Flink 中的 Watermark 在跨算子传播时,下游算子如果有多个输入通道(Input Channels,比如上游是多个 Kafka 分区),下游算子的 Watermark 取决于所有输入通道中 Watermark 的最小值(Min)。 导致不触发的原因:如果上游某个 Kafka 分区(或某个并发任务)一直没有新数据流入,该分区的 Watermark 就会停滞不前。根据木桶效应(取最小值),下游 算子的整体 Waterm...