数据采集方案初探

彭宇成 彭宇成     2022-12-01     757

关键词:

问题

用户浏览网站、App或者小程序的基础行为(浏览、点击、搜索与收藏等)数据怎么采集?会话粒度的数据怎么获取? 埋点与无埋点采集?

背景

数据采集是整个数据分析的前奏,直接关系到后续数据展现的准确性。本文聚焦网站及H5编写的微信服务号,旨在统一用户行为数据采集方式,形成一致的SDK编码规范。
当前,主流数据采集方式有埋点与无埋点两种。所谓的埋点方式即在网站、APP或者小程序的前或后端某处嵌入一段js或java(scala、c++等)代码,用来监控、收集并上报用户的基础行为数据至服务器。埋点采集最大的弊端在于每分析一个业务指标都需要手动添加一段代码,后期开发与运维成本较高。而无埋点只加一段SDK就能实时、全量、自动收集用户的行为数据,能极大地简化数据采集成本,但技术瓶颈较高。关于无埋点的原理及应用,请参考文末相关链接。
本方案基于埋点方式实现。

方案

一、系统结构

SDK 组件 : 在网站或app前端及后端埋点监听并获取用户的原生行为数据.

Nginx 组件 : 按照制定的格式收集sdk端发送过来的数据.

Flume 组件 : 监控Ng服务器的日志目录,并按照数据的特点分类推送 -实时数据推送Kafka、离线数据推送到 Hdfs.

Hdfs 组件 : 存放采集后的原始离线数据.

Kafka 组件 : 存放采集后的原始实时数据.

整个数据采集流程从渠道 PC、adroid&ios与微信服务号三大门户开始,通过在门户前端集成js SDK,埋点收集用户的基础行为数据,并向Nginx服务器发送http请求(eg、http://jr.midea.com/approval.html ? requestdata,其中requestdata为json格式的日志数据)。Nginx在本地目录按照指定的格式生成一份日志文件,Flume监听并主动拉取新增的日志数据,根据业务场景对数据实时性要求的不同分别sink到不同的接收源:hdfs-离线数据,kafka-实时数据。
:Flume直接从Nginx生产环境拉取日志数据,会影响系统性能,后续考虑在Nginx与Flume之间增加一层FTP服务器:Nginx在空闲时间定时主动上报日志数据到FTP,Flume监听并获取FTP上的日志数据。

二、SDK 介绍

2.1 工作原理

基于事件驱动,按照采集数据类型的不同,分成三类事件:Register、PageView、自定义js与java事件。


js SDK 与 java SDK 工作流程图

注意:
1)、使用UUID而非IP地址作为用户的 以为标识符?采用拨号的方式上网,用户ip会发生变化,可能出现多个IP地址对应同一个用户。
2)、在前端生成会话ID,而不是从数据库读取。

2.2 API 说明

这部分以 PageView 事件为例,介绍api的基本格式。

a) 共性参数说明。不同api所涉及到的参数不尽相同,但都有一些共性参数:

b) PageView事件说明

当用户访问页面/刷新页面的时候触发该事件。该事件会自动调用,也可以让程序员手动调用:

操作手册

a) 编写 API
按照业务分析需求,编写相关采集方式。 模板代码 略。

b)集成 SDK
Js sdk的集成分为两种方式,第一种是直接使用script标签引入js,第二种是在页面加载完成后执行js代码,js代码再进行js的加载 :

1  <script src=//jr.midea.com/analytics.js”></script>
2  <script type=”text/javascript”>
    var _aelog_ = _aelog_ || [];
// 设置_aelog_相关属性
(function()
    var aejs = document.createElement('script');
)();
</script>

Java sdk 直接通过eclipse等自带的打包工具打成.jar包,然后添加到项目的依赖中。

总结

本文简要介绍了埋点采集与无埋点采集、详细地描述了数据采集系统结构与JS SDK工作原理及基本数据请求格式。
至于具体的 js SDK样例代码及 Nginx与Flume的配置详见后文。

参 考

1】 走出只关注PV、UV的误区,数据分析这样做才能解决问题 by 叶钉钉
2】 无埋点技术产品级应用Growing IO官网
3】 Flume官网
4】 Flume+Spark+Hive+Spark SQL离线分析系统
5】 离线分析项目实战-北风网 Jerry Liu [特别致谢]

状态压缩dp初探(代码片段)

...梦想求把NM的棋盘分割成若干个12的的长方形,有多少种方案。例如当N=2,M=4时,共有5种方案。当N=2,M=3时,共有3种方案。如下图所示:输入格式输入包含多组测试用例。每组测试用例占一行,包含两个整数N和M。当输入用例N=0... 查看详情

rediscluster初探之部署(代码片段)

...,在3.0版本之后,redis官方推出了高可用的redis集群解决方案。重点知识:数据分区分布式数据库是将数据根据分区规则划分到多个节点上,每个节点负责存储一部分数据;常用的分区规则有哈希分区与顺序分区两种,两种方式... 查看详情

快手qoe指标设计的分析初探

...据收集,分析,才能精准的定位问题,并制定方案改进。本文来自快手流媒体大数据平台架构师罗喆在LiveVideoStackCon热身分享上的分享,他会在10月19-20日的LiveVideoStackCon上分享更详细和完整的内容。文/罗喆整理/Liv... 查看详情

数据结构初探(代码片段)

...需要围绕问题的解决进行设计同一个问题可以有多种解决方案数据结构起源??数据结构主要研究非数值计算程序问题中的操作对象以及它们之间的关系。计算机从解决数值计算问题到解决生活中的问题现实生活中的问题涉及不同... 查看详情

网络虚拟化初探

数据包从虚拟机到物理机的过程KVM的网络优化方案,总的思路就是让虚拟机访问物理网卡的层数更少,直至对物理网卡单独占领,和物理机一样使用物理网卡单独占领,和物理机一样使用物理网卡,以达到和物理机一样的网络性... 查看详情

数据格式初探

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。可以创建一个新的JavaScript变量,然后将JSON... 查看详情

生物与信息识别在泛金融场景下的最佳实践初探----指纹识别厂商的解决方案总览

文章大纲北图高科(生物识别)银行储蓄系统方案银行ATM机取款指纹认证系统汇顶科技研腾科技中天一维亚略特科技股份有限公司迪安杰眼神科技主要解决方案—中国农业银行主要解决方案—中国工商银行中正智能指纹押运管理... 查看详情

delphilivebindings初探

DelphiLiveBindings初探 LiveBindings,顾名思义,动态绑定。1、绑定前: 2、点击数据源: 3、绑定连线:点击蓝色区域,按住鼠标左键,一直移动到绿色区域,然后松掉鼠标左键。 系统就完成了系统绑定: 然后,Lab... 查看详情

boostasio初探

一、简介BoostAsio(asynchronousinputandoutput)关注数据的异步输入输出。BoostAsio库提供了平台无关性的异步数据处理能力(当然它也支持同步数据处理)。一般的数据传输过程需要通过函数的返回值来判断数据传输是否成功,而BoostAsio... 查看详情

初探elk-每天5分钟玩转docker容器技术(89)

在开源的日志管理方案中,最出名的莫过于ELK了。ELK是三个软件的合称:Elasticsearch、Logstash、Kibana。Elasticsearch一个近乎实时查询的全文搜索引擎。Elasticsearch的设计目标就是要能够处理和搜索巨量的日志数据。Logstash读取原始日... 查看详情

自定义数据结构初探

从最基本的层面理解,数据结构是把一组相关的数据元素组织起来然后使用她们的策略和方法。C++运行用户以类的形式自定义数据类型,而库类型是语言自身定义的,类在C++中十分重要!尽管sales_item很简单,但要想给出其完整... 查看详情

lucene初探之数据格式详情

Lucene初探之数据格式详情(三)今天,我们来了解一下Lucene的域的元数据信息—>.fnm。一个段包含多个域,每个域都存储一下元数据。fnm文件的详细数据格式大致如下:如同上面对段的信息的介绍一般,我们来一个... 查看详情

数据库之增删改查初探

插入数据:insertinto表名(列名1,列名2.........)values(值1,值2)如果插入多条数据则insertinto表名(列名1,列名2.........)values(值1,值2),(值1,值2)... 2.查询数据:select*from表名 //查询表中所有数据,其中*可以改为列名... 查看详情

初探数据结构

在经过一段时间的JAVA基础学习之后,最近开始学习JAVA中的集合框架,当看到链表、散列这些数据结构的时候,总有一些云里雾里的感觉。虽然JAVA集合框架中为我们封装好了绝大多数的常用基础数据结构,但知其然不知其所以然... 查看详情

初探装饰器模式(代码片段)

...构。若要扩展功能,装饰器提供了比继承更有弹性的替代方案。场景:假如有这样一个抽象装备类packagepattern.decorator;publicabstractclassEquipmentintpower;//战斗力Stringdesc="";//介绍publicStringgetDesc()returndesc 查看详情

初探ignite

Guava是一个很方便的本地缓存工具,但是在多节点处理的过程中,本地缓存无法满足数据一致性的问题。分布式缓存Ignite很好的解决了数据一致性,可靠性,事务性等方面的问题。Ignite支持分区方式和复制方式存储数据,侧重于... 查看详情

大数据讲课笔记2.1初探大数据(代码片段)

...;在交通方面,大数据能帮助人们选择最佳出行方案。本次课我们将针对大数据的相关知识进行详细讲解。二、新课讲解(一)什么是大数据 查看详情

大数据讲课笔记2.1初探大数据(代码片段)

...;在交通方面,大数据能帮助人们选择最佳出行方案。本次课我们将针对大数据的相关知识进行详细讲解。二、新课讲解(一)什么是大数据 查看详情