Apache Flink 和 RxJava 的使用

Usage of Apache Flink and RxJava

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

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

谢谢。

Flink 拥有处理状态的强大工具(例如 windows)[1,2],这通常可以避免调用其他系统。例如,您可以在 Flink 中使用(检查点)KeyValueState,而不是在外部键值存储中处理状态。在 Flink 内部处理状态通常 efficient/faster 比调用外部 systems/databases。

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

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