【问题标题】:Apache Flink Watermark StrategiesApache Flink 水印策略
【发布时间】:2021-04-15 18:27:30
【问题描述】:
我们正在构建一个流处理管道来处理/摄取 Kafka 消息。我们正在使用 Flink v1.12.2。在定义源水印策略时,在官方文档中,我遇到了两种开箱即用的水印策略; forBoundedOutOfOrderness 和 forMonotonousTimestamps。我确实浏览了 javadoc,但没有完全理解何时以及为什么应该使用一种策略而不是另一种策略。时间戳基于事件时间。谢谢。
【问题讨论】:
标签:
apache-flink
flink-streaming
【解决方案1】:
如果时间戳从不乱序,或者如果您愿意将所有乱序事件视为迟到,则应使用 forMonotonousTimestamps。另一方面,如果无序时间戳对于您的应用程序来说是正常的,那么您应该使用forBoundedOutOfOrderness。
对于 Kafka,如果您让 kafka 源操作员应用水印策略(推荐),那么它将分别将该策略应用到每个分区。在这种情况下,Kafka 源的每个实例都将生成每个分区水印中最小的水印(对于该实例处理的分区)。在这种情况下,如果时间戳在每个分区中按顺序排列,则可以使用 forMonotonousTimestamps(例如,如果您从使用日志附加时间戳的生产者消费)。
您希望尽可能使用forMonotonousTimestamps,因为它可以最大限度地减少延迟并简化操作。