如何存储 Apache Storm 中所有 Spouts 和 Bolts 都可以访问的变量?
How to store variables that can be accessed by all Spouts and Bolts in Apache Storm?
我有一个创建许多 Spout 和 Bolt 的 Storm 拓扑。它们显然会分布在各种 systems/nodes 上,这些 systems/nodes 拥有自己的 JVM。
我知道 Storm 将自动管理网络通信,以便 Spout 发出的元组将到达不同 JVM 上的 Bolt。
我不明白的是如何维护一些可以跟踪事物的变量。
我想要一个变量来计算 Bolt-A
的所有实例已处理的元组数。另一个用于计数 Bolt-B
等的变量。
我还需要一个用作标志的变量,以便我知道何时 Spout 没有更多数据可发送,以便 Bolt 可以开始写入 SQL。
我考虑过使用 Redis
,但想知道这是最好的方法还是有其他方法?任何地方都有可用的代码示例吗?我 Google-搜索过,但没有找到太多有用的信息。
您应该能够从 Storm UI 中获取每个组件以及每个组件的每个实例发出和传输的元组数量。甚至还有一个 REST API 来检索值。
首先,无法在 Storm 上的任务之间共享变量。
您可以定义自己的 'control' 消息并将其发送到 Bolts 以了解 Spout 没有要发出的消息,而不是直接共享标志。
与 Redis 共享状态是一种可能的选择(您需要实现自己的逻辑),但标志值可能会闪烁,因此您可能需要处理它。
对于第一个要求,您可以使用 Metrics API (http://storm.apache.org/releases/0.10.1/Metrics.html)
对于第二个需求,为什么不发送一个类似于定时器元组的"flush"元组呢?
我有一个创建许多 Spout 和 Bolt 的 Storm 拓扑。它们显然会分布在各种 systems/nodes 上,这些 systems/nodes 拥有自己的 JVM。
我知道 Storm 将自动管理网络通信,以便 Spout 发出的元组将到达不同 JVM 上的 Bolt。
我不明白的是如何维护一些可以跟踪事物的变量。
我想要一个变量来计算 Bolt-A
的所有实例已处理的元组数。另一个用于计数 Bolt-B
等的变量。
我还需要一个用作标志的变量,以便我知道何时 Spout 没有更多数据可发送,以便 Bolt 可以开始写入 SQL。
我考虑过使用 Redis
,但想知道这是最好的方法还是有其他方法?任何地方都有可用的代码示例吗?我 Google-搜索过,但没有找到太多有用的信息。
您应该能够从 Storm UI 中获取每个组件以及每个组件的每个实例发出和传输的元组数量。甚至还有一个 REST API 来检索值。
首先,无法在 Storm 上的任务之间共享变量。
您可以定义自己的 'control' 消息并将其发送到 Bolts 以了解 Spout 没有要发出的消息,而不是直接共享标志。
与 Redis 共享状态是一种可能的选择(您需要实现自己的逻辑),但标志值可能会闪烁,因此您可能需要处理它。
对于第一个要求,您可以使用 Metrics API (http://storm.apache.org/releases/0.10.1/Metrics.html)
对于第二个需求,为什么不发送一个类似于定时器元组的"flush"元组呢?