我正在使用Apache Storm处理日志数据。
我需要在IP的基础上处理日志。我有一个我需要忽略的IP列表。基本上,如果存在特定的IP,那么我需要拒绝其他日志处理它。
现在,我已经在mongoDB中存储了IP列表,每次我查询mongodb并检查IP是否存在。尽管它有效,但它会使处理变慢。
我还尝试将IP列表存储在内存中,这使得处理速度很快但问题是IP列表可以更改。我的意思是当拓扑运行时,我可能需要在列表中包含或排除某些IP。 / p>
如何解决这个问题?如果mongodb中有任何更改(参考IP的添加或删除),是否有在集群运行时更新IP?
我不能使用除mongo之外的任何其他数据库来存储IP列表。
如果修改了IP列表,是否有任何方法可以触发事件。并刷新缓存。
如何以有效的方式做到这一点?
答案 0 :(得分:1)
每当我从Apache Kafka
添加或删除IP时,都会在mongoDB
中放置一个事件来解决此问题。我在我的拓扑中创建了第二个spout,它侦听这些事件并将它们发送到我的bolt。然后,我的螺栓会正常监听消息以进行过滤,但也会监听这些黑名单事件(要忽略的IP),以便更新其内存中的黑名单状态。
我使用ALL分组进行黑名单事件,以确保我的所有bolt实例都获得黑名单已更改的备忘录。