基于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

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

相关文章:

【推荐】== vs === in Javascript

【推荐】网易杭研易盾实习心得

【推荐】网易易盾验证码的核心指标和系统兼容性认知大全

作者:网易数帆

链接:https://www.jianshu.com/p/3f8b02aba670

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容