apache-flink - Apache Flink 水印策略

标签 apache-flink flink-streaming

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

最佳答案

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

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

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

关于apache-flink - Apache Flink 水印策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67114113/

相关文章:

java - Flink状态变量和普通类变量的区别

java - Flink Scala - 比较方法违反了它的通用契约

deserialization - Apache 弗林克 : Read data from Kafka as byte array

apache-flink - 如何在 Apache Flink 1.14 中将消息 key 添加到 KafkaSink

apache-flink - 将 subtask_id 映射到 Flink 中的 TaskManager

apache-flink - 使用 REST API 的 Apache Flink 即服务

java - 使用 Apache Flink 进行动态模式评估

java - 如何根据json中的特定键将一个数据流中的接收器添加到不同的路径?

apache-flink - Flink 自动缩放和最大并行度

kubernetes - Apache Flink 作业未调度到 Kubernetes 中的多个 TaskManager(副本)上