一、核心设计理念
1.1 追踪目标
text
复制
下载
四大追踪维度: 1. 生产轨迹:消息从哪个应用、哪个机器、什么时间发送 2. 存储轨迹:消息在Broker的存储状态、投递时间 3. 消费轨迹:消息被哪个消费者、何时消费、消费结果 4. 事务轨迹:事务消息的状态变化(提交/回滚)
1.2 架构设计
java
复制
下载
/** * 消息轨迹架构分层 */ public class MessageTraceArchitecture { // 三层架构设计 class Architecture { /** * 第一层:数据采集层(Producer/Consumer/Broker) * - 埋点采集:在关键路径植入追踪代码 * - 异步发送:不阻塞主业务流程 * - 本地缓冲:批量发送提高性能 */ /** * 第二层:数据传输层(TraceDispatcher) * - 内存队列:解耦采集和发送 * - 失败重试:保证数据可靠性 * - 流量控制:防止数据洪峰 */ /** * 第三层:数据存储层(RocketMQ自身或外部存储) * - 专用Topic:_TRACE_TOPIC * - 外部存储:MySQL、Elasticsearch、HBase * - 索引构建:支持快速查询 */ } }二、核心实现源码解析
2.1 追踪数据模型
java
复制
下载
/** * 追踪数据结构定义 */ public class TraceBean { // 基础追踪信息 class TraceContext { private String traceId; // 全局唯一追踪ID private String spanId; // 当前跨度ID private String parentSpanId; // 父跨度ID private long timestamp; // 时间戳 private String region; // 区域 private String cell; // 单元 } // 生产者追踪数据 class ProducerTraceData { private String producerGroup; // 生产者组 private String topic; // 主题 private String msgId; // 消息ID private String originMsgId; // 原始消息ID private String tags; // 标签 private String keys; // 业务Key private String storeHost; // 存储Broker地址 private String clientHost; // 客户端地址 private long storeTime; // 存储时间 private int retryTimes; // 重试次数 private int bodyLength; // 消息体长度 private Map<String, String> properties; // 扩展属性 } // 消费者追踪数据 class ConsumerTraceData { private String consumerGroup; // 消费者组 private String topic; // 主题 private String msgId; // 消息ID private String originMsgId; // 原始消息ID private String storeHost; // Broker地址 private String clientHost; // 客户端地址 private long storeTime; // 存储时间 private long pickupTime; // 拉取时间 private long consumeStartTime; // 消费开始时间 privat