Apache flink 在KeyedStream(apacheflink)中是否可以为每个密钥生成水印?

Apache flink 在KeyedStream(apacheflink)中是否可以为每个密钥生成水印?,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,我正在实现一个用例,其中不同的物理设备正在发送事件,由于网络/电源问题,在flink source接收事件时可能会有延迟。flink作业中的一个操作符是模式操作符,并且有一些特定的模式是时间敏感的,所以我使用事件时间特性。但是,当来自特定设备的事件出现不可预测的延迟时,问题就会出现,这会导致删除这些事件(因为我无法真正定义允许延迟的静态绑定) 因为我使用的是一个KeyedStream,在源设备ID上设置了密钥,所以有没有一种方法可以允许每个CEP操作符实例(每个密钥一个)根据相应流分区中的事件时

我正在实现一个用例,其中不同的物理设备正在发送事件,由于网络/电源问题,在flink source接收事件时可能会有延迟。flink作业中的一个操作符是模式操作符,并且有一些特定的模式是时间敏感的,所以我使用事件时间特性。但是,当来自特定设备的事件出现不可预测的延迟时,问题就会出现,这会导致删除这些事件(因为我无法真正定义允许延迟的静态绑定)


因为我使用的是一个KeyedStream,在源设备ID上设置了密钥,所以有没有一种方法可以允许每个CEP操作符实例(每个密钥一个)根据相应流分区中的事件时间推进其时间。或者换句话说,有没有办法在KeyedStream中为每个分区生成水印?

Flink目前不支持每个密钥的水印。水印是全局性的。

您如何看待RichFlatMapFunction方法来实现此处提出的功能?您必须在用户代码中实现它,这意味着用户代码生成“水印”并对其进行处理。然而,这就意味着不能将它与Flink的内置窗口机制结合使用。如果您需要使用每键水印进行窗口化,那么您还必须自己实现窗口化机制。