• 基于Kafka的服务端用户行为日志采集


    本文来自网易云社区


    作者:李勇

    背景

    随着互联网的不断发展,用户所产生的行为数据被越来越多的网站重视,那么什么是用户行为呢?所谓的用户行为主要由五种元素组成:时间、地点、人物、行为、行为对应的内容。为什么要做用户的行为分析?因为只有做了用户行为分析才能知道用户画像、才能知道用户在网站上的各种浏览、点击、购买背后的商业真相,从而给企业带来商业价值。

    网易美学是一个供用户发现和分享美妆及护肤的社区。既然是一个社区,其中的用户行为分析扮演着举足轻重的角色。对应网易美学来说,用户行为主要有以下几个应用场景:

    • 推荐系统。目前的推荐是基于用户的行为,然后运用不同的算法计算出用户应该展现的推荐数据。

    • 拉新。对于一个产品来说,不断的获取新用户是其中一个目标,有更多的新用户使用产品,就意味着该产品能够得到更多人的认可。

    • 转化率。一个用户从注册到各个页面的浏览等行为组成一个漏斗模型,漏斗的每个模型可以看到用户的留存状况。

    • 留存率。一个产品不但能让更多的新用户使用,也要保证老的用户不流失。

    • 促活率。所谓的促活率,就是让老用户经常使用该产品,让用户喜欢上这个平台。

    埋点技术

    用户的行为对于一个互联网产品来说很重要,因此如何采集用户的行为就变得非常至关重要了。对用户的行为采集可以通过埋点的方式实现,埋点主要有以下几种方式:

    • 前端埋点。在某个控件操作发生时通过预先写好的代码来发数据的代码埋点。

    • 客户端埋点。即app使用一些sdk对用户的行为进行收集然后批量发送到一个收集平台。

    • 服务端埋点。服务端埋点就是通过拦截用户的请求接口,对用户的一些行为信息进行采集。

    服务端日志采集

    下面我详细介绍下网易美学的服务端日志采集系统使用的技术,总体架构,部署图,运作流程以及配置相关信息。

    1. 技术选型

    服务端日志采集主要通过在Controller的接口中进行埋点,然后通过AOP技术、Kafka消息系统以及logback对用户行为进行采集。

    之所以使用AOP技术是因为AOP的以下重要特定:

    • 代码的侵入性小。对于业务代码的侵入性小,只需要在Controller的接口上添加注解,然后在其他模块对用户行为进行采集。

    • 重用性。对于相同作用的代码可以进行重用。

    • 扩展性。能够很好的对系统进行扩展。

    由于使用异步方式对用户行为信息进行收集,因此需要使用消息中间件。目前消息中间件非常多,比较流行的有ActiveMQ、ZeroMQ、RabbitMQ、Kafka等。每个消息中间件都有各种的优势劣势,之所以使用Kafka消息中间件,是因为以下几点因素:

    • 高性能。每秒钟可以处理数以千计生产者生成的消息。

    • 高扩展性。可以通过简单的增加服务器横向扩展Kafka集群的容量。

    • 分布式。消息来自数以千计的服务,使用分布式来解决单机处理海量数据的瓶颈。

    • 持久性。Kafka中的消息可以持久化到硬盘上,这样可以防止数据的丢失。

    因为用户的行为数据最终是以日志的形式持久化的,因此使用logback对日志持久化到日志服务器中。

    2.总体架构

     

    图1 总体架构图

    服务端日志采集系统主要由两个工程组成:beauty-bi-core和beauty-bi-service。由于网易美学的使用dubbo框架,因此有服务提供方和服务消费方。beauty-bi-core被web、wap和mainsite服务消费方依赖。此外,beauty-bi-service也依赖于beauty-bi-core,主要是依赖于其中的一些实体类及工具类。

    beauty-bi-core工程为Kafka消息的生产者,主要封装实现切面的具体逻辑,其主要职责如下:

    • 解析用户请求的Request信息:从Request中提取用户的基本信息,如设备型号、用户的供应商、ip、设备的分辨率、设备平台、设备的操作系统、设备id、app渠道等。

    • 接口对应的参数:通过切面可以提取接口的参数值,从而知道用户的业务信息。

    • 应用层返回的结果信息:因为切面使用AfterReturning方式,因此可以获取用层的返回结果,从返回结果中可以提取有用的信息。

    • 用户的基本信息:用户的id信息。

    • 信息格式化:将信息转化成JSON字符串。

    • 发送消息:将最终需要发送的消息放入本地阻塞队列中,通过另一个线程异步从阻塞队列中获取消息并发送到Kafka Broker中。

    beauty-bi-service工程为Kafka消息的消费者,其主要职责如下:

    • 实时从Kafka中拉取最新的数据。

    • 将JSON字符串转化成,方便进一步对用信息进行加工。

    • 对用户的ip进行解析,获取ip对应的地区以及经纬度信息。

    • 将加工好的最终信息持久化到log文件中。

    3.部署图

    图2 部署图

      上图为网易美学与日志系统系统相关的部署图,App、Wap和Mainsite服务器集群分别对应不同终端的应用。Kafka集群使用杭研的集群,目前有10个Broker。日志服务器有两台,通过Kafka的均衡策略对日志进行消费。

    4.日志采集的流程

    日志采集流程图如下所示:

     

    图3 日志打点流程图

    上图为消息生产者和消息消费者共同组成的流程图。

    消息生产者的具体步骤如下:

    • 通过切面拦截用户的请求。

    • 从切面中提取请求头的基本信息,如设备信息,cookie信息,ip信息等。

    • 提取请求的接口参数信息。

    • 从接口返回值中提取相关信息,如id,pvid等。

    • 将提取的信息封装成JSON字符串,放到阻塞队列中,假如阻塞队列溢出会有三次重试机制。

    • 异步线程从本地阻塞队列中获取数据,并将信息组装发送到Kafka的Broker中,此时消息生产者结束。

    消息消费者的具体步骤如下:

    • 实时从Kafka Broker中批量拉取消息。

    • 将拉取的消息转化成对象。

    • 解析ip对应的国家、省份、城市、经纬度信息。

    • 对不同业务场景的信息进一步解析。

    • 将日志信息转化成JSON字符串,持久化到log文件中。

    5. 相关配置

    • application-XXX.properties:该配置放Kafka的相关属性,包括topic、groupId、server等信息。

    • beauty-log-msg.xml:该配置放在app-web,mainsite-web,wap-web的src/main/resources目录下,主要是初始化kafka生产者的信息。

    • beauty-bi-service.xml:该配置放在beauty-bi-service工程的src/main/resources目录下,主要用于加载kafka消费者的配置信息,并且启动kafka消费者服务。

    • logback.xml:该配置放在beauty-bi-service工程的src/main/resources目录下,主要用于声明日志文件存放的目录,需要持久化的日志的package路径,以及日志持久化的格式。

    • ip_conf.txt:该配置放在beauty-bi-service工程的src/main/resources目录下,用于解析ip对应的地域、经纬度等信息。

    网易云大礼包:https://www.163yun.com/gift

     

    本文来自网易云社区,经作者勇授权发布。


    相关文章:
    【推荐】 行为式验证码的前景
    【推荐】 知物由学 | AI网络安全实战:生成对抗网络
    【推荐】 AndroidApp的破解技术有哪些?如何防止反编译?

  • 相关阅读:
    轻重搭配
    EF的优缺点
    使用bootstrap-select有时显示“Nothing selected”
    IIS发布 HTTP 错误 500.21
    js添加的元素无法触发click事件
    sql server查看表是否死锁
    sql server把一个库表的某个字段更新到另一张表的相同字段
    SQLSERVER排查CPU占用高的情况
    SQL server中如何按照某一字段中的分割符将记录拆成多条
    LINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)' method, and this method cannot be translated into a store expression.
  • 原文地址:https://www.cnblogs.com/163yun/p/9578250.html
Copyright © 2020-2023  润新知