时间戳和水印为两个输入流分配,稍后使用'EventTime'连接以进行动态警报



我有一个Flink程序,它接收两个流,即数据/传感器读数流和警报规则流。我正在广播规则流并将其连接到数据流以生成动态警报。ProcessingTime一切正常,但EventTime没有任何工作。 我已经为我的数据流分配了时间戳和水印,并按原样传递规则流(因为规则流只有在看到新的附加规则/更新时才会有记录(。但不生成警报。

  1. 当两个流(即一个带有时间戳和水印的流和一个仅具有规则(广播(的流(连接并根据规则动态处理时,如何使用"事件时间"生成警报。

  2. 我是否还需要为我的规则流分配时间戳和水印?

  3. 由于我的规则流仅在有任何添加/修改时才有记录。是否有任何解决方法或黑客可以避免/克服这种情况?

任何帮助/建议将不胜感激。

-- 我试过了! 我尝试只使用一个流,即数据流,通过使用硬编码的窗口规则生成警报。而且它工作正常。但是当我将其与规则流连接时,它无法生成任何警报/输出。

"处理时间">

一切正常,但"事件时间"则不然。

--我所期待的! 我希望我的程序在将连续数据流与非连续规则流连接时能够工作,以使用"EventTime"生成动态警报。

Flink 训练中的这个练习正好涵盖了这种情况:https://training.ververica.com/exercises/taxiQuery.html。有关详细信息,请参阅提示和解决方案,但采取的方法是在流上使用此时间戳提取器/水印生成器,并遵循以下规则:

// Once the two streams are connected, the Watermark of the KeyedBroadcastProcessFunction operator
// will be the minimum of the Watermarks of the two connected streams. Our query stream has a default
// Watermark at Long.MIN_VALUE, and this will hold back the event time clock of the
// KeyedBroadcastProcessFunction, unless we do something about it.
public static class QueryStreamAssigner implements AssignerWithPeriodicWatermarks<String> {
@Nullable
@Override
public Watermark getCurrentWatermark() {
return Watermark.MAX_WATERMARK;
}
@Override
public long extractTimestamp(String element, long previousElementTimestamp) {
return 0;
}
}

这具有让另一个流完全负责水印的效果,这是在这种情况下想要的。

相关内容

  • 没有找到相关文章

最新更新