埋点事件处理器
2025年10月13日大约 3 分钟
埋点事件处理器
我们AIAB系统中目前有三种事件,一种是用户请求事件,用来收集如请求响应时间、消耗token数等指标;另一种是用户评价事件,用来收集用户在使用过程中的用户反馈;同时,我们也支持埋点事件,用于收集一些埋点数据。下面介绍埋点事件处理器。
工具概述
埋点事件处理器核心定位为 Kafka 消费者,用于从 Kafka 消息中心订阅埋点消息,经过解析、过滤、格式转换后,将消息发送至 AB 实验消息接收服务器,支撑 AB 实验的数据采集与分析。工具以 JAR 包形式存在(如kafka-event-processor-1.0.0.jar),可在 PaaS 环境或服务器中运行。
工具启动与配置
启动方式
通过命令行启动 JAR 包,需指定配置文件路径,命令格式如下:
java -jar kafka-event-processor-1.0.0.jar --spring.config.location=application-maidian.yml
核心配置
配置文件需重点设置 Kafka 服务、属性服务、事件接收地址等信息,关键配置项如下:
配置模块 | 配置项 | 说明 | 示例 |
---|---|---|---|
Kafka 多数据源 | bootstrap-servers | Kafka 服务访问地址 | 127.0.0.1:9092 |
group-id | 消费组 ID | test92 | |
topics | 订阅的 Kafka 主题 | test,topic1 | |
服务地址 | config-url | 属性服务配置文件地址 | https://cdn.eyeofcloud.com/datafiles/%s.json |
event-endpoint | AB 实验事件接收器地址 订阅的 Kafka 主题 | https://event.eyeofcloud.com/v1/events | |
项目与属性 | projectkeyLis | AB 系统项目 SDKKey | 1_ad1ba589aa210d26 |
eventProperties | eventProperties | areaname,word3 |
编码实现要点
程序包引入
需在项目依赖中添加工具所需第三方包,关键依赖如下:
<dependencies>
<!-- AB实验核心依赖 -->
<dependency>
<groupId>com.eyeofcloud.ab</groupId>
<artifactId>core-api</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.eyeofcloud.ab</groupId>
<artifactId>core-httpclient-impl</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!-- Kafka与JSON处理依赖 -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
关键API调用示例
package com.eyeofcloud;
import java.util.ArrayList;
import java.util.List;
public class Example {
public static void main(String[] args) throws InterruptedException {
// 1. 初始化处理器与解析器
MaidianProcessor mp = new MaidianProcessor();
GongHangMaidianParser parser = new GongHangMaidianParser();
mp.setMaidianParser(parser);
// 2. 配置服务地址与项目Key
mp.setConfigUrlFormat("https://cdn.eyeofcloud.com/datafiles/%s.json");
mp.setEventEndPoint("http://localhost/v1/events");
List<String> projectKeyList = new ArrayList<>();
projectKeyList.add("1_a5487b8eaf69c9e1");
mp.setProjectKeyList(projectKeyList);
// 3. 处理埋点消息(需满足10条或30秒触发发送)
String maidianEventExample = "xxxxxxx"; // 实际埋点消息
mp.process(maidianEventExample);
// 4. 等待发送完成(默认30秒间隔)
Thread.sleep(30 * 1000);
}
}
埋点事件解析器设置
需自定义解析器实现MaidianParser接口,核心逻辑为解析埋点消息并生成ParsedResult(含用户 ID、事件键、事件属性),示例如下:
public class GongHangMaidianParser implements MaidianParser {
@Override
public ParsedResult parse(String maidian) {
Map map = new HashMap<>();
Gson gson = new Gson();
try {
map = gson.fromJson(maidian, Map.class);
} catch (Exception e) {
log.error("解析埋点消息失败:" + e.getMessage());
return null;
}
ParsedResult result = new ParsedResult();
if (map.get("maincis") == null || map.get("event_type") == null) {
return null;
}
// 设置用户ID(示例用maincis字段)
result.setUserId(map.get("maincis").toString());
// 生成事件Id
String eventId = parametersJoin(map.get("event_type"), map);
result.setEventKey(eventId);
// 设置事件属性
Map<String, Object> eventTag = new HashMap<>();
eventTag = generateEventTage(map);
result.setEventTag(eventTag);
return result;
}
// 事件键拼接逻辑(需按业务需求修改)
private String parametersJoin(Object eventType, Map map) {
if ("启动".equals(eventType)) return "start_app";
if ("浏览".equals(eventType)) return "browse_" + map.get("srcpageno") + "_to_" + map.get("curpageno") + "_in_" + map.get("curmenuid");
if ("点击".equals(eventType)) return "click_" + map.get("buttonno") + "_in_" + map.get("buttonseq") + "_in_" + map.get("curpageno");
return eventType.toString();
}
}