数仓项目
项目准备
技术选型

系统数据流程图
版本选型

集群资源规划
用户行为日志
用户行为日志概述
用户行为日志的内容,主要包含用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是为了优化产品和为各项分析统计指标提供数据支撑。收集用户行为数据的手段称为 埋点。
埋点方式:
代码埋点(前端埋点、后端埋点)
通过
onClick()
等事件触发函数,向用户行为服务器发送数据。可视化埋点
全埋点(第三方公司提供SDK)
用户行为日志内容
页面浏览记录
动作记录
比如,因为领劵进行的点击动作,不能单单记录点击,因为点击对于分析没有意义,而是要记录因为领券而进行的点击,即领券动作。
曝光记录
启动记录
启动类型:
- 图标启动:用户主动点击 app 的图标 来启动 app
- 推送启动:用户由推送信息来启动 app
错误记录
500 错误码
404 错误码
……
用户行为日志格式
页面日志
页面日志,以页面浏览为单位,即一个页面浏览记录生成一条页面埋点日志。一条完整的页面日志包含:
- 一个页面浏览记录
- 若干个用户在该页面上所做的动作记录
- 若干个该页面的曝光记录
- 一个在该页面发生的错误记录
- 各种环境信息:
- 用户信息
- 时间信息
- 地理位置信息
- 设备信息
- 应用信息
- 渠道信息
启动日志
启动日志以启动为单位,一起启动行为生成一条启动日志。一条完整的启动日志包括:
- 一个启动记录
- 一个本次启动的错误记录
- 各种环境信息
Maxwell(Mysql到Kafka)
Maxwell 是一款开源软件,用 Java 编写的 MySQL 变更数据抓取软件。它会实时监控 MySQL 数据库的数据变更操作(包括 insert、update、delete),并将变更数据以 JSON 格式发送给 Kafka 等流数据处理平台。
Maxwell 的工作原理
实时读取 MySQL 数据库的二进制日志(Binlog),从中获取变更数据,再将变更数据以 JSON 格式发送到 Kafka 等流处理平台。
Binlog 日志是 MySQL 服务端非常重要的一种日志,它会保存 MySQL 数据库的所有数据变更记录。Binlog 的主要作用包括主从复制和数据恢复。Maxwell 的工作原理和主从复制密切相关。(伪装成 MySQL slave,监控 MySQL master 中的 Binlog 日志,但数据不存入从数据库,而是以 JSON 格式发送给Kafka)
Binlog 日志不是 redo log 日志,整体流程是:
- 先写 redo log 日志
- 数据库执行写操作
- 再写 Binlog 日志
- redo log 日志提交
MySQL 中的主从复制和读写分离和 Redis 中有些类似,又有些不同:
- 主从复制:只有一台服务器对外工作,另一台作为备份提供容错,备份服务器不对外提供服务(Redis 中从服务器会提供服务)
- 读写分离:一台服务器提供写操作服务,另一台服务器提供读操作服务,两台服务器都对外提供服务。
Maxwell 的部署安装
下载 Maxwell 合适的版本
Maxwell 1.30.0 及以上版本不支持 JDK8,所以下载 Maxwell 1.29.2 版本。下载地址:Maxwell’s Daemon (maxwells-daemon.io)
通过修改 MySQL 的配置文件
/etc/my.cnf
来开启 MySQL 的 Binlog 日志(默认情况下不开启)[mysqld] # 数据库id, 单节点MySQL原本没有必要开启, 但为了使用Maxwell则必须开启. Maxwell当做是一台MySQL slave server-id=1 # 启动Binlog, 该参数值会作为Binlog的文件名 log-bin=mysql-binlog # Binlog类型, Maxwell要求其为row类型 binlog_format=row # MySQL中需要启用Binlog的数据库, 即Maxwell需要监控的数据库. 根据实际情况进行更改 binlog-do-db=xxx
Binlog 日志的模式
- Statement-based 模式:基于 SQL 语句,会记录所有的写操作的 SQL 语句。
- 优点:节省空间
- 缺点:如果 SQL 语句中存在
now()
这种函数,可能造成数据的不一致
- Row-based 模式:基于行,Binlog 日志会记录每次写操作后被操作行的变化。Maxwell 要求使用 MySQL 使用 Row-based 模式
- 优点:保证数据的绝对一致性
- 缺点:如果一条 SQL 的影响行数非常多,那么占用空间会很大
- mixed 模式:混合模式,默认是 Statement-based 模式,如果 SQL 语句可能导致数据不一致,那么自动切换到 Row-based 模式
- Statement-based 模式:基于 SQL 语句,会记录所有的写操作的 SQL 语句。