1. 课程导论:批流一体概念、图谱API的价值、课程目标与前置知识
1.1 批流一体:从Lambda到Kappa的演进
传统大数据架构长期面临“批处理”与“流处理”两套系统并行的困境。批处理(如Hive、Spark Batch)擅长高吞吐、全量计算,但延迟高;流处理(如Storm、Flink Streaming)擅长低延迟、增量计算,但状态管理和精确一次语义复杂。这种“双轨制”即Lambda架构,其核心痛点在于:
- 维护两套代码:批与流逻辑需分别实现,业务迭代成本翻倍。
- 数据口径不一致:批与流计算结果常出现偏差,排查困难。
- 资源利用率低:两套集群独立部署,硬件与运维成本高。
批流一体(Batch-Streaming Unification)旨在用一套引擎、一套API、一套存储,同时覆盖离线批处理与实时流处理场景。Apache Flink 是当前最成熟的批流一体计算引擎,其核心思想是“流就是批,批就是有界流”。
关键认知: 批流一体不是简单的技术选型,而是数据架构从“双轨制”向“单引擎”的范式迁移。本课程所有API设计与发布均基于Flink的批流一体能力。
1.2 图谱API的价值:从数据到知识的桥梁
知识图谱(Knowledge Graph)以图结构组织实体与关系,但传统图谱构建流程(离线ETL → 图数据库导入 → 查询)存在明显短板:
| 维度 | 传统离线图谱 | 批流一体图谱API |
|---|---|---|
| 数据时效 | T+1 或小时级 | 秒级~分钟级 |
| 构建方式 | 全量重跑 | 增量流式 + 定期全量校准 |
| API形态 | RESTful 查询接口 | 实时写入 + 近实时查询 + 事件推送 |
| 适用场景 | 静态知识库、百科 | 实时风控、动态推荐、知识推理 |
本课程定义的图谱API,并非简单的图数据库CRUD接口,而是一套面向批流一体架构的图谱服务层,具备以下核心价值:
- 实时实体链接:流式数据到达后,毫秒级完成实体抽取与图谱关联。
- 增量关系更新:仅处理变更数据,避免全量重建带来的资源浪费。
- 统一查询语义:批处理与流处理共享同一套图查询逻辑,结果一致。
- 可观测性:API调用链、数据延迟、图谱质量指标均可实时监控。
1.3 课程目标:你将掌握什么
本课程共30章,从理论到实战,覆盖批流一体图谱API的完整生命周期。完成学习后,你将具备以下能力:
- 架构设计能力:独立设计基于Flink的批流一体图谱数据管道。
- API开发能力:使用Flink SQL + DataStream API 开发实时图谱写入与查询接口。
- 发布与运维能力:掌握API版本管理、灰度发布、监控告警与质量保障。
- 实战落地能力:完成一个完整的实时风控图谱API项目(含代码与部署)。
课程特色: 每章均配有可运行的代码示例与API测试用例,代码仓库随课程同步更新。建议在学习过程中动手实践,而非仅阅读文档。
1.4 前置知识:你需要具备的基础
为确保学习效果,建议你具备以下知识储备:
| 领域 | 具体要求 | 推荐学习资源 |
|---|---|---|
| Java / Scala | 熟悉基础语法、集合、多线程;能阅读Flink源码片段 | 《Java核心技术》或官方Tutorial |
| SQL | 掌握JOIN、窗口函数、聚合查询 | LeetCode SQL题库 或 W3School |
| Flink基础 | 了解DataStream、Table API、Checkpoint、状态后端 | Flink官方文档“概念”章节 |
| 图数据库 | 了解图模型(节点/边/属性)、Cypher或Gremlin基础 | Neo4j官方入门教程 |
| API设计 | 熟悉RESTful规范、JSON序列化、Swagger/OpenAPI | REST API设计规范(Microsoft或Google版) |
注意: 如果你对Flink完全陌生,建议先花2-3天完成Flink官方“快速入门”实验。本课程不会从零讲解Flink基础API,而是聚焦于图谱场景的工程化实践。
1.5 课程知识图谱:章节脉络一览
下图展示了本课程30章的知识结构,帮助你建立全局视角:
1.6 学习建议与工具准备
在正式开始第2章之前,请确保完成以下环境配置:
- JDK 11+:推荐使用 Amazon Corretto 11 或 OpenJDK 11。
- Apache Flink 1.17+:本地Standalone模式即可,无需YARN/K8s。
- Neo4j 5.x:社区版即可,用于图谱存储与查询验证。
- Postman 或 curl:用于API接口测试。
- Git:克隆课程代码仓库,便于同步更新。
推荐工作流: 阅读本章 → 查看对应代码 → 本地运行测试 → 修改参数观察效果 → 记录笔记与问题。遇到问题优先在课程讨论区搜索,或查看代码注释中的FAQ。