Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink 如果flink的keyBy操作符被赋予不同的键,然后是翻滚窗口,会发生什么_Apache Flink_Flink Streaming - Fatal编程技术网

Apache flink 如果flink的keyBy操作符被赋予不同的键,然后是翻滚窗口,会发生什么

Apache flink 如果flink的keyBy操作符被赋予不同的键,然后是翻滚窗口,会发生什么,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我的flink作业有一个keyBy操作符,它将date~clientIddate作为yyyymmddhhMM,MM作为分钟,5分钟后更改为键。该操作员之后是5分钟的翻滚窗口。我们的卡夫卡输入平均为300万/分钟事件,峰值时间约为2000万/分钟事件。检查点持续时间和两个检查点之间的最小暂停时间为3分钟 以下是我的疑问: 1由keyBy创建的状态是否永久保留或在5分钟后被逐出 2如果我将此窗口更改为30分钟,需要进行哪些更改 3检查点时间如何受窗口大小的影响 4在任何5分钟内不同客户机的数量增加5

我的flink作业有一个keyBy操作符,它将date~clientIddate作为yyyymmddhhMM,MM作为分钟,5分钟后更改为键。该操作员之后是5分钟的翻滚窗口。我们的卡夫卡输入平均为300万/分钟事件,峰值时间约为2000万/分钟事件。检查点持续时间和两个检查点之间的最小暂停时间为3分钟

以下是我的疑问:

1由keyBy创建的状态是否永久保留或在5分钟后被逐出

2如果我将此窗口更改为30分钟,需要进行哪些更改

3检查点时间如何受窗口大小的影响

4在任何5分钟内不同客户机的数量增加5-10倍的场景中会产生什么影响。这会造成数据倾斜。因为我工作中的1-2个子任务通常需要1-2分钟,而其他800个子任务只需10-15秒即可完成

5我每5-6小时会收到一次异常,这会重新启动flink作业。位于org.apache.flink.streaming.runtime.tasks.SystemProcessingTimeService$TriggerTask的TimerException{java.nio.channels.ClosedByInterruptException}。可能的原因是什么。

几点:

keyBy不是运算符,没有状态。keyBy只是一个声明,说明如何对流进行重新分区。keyBy之后的翻滚窗口具有状态,该状态在窗口完成后清除。如果查看web UI的检查点统计部分中的细分,可以看到每个子任务的状态

下面是一个例子:

在任何5分钟内不同客户机的数量增加5-10倍的情况下会产生什么影响。这会造成数据倾斜吗?因为我工作中的1-2个子任务通常需要1-2分钟,而其他800个子任务只需10-15秒即可完成

也许你有一个或几个客户比其他客户有更多的活动

理解为什么要在处理时间窗口之后执行基于事件时间的键控,而不是使用事件时间窗口,这会很有趣。我假设您使用的是处理时间窗口,如果我错了,请纠正我


你知道一次有多少不同的时间段处于活动状态吗?例如,12:00-12:05的窗口将接收许多时间戳在12:00-12:05范围内的事件,加上一些11:55-12:00的事件在12:00之前没有到达。如果可能的话,也可能是更早时间段的事件。在不了解活动密钥空间的情况下,很难考虑密钥倾斜。

您使用的是哪个状态后端?我使用的是FSStateBackEnd。我认为,一旦源kafka使用的所有事件成功到达接收器,就会触发检查点。因此,在翻滚窗口中的所有事件进入接收器之前,不会触发检查点。既然检查点是为了从故障中恢复,那么翻转窗口来创建状态又有什么意义呢?如果它创建了状态,那么请告诉我它在故障恢复中的作用。检查点不是这样工作的。对于理解Flink中的检查点是一个很好的参考。作为一个激励的例子,考虑有一个小时的翻滚窗口。事件在这些窗口中收集一小时,然后进行处理。如果作业在接近一小时结束时失败,并且窗口内容没有检查点,则必须重新接收该小时的数据。但是,如果你每10秒检查一次该状态,那么你最多只能将源倒带10秒。谢谢David。你的例子很有道理。最初我以为当checkpoit屏障到达水槽时会触发checkpoit,但正如你所说,我错了。我不太清楚检查点屏障、快照和检查点。你能告诉我这三者之间的关系吗?这些术语在我上面链接的Flink培训网站的页面中有定义。