当前位置: 首页 > 知识库问答 >
问题:

Apache-Flink水印策略

潘俊楚
2023-03-14

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

共有1个答案

凌和颂
2023-03-14

如果时间戳从来都不是无序的,或者如果您愿意所有无序事件都被认为是延迟的,您应该使用for MonotonousTimestamps。另一方面,如果乱序时间戳对您的应用程序来说是正常的,那么您应该使用forBoundedOutOfOrness

对于kafka,如果您让kafka源操作符应用水印策略(推荐),那么它将分别将该策略应用于每个分区。在这种情况下,Kafka源的每个实例将产生每个分区水印的最小值(对于该实例处理的分区)。在这种情况下,如果每个分区内的时间戳是按顺序排列的,则可以使用forMonotonousTimestamps(例如,如果您从使用log-append时间戳的生产者处消费,则会出现这种情况)。

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

 类似资料:
  • 我们正在构建一个流处理管道,以使用Flink v1.11和事件时间特性来处理Kinesis消息。在定义源水印策略时,在官方留档中,我遇到了两个开箱即用的水印策略;forBoundedOutOfOrthy和forMonotonousTimestamps。但根据我对上述内容的理解,我认为这些不适合我的用法。以下是我的用法细节: 来自输入流的数据:(包含每分钟带有时间戳的数据) 现在,我想处理11:00

  • 在Flink中,我发现了2种设置水印的方法, 第一个是 第二个是 我想知道哪个最终会生效。

  • 我试图了解Apache FLink中Windows和Watermark生成之间的依赖关系,我在下面的示例中出现错误: 这里的时间戳是一个长的,我们可以从Kafka源中检索到,应该是:a,4 C,8,其中C是类别,5是时间戳。 每当我发送事件时,数据流都会打印,但不会使用窗口打印这些事件(打印(“Windows”)。此外,如果我收到一个事件A,12,然后生成了一个水印(在10秒内),那么我有C,2,

  • 我看到关于为每个密钥添加水印支持的讨论很多。但是flink支持每个分区的水印吗? 当前-然后考虑所有水印(非空闲分区)的最小值。因此,窗口中最后挂起的记录也被卡住了。(使用periodicemit增加水印时) 任何关于这方面的信息都非常感谢!

  • 问题陈述:来自kafka源的流式事件。这些事件有效载荷为字符串格式。将它们解析为文档,并根据事件时间每隔5秒将其批量插入DB。 函数正在执行。但程序控制不会进入。因此不会发生批量插入。我尝试了键控和非键控窗口。它们都不工作。没有抛出错误。 flink版本:1.15.0 下面是我的主要方法的代码。我应该如何解决这个问题?

  • 有1个高通量Kafka流定义如下 上述窗口操作符的水印正确转发。 上述窗口操作符中的需要使用一些保存在某些S3文件中的信息来丰富。S3文件很少更新。 S3文件作为流读取,然后广播以丰富中的元素。 然后连接这两个流,用类型的元素来丰富类型的所有元素。 有2个输入。其中之一是不断转发水印,但广播流没有任何时间信息或水印。这导致EnrichedAProcess的水印根本无法转发,因为它的一个输入没有传入