Apache Flink 水印策略

use*_*976 2 apache-flink flink-streaming

我们正在构建一个流处理管道来处理/摄取 Kafka 消息。我们使用的是 Flink v1.12.2。在定义源水印策略时,在官方文档中,我遇到了两种开箱即用的水印策略;对于有界无序和对于单调时间戳。我确实浏览了 javadoc,但没有完全理解何时以及为什么应该使用一种策略而不是另一种策略。时间戳基于事件时间。谢谢。

Dav*_*son 5

forMonotonousTimestamps如果时间戳永远不会无序,或者您愿意将所有无序事件视为延迟,则应该使用。另一方面,如果无序时间戳对于您的应用程序来说是正常的,那么您应该使用forBoundedOutOfOrderness.

对于 Kafka,如果您让 kafka 源操作员应用水印策略(推荐),那么它将将该策略单独应用于每个分区。在这种情况下,Kafka 源的每个实例都会生成每个分区水印的最小值(对于该实例处理的分区)。在这种情况下,如果时间戳在每个分区内按顺序排列,则可以使用forMonotonousTimestamps(例如,如果您从使用日志附加时间戳的生产者进行消费,就会出现这种情况)。

forMonotonousTimestamps您希望尽可能使用它,因为它可以最大限度地减少延迟并简化事情。