时间语义

  Event Time:事件创建或产生的时间。事件时间。
  Ingestion Time:数据进入flink的时间。摄入时间。
  Processing Time:执行操作算子的本地系统时间,与机器相关。处理时间。window processing time。
  不同的时间有不同的应用场合,我们往往更关心事件时间。

在代码中设置事件时间

  StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
  env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

乱序数据的影响

  当Flink以Event Time模式处理数据流时,它会根据数据里的时间戳来处理基于时间的算子。
  由于网络、分布式等原因,会导致乱序数据的产生。

水位线watermark

  怎样避免乱序数据带来的计算不正确。
  遇到一个时间戳达到了窗口关闭时间,不应该立刻触发窗口计算,而是等待一段时间,等迟到的数据来了再关闭窗口。
  watermark是一种衡量Event time进展的机制,可以设定延迟触发
  watermark是用于处理乱序时间的,正确的处理乱序时间,通常是用watermark机制结合window来实现。
  数据流中的watermark用于表示timestamp小于watermark的数据都已经达到了,因此,window的执行也是由watermark来触发的。
  watermark用来让程序自己平衡延迟和结果正确性。

watermark特点

  watermark是一条带着时间戳的特殊数据。(watermark extends StreamElement)
  watermark必须单调递增,以确保任务的事件时间始终在向前推进,而不是在后退。
  watermark与数据的时间戳相关。

watermark传递

  各个分区watermark不一致时,以最小的watermark为准,向下游广播。如果到来的watermark大于各分区的值,则不更新watermark,也不向下游广播。

watermark代码中的引入

  Event time的使用一定要指定数据源中的时间戳。
  调用assignTimeStampAndWatermarks方法,传入一个BoundedOutOfOrdernessTimestampExtractor,就可以指定watermark。

watermark的设定原则

  在flink中,watermark由应用程序开发人员生成,这通常需要对相应的领域有所了解。
  如果watermark设定的延迟太久,收到结果的速度可能就会很慢,解决办法是在水位线到达之前输出一个近似结果。
  如果watermark到的太早,则可能收到错误结果,不过flink处理迟到数据的机制可以解决这个问题。

原文地址:http://www.cnblogs.com/shaokai7878/p/16929461.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性