在群集运行时更新更改

时间:2015-08-04 07:57:53

标签: java mongodb memory apache-storm

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

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

现在,我已经在mongoDB中存储了IP列表,每次我查询mongodb并检查IP是否存在。尽管它有效,但它会使处理变慢。

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

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

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

如果修改了IP列表,是否有任何方法可以触发事件。并刷新缓存。

如何以有效的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

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

我使用ALL分组进行黑名单事件,以确保我的所有bolt实例都获得黑名单已更改的备忘录。