我们正在构建一个流处理管道来处理/接收kafka消息。我们使用的是flink v1.12.2。在定义源代码水印策略时,在官方文档中,我遇到了两种现成的水印策略;对于边界自动为粗细和格式单一的时间戳。我读过javadoc,但没有完全理解何时以及为什么应该使用一种策略而不是另一种策略。时间戳基于事件时间。谢谢。
2vuwiymt1#
你应该使用 forMonotonousTimestamps 如果时间戳从来都不是无序的,或者如果您愿意所有无序事件都被认为是延迟的。另一方面,如果无序时间戳对于应用程序来说是正常的,那么应该使用 forBoundedOutOfOrderness .对于kafka,如果您让kafka源操作符应用水印策略(推荐),那么它将分别对每个分区应用该策略。在这种情况下,kafka源的每个示例都将生成每个分区的最小水印(对于该示例处理的分区)。在这种情况下,您可以使用 forMonotonousTimestamps 如果时间戳在每个分区内是按顺序排列的(例如,如果您从使用log append时间戳的生产者处进行消费,就会出现这种情况)。你想用 forMonotonousTimestamps 只要有可能,因为它最大限度地减少了延迟,简化了事情。
forMonotonousTimestamps
forBoundedOutOfOrderness
1条答案
按热度按时间2vuwiymt1#
你应该使用
forMonotonousTimestamps
如果时间戳从来都不是无序的,或者如果您愿意所有无序事件都被认为是延迟的。另一方面,如果无序时间戳对于应用程序来说是正常的,那么应该使用forBoundedOutOfOrderness
.对于kafka,如果您让kafka源操作符应用水印策略(推荐),那么它将分别对每个分区应用该策略。在这种情况下,kafka源的每个示例都将生成每个分区的最小水印(对于该示例处理的分区)。在这种情况下,您可以使用
forMonotonousTimestamps
如果时间戳在每个分区内是按顺序排列的(例如,如果您从使用log append时间戳的生产者处进行消费,就会出现这种情况)。你想用
forMonotonousTimestamps
只要有可能,因为它最大限度地减少了延迟,简化了事情。