0

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

  1. 接受一个日志文件
  2. 初始化所有数据库,内存存储资源
  3. 处理每一行
  4. 创建一组输出文件

每个输入文件都会发生上述过程。输入文件由 kafka 消费者编写。是否可以通过某种方式不将所有代码移植到 java 中来将此应用程序适合 spark 流?例如以以下方式

  1. 从 kafka 主题中获取消息
  2. 传递此消息以触发流式传输
  3. Spark 流以某种方式与旧版应用程序交互并生成输出
  4. spark然后在kafka中再次写入输出

我刚才讲的都太高级了。我只想知道是否有可能通过不在java中重新编码现有应用程序来做到这一点?谁能大致告诉我如何做到这一点?

4

2 回答 2

1

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

但是,您可以更改应用程序的架构并创建一些外部服务(ws、rest 等)并从 Spark 使用它们(您可以使用所需的任何库)——并非旧应用程序中的所有模块都必须重写为 Java。我会尝试那样做:)

于 2016-06-21T12:12:16.607 回答
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

于 2016-06-28T21:29:31.613 回答