1

我目前正在使用 Apache flink 并在其中使用 RxJava,我的问题是:同时使用它们是否合适?因为我的 flink 操作始终是映射函数,并且在其中我大量使用 Rx,例如从 flink 中获取元组并对其进行异步操作(转到数据库,写入队列等),但我没有结束当 Rxjava 以处理结束时,使用 flink 向我公开的大多数方法和我的程序步骤返回 json。

你能告诉我这是否是 flink 的正确用法,或者是否有更好的方法来做我需要做的事情。(比如使用它,但在 flink 步骤或类似的东西之间传递 observables)。

谢谢。

4

2 回答 2

2

Flink 有强大的工具来处理状态(例如在 Windows 中)[1,2],这通常可以避免调用其他系统。例如,您可以在 Flink 中使用(检查点)KeyValueState,而不是在外部键值存储中处理状态。在 Flink 内部处理状态通常比调用外部系统/数据库更有效/更快。

Flink 程序中异步调用的一个问题可能是 Flink 比被调用的系统更快,这导致打开的期货数量增加,最终导致内存问题。所以,我认为,一般建议在 Flink 算子内部使用同步调用来降低 Flink 到被调用系统的速度,避免内存泄漏。

最近在邮件列表中讨论了最后一点:http: //mail-archives.apache.org/mod_mbox/flink-user/201606.mbox/%3CCALrNVjVw=iu7PB76VmKk+BD6rDXfSDwxpMrtzk8=L5d8xE-o8Q@mail.gmail.com %3E

[1] https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/streaming/windows.html [2] https://ci.apache.org/projects/flink/flink -docs-release-1.0/apis/streaming/state.html

于 2016-06-12T15:58:18.523 回答
0

当前的答案仍然适用于尽可能在 Flink 中保持状态,但如果您仍需要访问外部系统,则可以使用高性能异步 I/O 方法。Async Operators 挂钩到 Flink 的生命周期并管理并发 Async 请求的数量,希望能抑制内存问题。

于 2019-11-20T12:20:15.680 回答