我和我的团队正在开发使用flink的应用程序。数据将使用计算重的数值算法处理。为了尽可能优化它,我想在C/C 而不是Java中编写此算法。
问题是:是否可以在Flink中使用C/C 代码?也许将其包裹到Java库中?
我从未特别测试过这种情况。通常,您始终可以使用JNI(Java本机接口)使用Java中的本机代码。
这个想法是让Java立面揭示您的本机代码,并在Java(或其他JVM语言,如Scala)中定义的计算图中使用这些方法。您将不得不同时在所有相关节点上同时提供Java和本地库来完成此工作。如果您有一个hadoop群集,则可以利用纱线和工作(文档,请参阅--yarn-ship
CLI选项)。
我建议您逐步测试,并暴露出非常小的天然功能。另外,不要低估Java在性能方面的功能:有了一些思考的编程和利用JIT和其他运行时优化,长期运行的过程比具有不受管理的内存的类似本机代码可以享受更好的性能。
。请记住,当然,诉诸本机代码将意味着将代码的可移植性限制为您会编译库的平台。