当前位置: 首页 > 知识库问答 >
问题:

Flink事件中的时间戳

昝成弘
2023-03-14

查看Flink的留档和书籍,我对时间戳有疑问:如果流设置为事件时间模式,这意味着时间戳在进入Flink之前具有源的时间(甚至在通过消息传递队列之前,可能是Kafka),为什么Flink将时间戳作为元数据附加到记录中?幻灯片3根据它们所占的内容具有不同类型的时间戳:https://www.slideshare.net/dataArtisans/apache-flink-training-time-and-watermarks

如果时间戳进入事件内部,为什么要将该值传递给记录的元数据?事件和重新编码之间的区别到底是什么?

共有1个答案

金毅
2023-03-14

时间戳并不总是来自事件内部。例如,Flink Kafka使用者将Kafka元数据中的时间戳复制到Flink元数据。(如果要覆盖这些时间戳,可以提供时间戳赋值器。)

流记录元数据中携带的这些时间戳以各种方式在内部使用:

  • 内置的事件时间窗口分配器使用这些时间戳将事件分配给窗口
  • CEP使用这些时间戳将流排序为事件时间顺序
  • FlinkSQL还可以使用这些时间戳进行排序、窗口化等。
 类似资料:
  • 请检查上面的代码,并告诉我是否做得正确。在事件时间和水印分配之后,我想在process函数中处理流,其中我将为不同的密钥收集10分钟的流数据。

  • 我们正在接收来自多个独立数据源的事件,因此,到达我们Flink拓扑(通过Kafka)的数据将是无序的。 我们正在Flink拓扑中创建1分钟的事件时间窗口,并在源操作符处生成事件时间水印(当前事件时间-某些阈值(30秒))。 如果一些事件在设置的阈值之后到达,那么这些事件将被忽略(在我们的例子中这是可以的,因为属于该分钟的大多数事件都已经到达并在相应的窗口中得到处理)。 现在的问题是,如果程序崩溃(

  • 当我使用 flink 事件时间窗口时,窗口只是不触发。如何解决问题,有没有办法调试?

  • 我想知道是否可以创建类似于以下内容的WindowAssigner: 但我不希望窗口在每个元素的事件时间中保持增长。我希望在接收到的第一个元素(对于该键)处定义窗口的开头,并在1秒后精确结束,无论有多少元素到达该秒。 所以它可能看起来像这样的假设: 谢谢

  • 我有一个带有数据和时间戳的记录日志,我的Flink应用程序按时间戳升序接收记录。在某个键的第一个项到达窗口后,我想在X事件时间后关闭窗口,检查是否有足够的项到达某个条件,并为该键发出通过或失败消息。 对于Flink中的基本窗口功能,这是不可能的吗?例如,如果我希望我的窗口有30秒长,但是键的第一个项在15秒到达,最后一个项在40秒到达,似乎窗口将在30秒关闭,并且该键的记录轨迹将是分成两个窗口。在

  • 我将Flink 1.11.3与SQL API和Blink planner结合使用。我在流模式下工作,使用带有文件系统连接器和CSV格式的CSV文件。对于一个时间列,我生成水印,并希望根据这个时间进行窗口聚合。就像根据事件时间快进过去一样。 是否必须为此对时间列进行排序,因为逐行使用时间列,如果不进行排序,可能会发生延迟事件,从而导致行的删除? 我对Ververica的CDC连接器也很感兴趣。也许我