如何存储Apache Storm中所有Spouts和Bolts都可以访问的变量?

时间:2016-05-05 06:45:43

标签: java redis apache-storm jedis

我有一个Storm拓扑,可以创建许多Spout和Bolts。它们显然将分布在具有自己的JVM的各种系统/节点上。

据我所知,Storm将自动管理网络通信,以便Spout发出的元组将在不同的JVM上到达Bolts。

我不明白的是我如何能够保留一些可以跟踪事物的变量 我想要一个变量来计算Bolt-A的所有实例处理过的元组数。另一个用于计算Bolt-B的变量,依此类推。

我还需要一个充当标志的变量,以便我知道何时Spouts没有更多数据要发出,这样Bolts就可以开始写入SQL了。

我考虑过使用Redis,但想知道这是最好的方式还是其他方式?任何代码样本随处可用?我谷歌搜索过,但找不到有用的信息。

3 个答案:

答案 0 :(得分:1)

首先,没有办法在Storm上的任务之间共享变量。

您可以定义自己的“控制”消息,而不是直接共享标记,然后将其发送到Bolts,以确定Spout没有消息要发出。

与Redis共享状态是可能的选项之一(您需要实现自己的逻辑),但标志值可能会闪烁,因此您可能需要处理它。

答案 1 :(得分:0)

您应该能够从Storm UI获取每个组件以及每个组件的每个实例发出和传输的元组数。甚至还有REST API来检索值。

答案 2 :(得分:0)

对于第一项要求,您可以使用Metrics API(http://storm.apache.org/releases/0.10.1/Metrics.html

对于第二个要求,为什么不发送类似于计时器元组的“刷新”元组?