架构风格与模式58 条

Kappa 架构

只用一条流处理链路处理全部数据,历史重算通过重放日志实现;依赖可持久化、可重放的日志系统,减少两套逻辑的维护成本。

Kappa 架构是什么

Kappa 架构只保留一条流处理链路处理全部数据:正常时消费并处理增量,需要重算时通过重放日志把历史数据重新走一遍同一套逻辑,产出新版本结果后切换。它用一套代码路径替代批处理与流处理的双实现,换取逻辑一致性与运维简化,前提是日志系统能长期保存、可重放、可按序消费。

落地要算的三笔账

第一笔是保留期:重放窗口要覆盖业务的修正需求,保留期不足时历史无法重建,只能退回离线补数;第二笔是成本:日志存储与重放算力都要计入容量规划,全量重放往往比日常消费高出数倍资源;第三笔是隔离:重算任务要用独立消费组与资源池,避免和在线消费争抢资源,把一次重算变成线上事故。

基本信息

核心前提日志可长期保存、可重放、可按序消费
重算方式从日志起点重放并写入新版本结果,切换后生效
主要收益单一代码路径,逻辑一致性与运维简化
主要成本日志存储成本与重放算力,保留期越长成本越高
运维要求重放任务与在线消费资源隔离,定期演练全量重放

落地检查

检查项要点
保留期覆盖业务重算需求并留出余量
重放隔离使用独立消费组与独立资源池
结果切换新版本结果原子切换,支持快速回滚
演练频率定期执行全量重放,验证链路可用
成本核算日志存储与重放算力计入容量规划

典型使用场景

  • 指标口径频繁调整,需要反复重算历史数据的分析链路
  • 团队人力有限,不希望长期维护批处理与流处理两套实现
  • 事件日志已成为事实来源,历史可通过重放完整重建
  • 流处理框架具备状态管理与可重放消费的能力
重放成本与日志保留策略是落地关键:保留期不足时历史重算能力受限于可回溯的数据范围,需要提前与业务确认修正窗口。
重放任务与在线消费共用资源会把线上延迟一起拖高,重算必须使用独立消费组与资源池,并预先做容量测算。

易错点

  • 日志保留期短于业务重算需求,历史无法重建,只能退回离线补数
  • 重放任务与在线消费争抢资源,重算期间线上延迟明显恶化
  • 重放结果直接覆盖在线结果,切换过程中出现新旧数据混读
  • 全量重放从未演练,真正需要时才发现链路不可用
  • 把单一流链路当作无成本方案,忽略日志存储与重放算力的持续投入

数据来源与参考

  • Jay Kreps《Questioning the Lambda Architecture》(2014, O'Reilly Radar)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌