基于flink的电商用户行为数据分析【4】| 恶意登录监控

本文介绍如何利用Flink的CEP库实现电商网站的恶意登录监控功能。通过监控用户在2秒内连续两次登录失败的情况,触发报警。文章详细讲解了状态编程的逻辑、存在的问题以及CEP编程的原理和应用,最后展示了代码实现和运行结果。
摘要由CSDN通过智能技术生成

本文已收录github:https://github.com/BigDataScholar/TheKingOfBigData,里面有大数据高频考点,Java一线大厂面试题资源,上百本免费电子书籍,作者亲绘大数据生态圈思维导图…持续更新,欢迎star!

前言

        在上一期内容中,菌哥已经为大家介绍了实时热门商品统计模块的功能开发的过程(👉基于flink的电商用户行为数据分析【3】| 实时流量统计)。本期文章,我们需要学习的是恶意登录监控模块功能的开发过程。

在这里插入图片描述

模块创建和数据准备

        继续在UserBehaviorAnalysis下新建一个 maven module作为子项目,命名为LoginFailDetect。在这个子模块中,我们将会用到flink的CEP库来实现事件流的模式匹配,所以需要在pom文件中引入CEP的相关依赖:

<dependency>
        <groupId>org.apache.flink</groupId>
<artifactId>flink-cep-scala_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
</dependency>

        同样,在src/main/目录下,将默认源文件目录java改名为scala。

        

代码实现

        对于网站而言,用户登录并不是频繁的业务操作。如果一个用户短时间内频繁登录失败,就有可能是出现了程序的恶意攻击,比如密码暴力破解。因此我们考虑,应该对用户的登录失败动作进行统计,具体来说,如果同一用户(可以是不同IP)在2秒之内连续两次登录失败,就认为存在恶意登录的风险,输出相关的信息进行报警提示。这是电商网站、也是几乎所有网站风控的基本一环。

        所以我们可以思考一下解决方案:

  • 基本需求
    – 用户在短时间内频繁登录失败,有程序恶意攻击的可能
    – 同一用户(可以是不同IP)在2秒内连续两次登录失败,需要报警

  • 解决思路
    – 将用户的登录失败行为存入 ListState,设定定时器2秒后触发,查看 ListState 中有几次失败登录
    – 更加准确的检测,可以使用 CEP 库实现事件流的模式匹配

        既然现在思路清楚了,那我们就尝试将方案落地。

状态编程

        由于同样引入了时间,我们可以想到,最简单的方法其实与之前的热门统计类似,只需要按照用户ID分流,然后遇到登录失败的事件时将其保存在ListState中,然后设置一个定时器,2秒后触发。定时器触发时检查状态中的登录失败事件个数,如果大于等于2,那么就输出报警信息

        在src/main/scala下创建LoginFail.scala文件,新建一个单例对象。定义样例类LoginEvent,这是输入的登录事件流。登录数据本应该从UserBehavior日志里提取,由于UserBehavior.csv中没有做相关埋点,我们从另一个文件LoginLog.csv中读取登录数据。

LoginLog.csv

        代码如下:

object LoginFailOne {
   

  // 输入的登录事件样例类
  case class LoginEvent( userId:Long,ip:String,eventType:String,eventTime:Long)

  // 输出的报警信息样例类
  case class Warning( userId:Long,firstFailTime:Long,lastFailTime:Long,warningMsg:String)

  def main(args: Array[String]): Unit = {
   

    // 创建流环境
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    // 设置并行度
    env.setParallelism(1)
    // 设置时间特征为事件时间
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

    // 读取csv文件
    env.readTextFile("G:\\LoginLog.csv")
       .map(data => {
   
          // 将文件中的数据封装成样例类
          val dataArray: Array[String] = data.split(",")
          LoginEvent(dataArray(0).toLong, dataArray(1), dataArray(2), dataArray(3).toLong)
        })
        // 设置 WaterMark 水印
      .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor[LoginEvent](Time.seconds(5)) {
   
        override def extractTimestamp(element: LoginEvent): Long = element.eventTime * 1000
      })
      // 以用户id为key,进行分组
      .keyBy(_.userId)
      // 计算出同一个用户2秒内连续登录失败超过2
好的,针对电商用户行为分析的 Flink 代码解析,我可以提供一些简单的示例代码和解释,供您参考。 首先,我们需要定义用户行为数据的数据模型,通常包括用户 ID、行为类型、商品 ID、时间戳等字段。示例代码如下: ```java public class UserBehavior { public long userId; public long itemId; public int categoryId; public String behavior; public long timestamp; } ``` 接下来,我们使用 Flink 流处理框架来实时处理和分析用户行为数据。示例代码如下: ```java // 创建数据源,从 Kafka 中读取用户行为数据 FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>("user-behavior", new SimpleStringSchema(), properties); DataStream<String> stream = env.addSource(consumer); // 将用户行为数据转换为 UserBehavior 对象 DataStream<UserBehavior> behaviorStream = stream.map(new MapFunction<String, UserBehavior>() { @Override public UserBehavior map(String value) throws Exception { JSONObject json = JSONObject.parseObject(value); return new UserBehavior( json.getLong("user_id"), json.getLong("item_id"), json.getInteger("category_id"), json.getString("behavior"), json.getLong("timestamp") ); } }); // 过滤出浏览行为,并进行分组聚合 DataStream<Tuple2<Long, Long>> pvStream = behaviorStream .filter(new FilterFunction<UserBehavior>() { @Override public boolean filter(UserBehavior behavior) throws Exception { return behavior.behavior.equals("pv"); } }) .map(new MapFunction<UserBehavior, Tuple2<Long, Long>>() { @Override public Tuple2<Long, Long> map(UserBehavior behavior) throws Exception { return new Tuple2<>(behavior.itemId, 1L); } }) .keyBy(0) .sum(1); // 输出结果到控制台 pvStream.print(); ``` 以上代码实现了从 Kafka 中读取用户行为数据,将数据转换为 UserBehavior 对象,过滤出浏览行为,并按商品 ID 进行分组聚合,最后将结果输出到控制台。 当然,电商用户行为分析还涉及到很多其他的问题和场景,如购买转化率分析、用户活跃度分析、商品热度排名分析等等。针对不同的问题和场景,需要进行不同的数据处理和分析。希望这个示例代码能够帮助您理解 Flink电商用户行为分析中的应用。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据梦想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值