回放系统基础架构
回放系统的核心任务是将金融知识图谱在某一时刻的完整状态(节点、边、属性)精确还原,并支持按时间轴进行回溯、对比与分析。一个生产级的回放系统通常由四个核心组件构成:数据采集、存储、计算引擎与可视化层。各组件之间通过标准化的数据流接口协同工作,形成端到端的回放链路。
核心组件一览
| 组件 | 职责 | 关键技术选型 |
|---|---|---|
| 数据采集 | 从源系统(图数据库、消息队列、日志文件)捕获增量或全量变更事件 | CDC(Change Data Capture)、Kafka Connect、Flink CDC |
| 存储层 | 持久化历史快照与变更日志,支持时间点查询 | 时序数据库(InfluxDB)、对象存储(MinIO)、HDFS |
| 计算引擎 | 按时间戳重建图结构,执行图算法与聚合计算 | Apache Flink、Spark GraphX、自研图计算框架 |
| 可视化层 | 将回放结果以图、表、时间轴形式呈现给用户 | D3.js、G6、ECharts、自研WebGL渲染器 |
系统架构图
下图展示了回放系统的分层架构与组件间的数据流向。数据从左侧源系统进入,经过采集、存储、计算三个处理阶段,最终在可视化层呈现给用户。
数据流详解
回放系统的数据流遵循“采集 → 存储 → 计算 → 可视化”的线性管道模型,每个阶段都有明确的输入输出规范:
- 数据采集阶段:监听源系统的变更事件(如 Neo4j 事务日志、Kafka 主题),将每次变更封装为统一的事件格式,包含时间戳、操作类型(增/删/改)、节点/边 ID 及变更前后属性。
- 存储阶段:将采集到的事件按时间顺序写入存储层。时序数据库负责索引时间戳,对象存储负责保存全量快照文件,支持按任意时间点快速定位。
- 计算阶段:接收用户指定的回放时间点,从存储层读取该时间点之前的所有变更事件,在计算引擎中逐条回放,重建出该时刻的完整图拓扑。
- 可视化阶段:将重建后的图数据(节点列表、边列表、属性键值对)序列化为 JSON 格式,推送至前端渲染引擎,生成可交互的图谱视图。
关键设计原则:回放系统必须保证事件顺序一致性与幂等性。同一组变更事件无论回放多少次,在相同时间点应产生完全相同的图状态。建议在事件中携带全局递增序列号(如 Kafka 分区偏移量)以辅助排序去重。
组件间接口规范
| 接口 | 协议/格式 | 典型内容 |
|---|---|---|
| 采集 → 存储 | Avro / Protobuf 序列化,写入 Kafka Topic | {timestamp, op_type, entity_id, before, after} |
| 存储 → 计算 | REST API / gRPC 流式读取 | {start_time, end_time, event_list} |
| 计算 → 可视化 | WebSocket / HTTP JSON | {nodes: [...], edges: [...], metadata: {...}} |
实践建议:在金融知识图谱场景中,回放系统常与监管审计和风险回溯需求绑定。建议在存储层保留至少 90 天的变更日志,并支持按交易日、按小时、按事件类型三种粒度进行回放查询。