java - 在集群运行时更新更改

标签 java mongodb memory apache-storm

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

我需要根据 IP 处理日志。我有一个需要忽略的 IP 列表。基本上,如果该特定 IP 存在,那么我需要拒绝该日志,否则对其进行处理。

现在,我已将 IP 列表存储在 mongoDB 中,每次查询 mongodb 并检查 IP 是否存在。虽然它有效,但它使处理速度变慢。

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

如何解决这个问题?如果 mongodb 中发生任何更改(引用添加或删除 IP),是否可以在集群运行时更新 IP?

我不能使用除 mongo 之外的任何其他数据库来存储 IP 列表。

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

如何高效地做到这一点?

最佳答案

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

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

关于java - 在集群运行时更新更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31803721/

相关文章:

java - 使用 final 关键字声明一个列表字段

java - 了解异常处理 - 重新抛出异常

mongodb - 如何分组 mongodb - mapReduce 输出?

php - 如何找出 fork child 的最佳数量

c - 使用/dev/kmem 从内核读取地址值

java - 在 JavaFX 中为计算器创建退格按钮

java - 如何从命令行使用 Eclipse 嵌入式 Maven 安装?

java - java mongodb中按数组长度排序

linux - 是否有适用于 Linux 的 MongoDB GUI 桌面应用程序?

c++ - 从 int 到 char* 的看似不正确的转换 - 如何查看问题