1. 课程导论与图谱基础
1.1 什么是知识图谱
知识图谱(Knowledge Graph)是一种用图结构来建模实体及其之间关系的技术体系。它将现实世界中的事物抽象为节点(Node),将事物之间的关联抽象为边(Edge),并通过属性(Property)来丰富节点的描述信息。这种“实体-关系-实体”的三元组结构,使得机器能够像人类一样理解事物之间的语义联系。
核心公式:知识图谱 = (实体 + 关系 + 属性) × 语义网络。与传统关系型数据库不同,图结构天然适合处理多跳关联和深度推理。
| 对比维度 | 关系型数据库 | 知识图谱 |
|---|---|---|
| 数据模型 | 表 + 行 + 外键 | 节点 + 边 + 属性 |
| 关联查询 | 多表 JOIN,深度 > 3 性能骤降 | 图遍历,深度 10+ 仍保持毫秒级 |
| 模式灵活性 | Schema 固定,改表代价高 | Schema-Less 或动态 Schema |
| 典型场景 | 事务处理、报表统计 | 关联分析、反欺诈、推荐 |
一个典型的电商知识图谱包含:用户、商品、订单、店铺等实体,以及“购买”、“收藏”、“属于”、“评价”等关系。通过图谱,我们可以快速回答“用户 A 购买过的商品中,哪些与用户 B 收藏的商品属于同一店铺?”这类复杂关联问题。
1.2 实时图谱的应用场景
传统知识图谱多为离线构建,数据 T+1 更新。但在风控、推荐、社交等场景中,时效性是核心诉求——毫秒级的延迟可能意味着欺诈交易已经完成,或者推荐内容已经过时。实时图谱正是在这种背景下应运而生。
场景一:实时风控
- 团伙欺诈检测:新注册用户与已知黑名单设备共享同一 IP,且该 IP 在 5 分钟内关联了 3 个以上新账户——实时图谱在毫秒级完成多跳关联,触发拦截。
- 交易链路分析:一笔转账从 A → B → C → D,实时检测中间节点是否涉及高风险账户。
- 异常模式识别:同一收货地址在 1 小时内关联超过 10 个不同支付账号,实时图谱标记为“聚合地址异常”。
场景二:实时推荐
- 协同过滤增强:用户点击商品 A 后,实时图谱在 200ms 内找出“与 A 属于同一类目且被相似用户高频购买”的商品 B。
- 社交关系推荐:用户关注了 KOL X,实时图谱立即扩展 X 的互动商品列表,生成个性化推荐流。
- 场景化推荐:结合实时天气、地理位置等属性节点,动态调整推荐策略。
场景三:社交网络分析
- 实时影响力传播:一条热点内容发布后,实时追踪其在社交图谱中的传播路径和速度。
- 社区发现:新用户加入群组后,实时更新其所在的社区结构,识别潜在的意见领袖。
- 关系强度演化:根据互动频率、时间窗口等实时属性,动态调整用户之间的边权重。
关键指标对比:离线图谱通常支持 T+1 更新,端到端延迟 > 1 小时;实时图谱要求从事件发生到图谱更新完成,端到端延迟 ≤ 5 秒,部分场景要求 ≤ 1 秒。
1.3 课程整体技术栈概览
本课程采用 Kafka + Flink + Neo4j 作为核心技术栈,构建端到端的实时图谱流水线。三者的分工清晰明确:
- Kafka:作为事件总线,负责高吞吐、低延迟地采集和分发业务事件(如用户点击、交易记录、社交互动)。
- Flink:作为实时计算引擎,负责对事件流进行清洗、关联、聚合,并提取图谱所需的实体和关系。
- Neo4j:作为图数据库,负责存储最终的图谱数据,并提供毫秒级的图查询和遍历能力。
1.4 各组件职责与选型理由
| 组件 | 核心职责 | 选型理由 | 替代方案 |
|---|---|---|---|
| Kafka | 事件采集、缓冲、分发 | 高吞吐(百万级/s)、持久化、分区并行、生态成熟 | Pulsar、RabbitMQ |
| Flink | 实时 ETL、状态管理、图谱关系提取 | Exactly-Once 语义、事件时间处理、CEP 支持、与 Kafka 原生集成 | Spark Streaming、Storm |
| Neo4j | 图存储、图查询、图遍历 | 原生图存储、Cypher 查询语言、ACID 事务、社区活跃 | JanusGraph、ArangoDB |
选型注意:本课程选择 Neo4j 而非 JanusGraph,主要考虑到 Neo4j 的原生图存储引擎在单机场景下性能更优,且 Cypher 语言学习曲线更低,适合作为实时图谱的入门和实战首选。如果未来需要水平扩展至百亿节点以上,可考虑迁移至 JanusGraph + HBase/Cassandra 架构。
1.5 实时图谱构建的核心流程
从原始事件到可查询的图谱,需要经过以下关键步骤:
- 事件采集:业务系统将用户行为(点击、购买、关注等)发送至 Kafka Topic。
- 流式处理:Flink 从 Kafka 消费事件流,进行数据清洗、字段补全、实体识别。
- 图谱提取:Flink 根据预定义的图谱模型,将事件转换为“实体节点 + 关系边”的图结构数据。
- 图写入:Flink 通过 Neo4j Bolt 协议,将图数据批量写入 Neo4j 数据库。
- 图查询:业务应用通过 Cypher 语句查询 Neo4j,获取实时关联分析结果。
1.6 课程学习路径
本课程共 30 章,分为四个阶段:
| 阶段 | 章节范围 | 核心内容 | 实战产出 |
|---|---|---|---|
| 基础篇 | 第 1-8 章 | Kafka 核心、Flink 基础、Neo4j 入门、图谱建模 | 单机实时图谱 Demo |
| 进阶篇 | 第 9-18 章 | Flink 状态管理、CEP 模式匹配、Neo4j 性能调优 | 风控实时图谱系统 |
| 实战篇 | 第 19-26 章 | 多数据源集成、Exactly-Once 语义、图算法集成 | 推荐实时图谱系统 |
| 运维篇 | 第 27-30 章 | 集群部署、监控告警、数据回溯、生产最佳实践 | 生产级实时图谱平台 |
学习建议:建议读者具备 Java/Scala 基础编程能力,了解基本的数据结构和 SQL 语法。每章均提供可运行的代码示例和配套数据集,建议边学边练,在本地搭建实验环境。