一、金融流计算概述

1.1 什么是流计算

流计算,说白了就是「数据边来边算」。

传统批处理是先把数据存起来,等攒够了再统一算。流计算不一样——数据一条条进来,我一条条处理,几乎零延迟。

举个例子:你在淘宝下单,风控系统必须在 100 毫秒内判断这笔交易有没有风险。如果等数据存到 HDFS 再跑 MapReduce,黄花菜都凉了。

我个人习惯把流计算理解为「数据的水龙头」——打开就有水,关掉就停。你不需要先接满一桶水再喝,而是边接边喝。

核心特征:

  • 低延迟:毫秒级响应,不是分钟级
  • 持续计算:数据源源不断,计算永不停止
  • 有状态:需要记住之前的数据,比如统计过去 5 分钟的成交额
  • Exactly-Once:每条数据只算一次,不多不少

1.2 金融场景下的流计算需求

金融行业对流计算的需求,可以说是「又爱又恨」。爱的是它能解决实时问题,恨的是它太难搞了。

我参与过几个金融项目,踩过不少坑。下面说说三个典型场景:

实时风控

这是最刚需的场景。每一笔交易、每一次登录、每一笔转账,都需要在几十毫秒内完成风险评分。

  • 规则引擎:比如「单笔超过 100 万」触发人工审核
  • 机器学习模型:实时预测欺诈概率
  • 关联分析:检测团伙作案,比如多个账号共用同一 IP

避坑指南:我曾经在风控项目里遇到过一个坑——状态后端用 RocksDB,结果因为磁盘 IO 瓶颈导致延迟飙升。后来改成内存状态后端 + 定期快照,才把延迟压到 50ms 以内。

量化交易

量化交易对延迟的要求近乎变态。我见过一些团队,为了省 1 毫秒,把整个链路从 Java 换成了 C++。

  • 行情数据解析:从交易所拿到原始数据,解析成结构化数据
  • 策略计算:根据实时行情计算买卖信号
  • 订单执行:生成订单并发送到交易所

你想想看,如果行情延迟 10 毫秒,你的策略可能已经亏了几十万。所以量化交易场景下,流计算框架的选择非常关键。

行情推送

行情推送是金融流计算里最「暴力」的场景。A 股一天的行情数据量大概在 10TB 左右,峰值每秒几十万笔。

  • 数据分发:把行情数据推送给成千上万个客户端
  • 数据聚合:计算实时指数、涨跌幅排名
  • 历史回放:支持用户回看历史行情

注意:行情推送场景下,背压(Backpressure)是个大问题。如果下游消费速度跟不上上游生产速度,内存会爆。我曾经见过一个项目,因为没处理好背压,直接 OOM 挂了。

1.3 主流流计算框架对比

市面上主流的流计算框架有三个:Flink、Spark Streaming、Kafka Streams。我三个都用过,说说我的感受。

特性 Flink Spark Streaming Kafka Streams
计算模型 真正的流计算 微批处理 流计算
延迟 毫秒级 秒级(100ms-10s) 毫秒级
状态管理 强大(RocksDB/内存) 较弱(依赖外部存储) 中等(本地状态存储)
Exactly-Once 支持 支持 支持
部署方式 独立集群/YARN/K8s Spark 集群 嵌入应用
学习曲线 中等 较低
金融场景适用性 ★★★★★ ★★★☆☆ ★★★★☆

Flink

Flink 是目前金融行业的主流选择。为什么?因为它真正做到了「一条一条处理」,而不是「攒一批再处理」。

我记得有一次做实时风控,要求延迟不超过 50ms。Spark Streaming 的微批模式最低也要 100ms,根本达不到。换成 Flink 后,延迟直接降到 20ms。

Flink 的优势:

  • 真正的流计算,不是微批
  • 强大的状态管理,支持超大状态
  • 精确一次语义,不会丢数据也不会重复算
  • 丰富的窗口函数,支持事件时间

Spark Streaming

Spark Streaming 本质上是「微批处理」——把流数据切成一个个小批次,然后对每个批次做批处理。

说实话,如果你的延迟要求是秒级,Spark Streaming 完全够用。而且它的生态很成熟,跟 Spark SQL、MLlib 无缝集成。

但如果你需要毫秒级延迟,嗯,还是选 Flink 吧。

注意:Spark Streaming 的微批模式有个问题——批次大小决定了延迟下限。你设 100ms,那延迟至少 100ms。而且批次越小,调度开销越大。

Kafka Streams

Kafka Streams 是个轻量级框架,直接嵌入到你的 Java 应用里。不需要单独部署集群,用起来很爽。

我建议在以下场景使用 Kafka Streams:

  • 数据量不大(每秒几千条)
  • 逻辑简单(不需要复杂的状态管理)
  • 不想引入额外的运维成本

但如果你要做大规模实时风控,Kafka Streams 的状态管理能力还是弱了点。

知识体系总览

下面这张图,是我梳理的本章知识体系。你可以把它当作一个「地图」,后面每章都会围绕这些点展开。

金融流计算知识体系 流计算 什么是流计算 金融场景需求 主流框架对比 低延迟 持续计算 有状态 Exactly-Once 实时风控 量化交易 行情推送 Flink Spark Streaming Kafka Streams 本章核心:理解流计算本质 + 金融场景特点 + 框架选型 第1章 · 金融流计算概述

我的建议:如果你是刚接触流计算,先别急着选框架。先把「什么是流计算」搞清楚,理解它的核心概念——数据流、算子、状态、时间语义。框架只是工具,思想才是根本。

好了,第一章就到这里。后面我们会深入 Flink 的架构、状态管理、调优技巧,还会讲怎么搭建全链路监控体系。嗯,内容不少,慢慢来。


公众号:蓝海资料掘金营,微信deep3321