问题标签 [flink-statefun]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-flink - Flink 故障恢复:如果无状态算子失败了怎么办
我们知道,Flink 会定期为每个有状态的算子创建检查点,当崩溃发生时,它可以使用检查点来恢复系统。但是我在这些过程中找不到任何关于无状态操作员的论文或文档——“检查点的创建”和“故障的恢复”。谢谢你的帮助。
apache-flink - 如何在 Flink CEP 中指定状态应该保持的时间
让我解释一个我需要处理的场景。让我们假设三个设备 A、B、C 正在向 flink CEP 发送日志进行处理。让我们假设模式为 A,然后是 5 分钟 B,然后是 5 分钟后的 C。让我们假设 B 设备停机并在 50 分钟后发送日志的场景。所以在这种情况下,所有事件都将被丢弃。我只是想知道 flink 中是否有任何支持将状态维持在特定定义的时间间隔(假设在我的情况下为 1 天,这意味着 A 和 C 日志将存储 1 天后日志将是在不匹配的情况下丢弃)。请从 CEP 的角度提出可行性。
apache-flink - 有状态的函数 Flink 与 Hbase 和 Redis 的交互
学习如何使用 Flink Stateful Functions。我想知道它如何与 Hbase 和 Redis 交互。我在有状态函数中看不到 hbase 和 redis 的任何连接器。通过异步 api 调用通过服务访问这些是否有意义。
apache-flink - CEP 场景下 Flink 如何对状态数据进行编码?
我正在使用 Flink CEP 来识别一些事件模式,查询看起来像
我启用了 RocksDB 状态后端。我想检查 RocksDB 中的状态数据是什么样的。通过使用 RocksDB 的 Java API,可以成功检索到状态数据,但是它们是经过编码的。
我想知道 Flink 如何以及在哪里对这些状态数据进行编码。
谢谢
apache-flink - Apache Flink - FsStateBackend - 在任务管理器失败的情况下如何恢复状态,将状态存储在其本地文件系统中
假设我们有 2 个作业管理器(用于 HA 的 ZooKeeper)和 3 个任务管理器。我已经为检查点配置了 FsStateBackend。我假设 FsStateBackend 在每个维护内存状态的任务管理器中运行。在检查点时,状态会保存在我们配置的路径中(文件:/数据)。基本上我已经配置了指向本地文件系统的路径。因此,每个任务管理器都有自己的本地磁盘存储,其中保存了检查点数据。据我了解,一个小的元数据会在检查点上发送到 Job Manager。
- 如果其中一个任务管理器崩溃了怎么办?可以肯定的是,任务是在任何可用的任务管理器中启动的。自从任务管理器(崩溃的任务管理器)检查点数据因关闭而无法使用后,作业状态如何恢复?检查点进程是否将状态信息发送到 Job Manager?
- 任务管理器在检查点期间向作业管理器发送的元数据是什么?
- 我们使用的文件系统是否应该是分布式状态?例如 NFS、S3。如果我们使用系统本地存储进行检查点会发生什么。
谢谢
apache-flink - Apache Flink,每日轮班的事件时间窗口
我的 Flink 工作必须在每个工作班次后计算某个聚合。班次是可配置的,看起来像:
出于操作目的,每天的班次都是相同的,一周/一年中的天数之间没有区别。班次配置可以随时间变化并且可能是非单调的,因此这会在表格中留下一个微不足道的 EventTime 窗口,例如:
TumblingEventTimeWindows.of(Time.of(6, HOURS))
因为一些班次可能会缩小或跨越加班,或者可能会插入几个小时的休息时间。 ..
我想出了一些基于 GlobalWindow 和自定义触发器的东西:
在我的自定义触发器中,我尝试辨别传入事件是否超过了正在进行的工作班次的结束时间,并为班次触发窗口:
省略用于状态管理和一些记忆优化的代码,这似乎在流式用例中运行良好:在班次结束时间之后进入的第一个事件,触发最后班次的触发和聚合。
然而,作业可以在日期参数的范围内运行(例如:重新处理过去的时间段),或者由于一组预期的原因而过早关闭。当这种事情发生时,我观察到最后一个窗口没有被触发/刷新,
即:一天的最后一个班次在午夜结束,并且应该开始第二天的第一个班次。晚上 23:59 有一个活动,轮班即将结束。但是,该作业仅在今天运行,并在 00:00 完成。由于没有新元素到达自定义触发器并通过该行触发窗口触发,因此不会计算最后一次班次的聚合,但是,即使在下一次班次中没有发生任何事情或作业终止,仍然会出现一些部分结果在正在进行的转变中。
我读过这个的原因是:
Flink 保证只删除基于时间的窗口而不是其他类型的窗口,例如全局窗口(参见窗口分配器)
我已经查看了org.apache.flink.streaming.api.windowing
包内部以寻找类似 aTumblingEventTimeWindows
或我可以在一天DynamicEventTimeSessionWindows
的结束时间使用或扩展的东西,这样我就可以在元素的水印时依赖这些触发的默认事件时间触发器超过了窗口限制,但我不知道该怎么做。直觉上,我希望得到类似的东西:
我知道对于任意复杂的用例,有些人所做的是放弃 Windows API 以损害低级进程功能,他们在给定规则或它们适合并从定义的聚合函数或累加器中提取结果。同样在一个过程函数中,可以通过点击onClose
钩子来确定任何未决的计算。
是否有一种方法可以通过扩展 Windows API 中的任何对象来获得每天特定时间的重复事件时间窗口的概念?
apache-flink - MapState 在 RichCoFlatMapFunction 中始终为空
我正在阅读 2 个流。一个带有记录,一个带有元数据。
我第一次希望我的应用程序通过扫描完整的表来构建元数据并将其保存到 Flink 的 MapState。表上的更新将通过元数据流捕获,并且 MapState 将相应地更新。
从第二次开始,我想使用 MapState 而不是读取整个表。
下面是我对这个功能的实现,但是我的 MapState 总是空的,我在这里做错了吗?
编辑:其余的应用程序
apache-flink - 读取一个表中的所有条目并将其保存到 Flink 中的 MapState 一次
我有一张桌子Metadata
。
我想要我的 Flink 应用程序中的表格内容。所以我想读取表中的所有条目并保存到MapState<Metadata::Id, Metadata>
.
如果我的应用程序重新启动,我不想从表中读取,而是从表中读取MapState<Metadata::Id, Metadata>
并使用它。
有没有办法我可以做到这一点?