1

假设我有两个流:

Stream 1: [1,3],[2,4]
Stream 2: [2,5],[3,2]

常规合并会产生 Stream 3,如下所示:

[1,3],[2,4],[2,5],[3,2]

我想合并流,同时保留发出元组的顺序,因此如果[2,5]在时间 1[1,3]发出,在时间 2、[3,2]在时间 3 和[2,4]在时间 4 发出,则生成的流将是:

[2,5],[1,3],[3,2],[2,4]

有没有办法做到这一点,如果有,怎么做?一些示例代码将不胜感激,因为我是一个完整的 Trident 新手,最近被推入一个基于 Trident 的项目中。

在此先感谢您的帮助,

伊莱

4

1 回答 1

1

您必须使用 trident persistent 使用外部数据存储。我猜,排序的 redis 集应该可以满足您的目的。

更多信息

如果您浏览此https://github.com/nathanmarz/storm/wiki/Trident-tutorial,您可以了解如何使用 memcache 作为字数存储。

同样,你可以在 Redis 上写一个流备份(如果你不熟悉 redis 可以试试 http://redis.io/commands#sorted_set)。我认为 redis sorted set 将作为您的案例的目的。

如果您想要持久存储数据,您可以考虑使用其他 NOSQL 解决方案,例如 mongo,然后您可以随时轻松地索引最终数据。这将轻松提供您想要的排序功能。还有什么不是有人已经写了一个 mongo 三叉戟,https://github.com/sjoerdmulder/trident-mongodb

如果您仍然感到困惑,请告诉我。

于 2013-11-06T17:55:23.253 回答