核心问题

如何用 ADR 记录一次 Kafka 技术选择?

真实场景

课程平台要处理大量学习行为:点击、播放、暂停、完成、搜索、收藏。产品想做实时推荐和学习分析。

团队讨论消息系统。选项包括 Redis List、RabbitMQ、Kafka。

常见误区

坏文档只写:

行为日志使用 Kafka。

这对未来没有帮助。

工程视角

更好的 ADR 会这样写:

背景:
学习行为量增长,需要异步处理并支持后续分析。

约束:
需要多消费者,推荐、报表、风控可能同时消费。
需要一定重放能力,便于修复下游计算错误。

选项:
Redis List:简单,但重放和多消费者能力不足。
RabbitMQ:适合任务分发,但长期日志流分析不是强项。
Kafka:运维复杂,但吞吐、多消费者、重放能力匹配。

决策:
选择 Kafka。

代价:
接受运维复杂度,必须补监控、告警和容量规划。

PM 可以怎么做

PM 要特别补充业务侧信息:

  • 哪些业务会消费行为数据?
  • 数据延迟可以接受多久?
  • 丢失一部分数据的后果是什么?
  • 未来是否需要回放历史事件?

Atlas Action

对任何“上 Kafka”的提议,先问:

我们需要的是异步、缓冲、重放、多消费者,还是只是想解耦?

如果只是简单异步,Kafka 可能过重。

小结

Kafka 不是先进的代名词,它是一组能力和代价。

ADR 的价值,就是把“为什么值得承担这些代价”写清楚。