在集群 运行 时更新更改

Updating changes while the cluster is running

我正在使用 Apache Storm 处理日志数据。

我需要根据 IP.I 有一个我需要的 IP 列表来处理日志 ignore.Basically,如果存在那个特定的 IP,那么我需要拒绝日志,否则处理它。

现在,我已将 IP 列表存储在 mongoDB 中,每次我查询 mongodb 并检查 IP 是否存在或 not.Though 它是否有效,但它使处理缓慢。

我还尝试将 IP 列表存储在内存中,这使得处理速度更快,但问题是 IP 列表可以 change.I 意味着我可能需要在拓扑时从列表中包含或排除某些 IP是 运行.

如何解决这个问题?如果 mongodb 中有任何更改(关于 IP 的添加或删除),是否可以在集群为 运行 时更新 IP?

除了mongo我无法使用任何其他数据库来存储IP列表。

如果IP列表被修改,有什么方法可以触发事件。并刷新缓存。

如何有效地做到这一点?

每次我在 mongoDB 添加或删除 IP 时,通过在 Apache Kafka 中放置一个事件来解决它。我在我的拓扑中创建了第二个 spout,用于监听这些事件并将它们发送到我的 bolt。然后我的 bolt 会像往常一样收听消息以进行过滤,但也会收听这些黑名单事件(要忽略的 IP)以更新其内存中的黑名单状态。

我对黑名单事件使用了 ALL 分组,以确保我所有的螺栓实例都得到黑名单已更改的备忘录。