每用户流处理

时间:2015-06-17 09:22:27

标签: apache-spark stream spark-streaming apache-storm apache-samza

我需要处理来自一组流的数据,将相同的详细信息应用于独立于其他流的每个流。

我已经看过像storm这样的框架,但它似乎只允许处理静态流(即tweet形成twitter),而我需要分别处理来自每个用户的数据。

我的意思的一个简单例子可能是一个系统,每个用户可以跟踪他的GPS位置,并实时查看平均速度,加速度,燃烧卡路里等统计数据。当然,每个用户都有自己的流,系统应该分别处理每个用户的流,就像每个用户都有自己的专用拓扑处理他的数据一样。

有没有办法通过风暴,火花流或samza等框架实现这一目标?

如果支持python会更好,因为我已经有很多我想重用的代码。

非常感谢您的帮助

3 个答案:

答案 0 :(得分:0)

使用Storm,如果您的元组中有用户ID,则可以使用字段分组连接模式对数据进行分组。这可以确保数据按用户标识进行分区,从而获得逻辑子流。您的代码只需要能够处理多个组/子流,因为单个bolt实例会获得多个组进行处理。但Storm确实支持您的用例。它也可以运行Python代码。

答案 1 :(得分:0)

在Samza中,类似于Storm,可以在某个用户ID上对各个流进行分区。这将保证相同的处理器将看到某个特定用户的所有事件(以及分区函数[例如散列]分配给该处理器的其他用户ID)。然而,您的描述听起来更像是在客户端系统上运行而不是服务器端操作。

Samza的非JVM语言支持proposed,但尚未实现。

答案 2 :(得分:0)

您可以使用WSO2 Stream Processor来实现此目的。您可以按用户名对输入流进行分区,并分别处理与每个用户相关的事件。处理逻辑必须用Siddhi QL编写,这是一种类似SQL的语言。

WSO2 SP也有python wrapper,它允许您执行管理任务,例如提交,编辑作业。但是你不能使用python代码编写处理逻辑。