我使用apachestorm来处理日志数据。
我需要在ip的基础上处理日志。我有一个ip列表,我需要忽略。基本上,如果特定的ip存在,那么我需要拒绝日志,否则处理它。
现在,我已经把ip列表存储在mongodb中了,每次我查询mongodb时都会检查ip是否存在,虽然可以,但是处理起来很慢。
我还尝试将ip列表存储在内存中,这使得处理速度很快,但问题是ip列表可能会更改。我的意思是,当拓扑运行时,我可能需要从列表中包括或排除某些ip。
如何解决这个问题?如果mongodb中有任何更改(涉及ip的添加或删除),那么在集群运行时是否仍有更新ip的方法?
我不能使用除mongo以外的任何其他db来存储ip列表。
如果ip列表被修改,是否有方法触发事件。并刷新缓存。
如何有效地做到这一点?
1条答案
按热度按时间jc3wubiy1#
通过在
Apache Kafka
每次我从mongoDB
. 我在拓扑中创建了第二个喷口,用于侦听这些事件并将它们发送到我的螺栓。然后,我的bolt会正常地侦听消息以进行过滤,但也会侦听这些黑名单事件(要忽略的ip)以更新其内存中的黑名单状态。我对黑名单事件使用了all分组,以确保我的所有bolt示例都得到黑名单已更改的备忘录。