【问题标题】:Updating changes while the cluster is running在集群运行时更新更改
【发布时间】:2015-08-04 07:57:52
【问题描述】:

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

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

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

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

如何解决这个问题?如果在 mongodb 中进行了任何更改(参考添加或删除 IP),是否在集群运行时更新 IP?

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

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

如何有效地做到这一点?

【问题讨论】:

  • 您自己发布的同一个问题有几个变体,不可避免地被删除并再次重新发布(可能是由于累积的接近投票,和/或因为没有人回答) .在不同的变体中,同样的事情被一遍又一遍地询问,并给出相同的基本答案。 “缓存”。迄今为止给出的接近投票是因为问题在可能的解决方案中特别“过于宽泛”,或者只是直接“主要基于选项”与“投票给 Redis,勾选框 A”或“投票给 MongoDB,勾选框 B "。
  • 所以试着用“你的限制来表达这个问题。如果你没有“被允许”设置一个外部缓存,那么基本上可以理解询问服务您的应用程序中的“带外”将总是意味着某种外部命中。Mongo/Redis/Memcached 或其他任何东西如果在您的应用程序的单独实例上运行都意味着这一点。您的问题也可能做更多的解释。你为什么需要这个?正在运行什么类型的查询?你可以“预聚合”结果吗?
  • 我删除了上一个问题,因为它没有说明完整的问题(抱歉)。因为,如果我编辑问题会造成混乱,因为它已经有了一些答案和建议。
  • 正如这里也提到的,前面的复数中的“questions”已经被注意到了。您确实需要 1. 将其缩小为您要优化的精确奇异函数并解释数据的使用。 2. 选择您想从中获得答案的技术并“坚持下去”。如果您想获得要比较的横截面信息,请针对每种技术提出不同的问题。所以,仍然是广泛的。如果您想要一些真正的建议,请将其缩小到可以合理回答的范围内。我的建议已经比问题更详细了。
  • 感谢您的建议。将编辑问题。

标签: java mongodb memory apache-storm


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2021-03-14
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多