Storm集成Redis(使用redis的发布订阅功能)

本文介绍了如何在实时日志分析平台中,利用Storm和Redis的发布订阅功能实现敏感信息规则的动态更新。当用户新增敏感信息时,通过Redis发布消息,Storm Bolt监听并更新本地缓存,从而达到近乎实时的规则更新效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、需求分析

       在上一篇中,我们搭建了一套实时日志分析平台,目前该平台的主要需求就是监测日志中是否含有某些敏感信息,对于不同的日志来源渠道,规则是不同的,有些是默认规则,有些是用户个性化需求,比如A系统,我的日志里面不允许出现hello这个单词,B系统我的日志里面不允许出现world这个单词,当用户新增了敏感信息后,要求应用能够近乎实时的更新其本地缓存(默认情况下,当storm启动的时候,会加载默认规则到bolt里面,而不是每次都从DB查询),这里我们采用redis的发布订阅来实现。


二、Storm使用Redis发布订阅

       redis的发布订阅类似于观察者模式,订阅者可以订阅多个主题,当发布者发布消息到某个主题的时候,订阅这个主题的客户端都可以收到,从而进行后续的业务处理。

       在看具体的代码实现之前,需要先了解一下storm里面bolt的生命周期以及bolt相关的几个方法是干嘛的

   

    public class IBolt接口测试  implements IBolt{  
      
        @SuppressWarnings("rawtypes")  
        @Override  
        public void prepare(Map stormConf, TopologyContext context,  
                OutputCollector collector) {  
            /** 
             * 1、提供bolt运行的一些环境 
             */  
        }  
      
        @Override  
        public void execute(Tuple input) {  
            /** 
             * 1、一次处理一个输入的元祖,元祖对象包括来自哪个组件/流/任务的元数据 
             * 2、IBolt没有立即处理元祖,而是完整的捕获一个元祖并在以后进行处理 
             * 3、如果实现basicBolt则不用手动ack() 
             */  
        }  
      
        @Override  
        public void cleanup() {  
            /** 
             * 1、当一个bolt即将关闭时调用,不能保证一定被调用,集群的kill -9 不行 
             *  
             */  
        }  
          
        /** 
         * bolt的生命周期:在客户端主机上创建Ibolt对象,bolt被序列化到拓扑,并提及到nimbus,然后nimbus 
         * 启动工作进程(worker)进行反序列化,调用其prepare()方法开始处理 
         */  
    }  

 

       我们的初始化工作都在prepare方法里面完成,对于不同的日志来源,可能topology的配置不一样,比如名字,应用需要监听的主题,所以我们在部署的时候,可能main方法会有几个,即不同的topic采用不同的topology进行接收处理,但是bolt尽量做到通用,在bolt里面,根据传入的工程名加载相对应的规则文件。先看代码

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>flume</groupId>
	<artifactId>storm</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>storm</name>
	<url>http://maven.apache.org</url>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<spring.version>4.3.3.RELEASE</spring.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.4.2</version>
		</dependency>
		<dependency>
			<groupId>commons-pool</groupId>
			<artifactId>commons-pool</artifactId>
			<version>1.6</version>
		</dependency>
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-framework</artifactId>
			<version>2.7.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.storm</groupId>
			<artifactId>storm-core</artifactId>
			<version>1.1.0</version>
			<scope>provided</scope>
			<exclusions>
				<exclusion>
					<groupId>ch.qos.logback</groupId>
					<artifactId>logback-classic</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>log4j-over-slf4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.clojure</groupId>
					<artifactId>clojure</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.ap
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值