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

我的Flink应用程序需要水印吗?如果没有,我是否需要水印策略。noWatermarks?

仲阳朔
2023-03-14

我不确定我的Flink应用程序是否需要水印。什么时候有必要?

如果我不需要它们,水印策略的目的是什么。noWatermarks()?

共有1个答案

孟思远
2023-03-14

时间t的水印标记数据流中的一个位置,并断言该流在该点在时间t之前已经完成。

水印的唯一目的是触发基于事件时间的计时器的触发。

基于事件时间的计时器由KeyedProcessFunction API直接公开,也由内部使用

  • 事件时间窗口

不需要水印的常见情况包括仅依赖处理时间的应用程序,或在执行批处理时。或者在处理具有时间戳但从不依赖事件时间计时器的数据时(例如,简单的逐事件处理)。

FLIP-27引入的Flink的新源接口确实需要水印策略:

env.fromSource(source, watermarkStrategy, sourceName);

在实际不需要水印的情况下,可以使用水印策略。此界面中的noWatermarks()。

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

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

  • 我使用flink版本1.13.0 当我试图使用flink doc的Kafka水印策略时,这似乎不起作用,窗口处理功能将不会运行。 我想知道,在Kafka中,水印的时间戳将使用消费时间还是生产时间? 我的消费者代码如下: 并像这样使用窗口: 拓扑图是这样的:

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

  • 有人能正确解释事件时间戳和水印吗。我从文件中理解了,但不太清楚。一个真实的例子或外行的定义会有所帮助。此外,如果可能,请给出一个示例(以及一些可以解释它的代码片段)。提前感谢

  • 我有一个Flink应用程序,它从Kafka中读取一些事件,从MySQL中丰富数据,使用窗口函数缓冲数据,并将窗口内的数据写入HBase。我目前已经启用了检查点,但事实证明,检查点非常昂贵,随着时间的推移,它花费的时间越来越长,并影响我的作业延迟(Kafka摄取率落后)。如果我想办法使HBase写操作幂等,是否有充分的理由使用检查点?我可以将内部kafka消费客户端配置为每隔一段时间提交一次,对吗?