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

Apache flink从后期窗口访问键控状态

伯向晨
2023-03-14

我正在编写一个Flink应用程序,它使用kafka主题中的时间序列数据。时间序列数据包含度量名称、标记键值对、时间戳和值等组件。我已经创建了一个滚动窗口来根据度量键(度量名称、键值对和时间戳的组合)聚合数据。这里是主流看起来像

kafka source -> Flat Map which parses and emits Metric ->  Key by metric
key  -> Tumbling window of 60 seconds -> Aggregate the data -> write to the
sink.

我还想检查是否有任何指标在上面的窗口外迟到。我想检查有多少指标延迟到达,并计算延迟指标与原始指标相比的百分比。我正在考虑使用flink的“允许延迟”功能将延迟指标发送到不同的流。我计划在主“聚合数据”运算符中添加一个“MapState”,它将把键作为度量键,把值作为到达主窗口的度量的计数。

kafka source -> Flat Map which parses and emits Metric -> Key by metric key
->  Tumbling window of 60 seconds -> Aggregate the data (Maintain a map
state of metric count) -> write to the sink.

                                                   \

                                                    \

                                                  Late data -> Key by
 metric key ->  Collect late metrics and find the percentage of late metrics
 -> Write the result in sink

我的问题是“收集后期指标并找到后期指标的百分比”运算符能否访问主流更新的“MapState”。即使它们由相同的度量键键键控,我想它们是两个不同的任务。我想计算(延迟度量的数量/(延迟度量的数量按时到达的度量的数量))。

共有1个答案

钮长恨
2023-03-14

有几种不同的方法可以实现这一点。

您可以将每个窗口的状态html" target="_blank">存储在传递给WindowProcessFunction的上下文提供的KeyedStateStore WindowsState()中。与allowedLateness结合使用,您可以在发生延迟点火时计算延迟事件统计信息。(这种方法不需要MapState,因为WindowsState的作用域已经限定为特定的窗口和特定的键。ValueState就足够了。)

另一个想法是从主窗口捕获延迟事件的侧面输出流,并通过另一个窗口发送这些延迟事件,该窗口在某个时间范围内对它们进行计数。然后将延迟事件分析流和第一个(主)窗口的输出发送到KeyedCoProcessFunction(或RichCoFlatMap)中,该函数可以计算延迟事件与实时事件的统计信息。(此处需要MapState,因为可能需要为键控流的每个键同时打开多个窗口。)

或者,您可以使用一个简单的处理函数将初始流拆分为两个(通过将时间戳与当前水印进行比较)——一个用于延迟事件,另一个用于非延迟事件——然后使用Flink SQL计算所有统计信息。

或者只是实现整个事情在一个KeyedProcessFunction。https://ci.apache.org/projects/flink/flink-docs-stable/docs/learn-flink/event_driven/一个例子。

 类似资料:
  • 我的应用程序使用了一个键控窗口,该窗口由时间戳函数键控。这意味着一旦该特定窗口被激发和处理,保持该键活动就没有用了,因为该特定键不会再次出现。因为这个用例涉及到持续扩展键,所以我想在一个键完成处理后立即清除它的状态,而不必配置计时器。 在每个键控窗口完成处理后,这是否可以在方法或方法中实现?

  • 我有以下代码来计算socketTextStream中的单词。累积字数和时间窗字数都是必需的。该程序存在累积计数始终与窗口计数相同的问题。为什么会出现这个问题?根据加窗计数计算累积计数的正确方法是什么?

  • 问题内容: 我有一个可以打电话的页面。在此页面中,我有一个带有提交表单的表单,除此之外,我还有一个ID为“ target”的div。是否可以在iframe中提交表单,并在成功刷新后刷新目标div。是说要在其中加载新页面? 编辑:目标div在父页面中,所以我的问题基本上是,是否可以在iframe之外向父对象进行jQuery调用的示例。那看起来如何? 编辑2:这就是我的jquery代码现在的样子。它位

  • 我的工作是做以下事情: 根据事件时间使用Kafka主题中的事件 计算7天的窗口大小,以1天的幻灯片显示 将结果放入Redis 我有几个问题: 如果它从最近的记录中消耗Kafka事件,在作业存活1天后,作业关闭窗口并计算7天窗口。问题是作业只有1天的数据,因此结果是错误的。 如果我尝试让它从7天前的时间戳中消耗Kafka事件,当作业开始时,它从第一天开始计算整个窗口,并且花费了很多时间。另外,我只想

  • 在中,元素被分配给一个或多个实例。在滑动事件时间窗口的情况下,这发生在1中。 如果窗口的和,则将时间戳为0的元素分配到以下窗口: 窗口(开始=0,结束=5) 窗口(开始=-1,结束=4) 窗口(开始=-2,结束=3) 窗口(开始=-3,结束=2) 窗口(开始=-4,结束=1) 在一幅图片中: 有没有办法告诉Flink时间有开始,而在那之前,没有窗户?如果没有,从哪里开始寻求改变?在上述情况下,Fl

  • 生命周期及窗口控制 概念描述 在Nebula容器中开发H5App,首先必须要理解H5App的生命周期和窗口控制的基本概念。 为了方便理解,在这里我们可以用PC端的chrome浏览器来做概念参考。 appId 支付宝客户端内的应用id,用于让框架知晓需要启动哪个H5App,并且加载这个H5App默认的启动参数和离线包。 启动参数 当H5App启动时或者运行时,可以通过配置一些参数来控制某些特性,比如