我想知道是否可以使用Flink的摄取时间模式来获取记录的时间戳。考虑以下 flink 代码示例(https://github.com/apache/flink/blob/master/flink-examples/flink-examples-streaming/src/main/scala/org/apache/flink/streaming/scala/examples/join/WindowJoinSampleData.scala),
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime)
val grades = WindowJoinSampleData.getGradeSource(env, rate)
val salaries = WindowJoinSampleData.getSalarySource(env, rate)
val joined = joinStreams(grades, salaries, windowSize)
...
case class Grade(name: String, level: Int)
case class Salary(name: String, salary: Int)
默认情况下,等级和工资均不包含时间戳字段。然而,由于Flink允许使用“ingestionTime”将挂钟时间戳分配给数据流中的记录,那么是否可以在运行时获取这样的时间戳?例如,这就是我正在尝试做的事情:
val oldDatastream = env.addSource... // Using ingestion time
val newDatastream = oldDatastream.map{record =>
val ts = getRecordTimestamp(record)
// do some thing with ts
}
谢谢你的帮助。
Use ProcessFunction
这给你一个Context
,您可以使用它来获取元素的时间戳(无论是摄取时间、处理时间还是事件时间)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)