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

Flink:使用允许的延迟时清除windows元数据

邢永安
2023-03-14

如何在允许的延迟期结束之前“清除”窗口元数据(WindowOperator和InternalTimer)?

是否可以将此元数据与窗口数据本身一起清除?

我们不介意丢失元数据——不需要根据之前非延迟数据的上下文来处理具有相同关键时间的延迟事件。

一些背景知识-

[目前正在使用Flink-v1.6]我们正在处理事件时间窗口,并处理大量具有唯一键的事件。95%的活动不会迟到,只会开火一次。

我们的工作规定允许迟到72小时。我们用火

共有1个答案

蔡默
2023-03-14

通常,如果您需要自定义状态管理,我建议使用ProcessFunction而不是Flink的窗口API,因为它比将相关逻辑分布在窗口分配器、触发器、驱逐器和进程窗口函数中更容易理解和维护。

在你的例子中,一个想法确实出现在脑海中:如果你没有长时间的允许迟到,而是将迟到的事件收集到一个辅助输出中,这对你有用吗?

更新时间:

保留的元数据是能够继续向窗口添加事件所需的状态。这是允许迟到的代价。

 类似资料:
  • 我很难理解水印和允许迟到的概念。 以下是[邮件存档]的摘录|https://www.mail-archive.com/user@Flink。阿帕奇。组织/msg08758。html]这谈到了水印,但我还有几个问题。以下是引用的示例: 假设您有一个,具有2分钟的绑定和10分钟的翻转窗口,从12:00开始到12:10结束: 如果您具有以下流序列: 不允许迟到 当窗口操作符接收到<代码> 允许迟到3分钟

  • 我有以下用例,如果有明显的解决方案,很抱歉,但我对Flink非常陌生: 谢谢

  • 我在计算一个简单蒸汽的最大值,结果是: (S11000,S1,值:999) (S12000,S1,值:41) 最后一行数据明显迟到了: 为什么按第一个窗口(0-1000)计算? 我认为第一个窗口应该在到达时触发。 对于这个结果,我很疑惑。 MyReductingMax(),MyWindowFunction()

  • 问题内容: 更改了该方法的结构后,当defer调用两次时会发生什么? 例如: 其中当最后叫什么名字? 问题答案: 它取决于方法的接收者 和 变量的类型。 简短的答案:如果您使用的是包,则延迟的方法将正确关闭两个实例,因为它们具有 指针 接收器, 并且 由于返回了 指针 ( 指针 也是如此)。请参阅下面的推理和解释。 为避免混淆,我建议使用不同的变量,这样会清楚您 想要 什么以及 将要 关闭的内容:

  • 我有一个简单的模式,如下所示 为了找到CEP检测时间的延迟,添加了在如上所示的模式中选择每个事件的时间。每个事件类都有一个参数Edtl(事件检测时间本地),该参数最初设置为0,然后再设置为系统。nanoTime() 我在执行时遇到以下错误,但问题是该错误是在程序运行一段时间后出现的 我想我设置这个模式是因为我在模式中同时进行读取和写入操作。如果是这样,那么我应该如何在Flink CEP中找到平均复

  • 我想使用Flink流媒体以低延迟处理市场数据( 我有一组计算,每个都订阅三个流:缓慢移动的参数数据、股票价格和汇率。 例如。 Params(缓慢滴答:每天一次或两次): 资源(每秒多次滴答声): fx(每秒多次滴答声): 每当任何股票、外汇汇率或参数数据发生变化时,我都想立即计算结果并将其输出为新流。这在逻辑上可以表示为连接: 例如选择价格=(params.strike-asset.spot)*f