我有一个Storm拓扑,可以创建许多Spout和Bolts。它们显然将分布在具有自己的JVM的各种系统/节点上。
据我所知,Storm将自动管理网络通信,以便Spout发出的元组将在不同的JVM上到达Bolts。
我不明白的是我如何能够保留一些可以跟踪事物的变量
我想要一个变量来计算Bolt-A
的所有实例处理过的元组数。另一个用于计算Bolt-B
的变量,依此类推。
我还需要一个充当标志的变量,以便我知道何时Spouts没有更多数据要发出,这样Bolts就可以开始写入SQL了。
我考虑过使用Redis
,但想知道这是最好的方式还是其他方式?任何代码样本随处可用?我谷歌搜索过,但找不到有用的信息。
答案 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)
对于第二个要求,为什么不发送类似于计时器元组的“刷新”元组?