在火花流中端口现有的php应用程序

时间:2016-06-21 11:50:28

标签: apache-spark apache-kafka apache-storm spark-streaming stream-processing

我们在php中有一个庞大的现有应用程序

  1. 接受日志文件
  2. 初始化所有数据库,内存存储资源
  3. 处理每一行
  4. 创建一组输出文件
  5. 每个输入文件都会发生上述过程。 输入文件由kafka消费者编写。是否可以通过某种方式不在Java中移植所有代码来使这个应用程序适合火花流?例如,按照以下方式

    1. 从kafka主题
    2. 获取消息
    3. 将此消息传递给spark streaming
    4. Spark流以某种方式与遗留应用交互并生成输出
    5. spark然后再次在kafka中写入输出
    6. 无论我刚刚提到的是什么都太高了。我只是想知道是否有可能通过不重新编码java中的现有应用程序来做到这一点?任何人都可以大致告诉我如何做到这一点?

2 个答案:

答案 0 :(得分:1)

我认为不可能直接在Spark中使用PHP。根据文档(http://spark.apache.org/)和我的知识,它只支持Java,Scala,R和Python。

但是,您可以更改应用程序的体系结构并创建一些外部服务(ws,rest等)并在Spark中使用它们(您可以使用您想要的任何库) - 并非所有来自旧应用程序的模块都必须重写为Java。我会试着这样做:)

答案 1 :(得分:0)

我认为Storm在这种情况下是一个很好的选择,因为它通过Thrift提供非jvm语言集成。另外我确信有一个PHP Thrift客户端。

所以基本上你要做的就是找到一个用PHP编写的ShellSpout和ShellBolt(这是在应用程序中与Storm交互所需的集成部分),然后编写自己的spout和bolt,它们正在消耗Kafka并处理每一行

您可以根据需要使用此库: https://github.com/Lazyshot/storm-php

然后,您还必须找到一个PHP Thrift客户端来与Storm集群进行交互。

Storm Thrift定义可以在这里找到: https://github.com/apache/storm/blob/master/storm-core/src/storm.thrift

可以在这里找到PHP Thrift客户端示例: https://thrift.apache.org/tutorial/php

现在将这些内容组合在一起,您可以用PHP编写自己的Apache Storm应用程序。

信息来源: http://storm.apache.org/about/multi-language.html http://storm.apache.org/releases/current/Using-non-JVM-languages-with-Storm.html