我目前正在使用Apache flink并在其中使用RxJava,我的问题是:使用它们两者是否合适?因为我的flink操作总是map函数,所以我在内部使用Rx,比如从flink中获取元组并使用它们进行异步操作(转到DB,写入队列等),但我不是最终使用flink暴露给我的大多数方法,当Rxjava以处理结束时,我的程序步骤返回json。
你能告诉我这是否正确使用flink,或者是否有更好的方法来做我需要做的事情。 (比如使用它但是在flink步骤之间传递可观察量或类似的东西)。
感谢。
答案 0 :(得分: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
答案 1 :(得分:0)
尽管可能仍需要访问外部系统,但当前答案仍然适用于在Flink内保持状态,尽管性能Async I/O methods。异步操作员可以进入Flink的生命周期,并管理并发异步请求的数量,从而有望解决内存问题。