Scala 从不调用Flink AssignerWithPeriodicWatermarks GetCurrentWatermarks

Scala 从不调用Flink AssignerWithPeriodicWatermarks GetCurrentWatermarks,scala,apache-flink,flink-streaming,sliding-window,Scala,Apache Flink,Flink Streaming,Sliding Window,我正在尝试基于Kafka源代码进行一个简单的滑动窗口聚合 卡夫卡上的所有事件都包含一个timestamp元素,并按升序排列。我尝试过使用不同的周期性水印(升序、有界和自定义水印),以便更轻松地调试内部发生的事情。我可以看出总是调用extractTimestamp方法,但从未调用getCurrentWatermark方法 我已将自动水印间隔设置为偶数1ms,即使如此,每个子任务的水印也不会更新。我已经通过使用Flink UI并查看可用的度量来验证这一点 我在SO上读到了很多关于这个主题的类似问题,

我正在尝试基于Kafka源代码进行一个简单的滑动窗口聚合

卡夫卡上的所有事件都包含一个timestamp元素,并按升序排列。我尝试过使用不同的周期性水印(升序、有界和自定义水印),以便更轻松地调试内部发生的事情。我可以看出总是调用
extractTimestamp
方法,但从未调用
getCurrentWatermark
方法

我已将
自动水印间隔设置为偶数1ms,即使如此,每个子任务的水印也不会更新。我已经通过使用Flink UI并查看可用的度量来验证这一点

我在SO上读到了很多关于这个主题的类似问题,大多数都是关于窗口从不发光的,原因有很多。我还没有找到它永远无法提升水印的原因

我还确认没有数据作为延迟数据被侧向输出

最基本形式的流:

val rfq=kafkaDataStream
.分配AscendingTimeStamps(uu.timestamp.toEpochMilli)
.keyBy(“id”)
val lateTag=new OutputTag[RFQ](“late”){}
val预测:数据流[RFQPrediction]=rfq
.窗口(滑动事件时间窗口,共(5,3))
.sideOutputLateData(lateTag)
.合计(新价格预测合计)
.name(“窗口预测”)
我已经验证了它可以与带有标点水印的
赋值器配合使用

是什么原因导致
getCurrentWatermark
方法永远不会被调用,即使间隔设置为1ms

我提供的测试数据使用有限的ID列表,不断生成事件,时间戳不断增加


非常感谢

您已经将工作流配置为使用事件时间,对吗?最明确的是,我已经设置了
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
。所有这些看起来都很好,所以不容易看到根本原因。唯一可行的办法是你的信息源很快就被关闭了。你的数据真的来自卡夫卡吗?您正在使用哪个序列化程序?您是否正在使用
endOfStream
?此流式处理作业运行多长时间?我用来测试的数据模拟器会连续为流键入的id发出项目。我至少运行了10分钟。时间戳是“随机”生成的,具有不断增加的时间戳。考虑到我甚至尝试过将窗口大小设置为5ms,并且只有20个唯一的ID可以循环通过,因此应该设置一个水印,甚至关闭多个窗口。我没有使用
endOfStream
。我可以确认事件正在添加到窗口中。Kafka的序列化程序正在使用
KafkaDeserializationSchema
,您已经将工作流配置为使用事件时间,对吗?最明确的是,我已经设置了
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
。所有这些看起来都很好,所以不容易看到根本原因。唯一可行的办法是你的信息源很快就被关闭了。你的数据真的来自卡夫卡吗?您正在使用哪个序列化程序?您是否正在使用
endOfStream
?此流式处理作业运行多长时间?我用来测试的数据模拟器会连续为流键入的id发出项目。我至少运行了10分钟。时间戳是“随机”生成的,具有不断增加的时间戳。考虑到我甚至尝试过将窗口大小设置为5ms,并且只有20个唯一的ID可以循环通过,因此应该设置一个水印,甚至关闭多个窗口。我没有使用
endOfStream
。我可以确认事件正在添加到窗口中。来自Kafka的序列化程序正在使用
KafkaDeserializationSchema