回放系统基础架构

回放系统的核心任务是将金融知识图谱在某一时刻的完整状态(节点、边、属性)精确还原,并支持按时间轴进行回溯、对比与分析。一个生产级的回放系统通常由四个核心组件构成:数据采集、存储、计算引擎与可视化层。各组件之间通过标准化的数据流接口协同工作,形成端到端的回放链路。

核心组件一览

组件 职责 关键技术选型
数据采集 从源系统(图数据库、消息队列、日志文件)捕获增量或全量变更事件 CDC(Change Data Capture)、Kafka Connect、Flink CDC
存储层 持久化历史快照与变更日志,支持时间点查询 时序数据库(InfluxDB)、对象存储(MinIO)、HDFS
计算引擎 按时间戳重建图结构,执行图算法与聚合计算 Apache Flink、Spark GraphX、自研图计算框架
可视化层 将回放结果以图、表、时间轴形式呈现给用户 D3.js、G6、ECharts、自研WebGL渲染器

系统架构图

下图展示了回放系统的分层架构与组件间的数据流向。数据从左侧源系统进入,经过采集、存储、计算三个处理阶段,最终在可视化层呈现给用户。

回放系统核心架构与数据流 回放系统核心架构与数据流 数据采集 CDC / Kafka Connect 存储层 时序DB / 对象存储 计算引擎 Flink / GraphX 可视化层 D3.js / G6 / ECharts 源系统 图数据库 / 消息队列 / 日志 变更日志 增量 / 全量快照 图重建 时间点拓扑还原 回放结果 图结构 / 指标 / 时间轴 数据流说明 ① 采集层从源系统拉取变更 ② 变更日志持久化到存储层 ③ 计算引擎按时间戳重建图 ④ 可视化层渲染回放结果

数据流详解

回放系统的数据流遵循“采集 → 存储 → 计算 → 可视化”的线性管道模型,每个阶段都有明确的输入输出规范:

  1. 数据采集阶段:监听源系统的变更事件(如 Neo4j 事务日志、Kafka 主题),将每次变更封装为统一的事件格式,包含时间戳、操作类型(增/删/改)、节点/边 ID 及变更前后属性。
  2. 存储阶段:将采集到的事件按时间顺序写入存储层。时序数据库负责索引时间戳,对象存储负责保存全量快照文件,支持按任意时间点快速定位。
  3. 计算阶段:接收用户指定的回放时间点,从存储层读取该时间点之前的所有变更事件,在计算引擎中逐条回放,重建出该时刻的完整图拓扑。
  4. 可视化阶段:将重建后的图数据(节点列表、边列表、属性键值对)序列化为 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 天的变更日志,并支持按交易日、按小时、按事件类型三种粒度进行回放查询。