标准答案

  1. Kafka 类系统通过分区和位点让多个消费者独立读取、暂停和回放,适合事件流、日志和大吞吐场景。
  2. RabbitMQ 类系统通过 Exchange 和 Queue 做路由与竞争消费,适合任务分发、复杂路由和较低延迟的工作队列。
  3. 两者都不能自动保证业务幂等、全局顺序或外部副作用的一致性。
  4. 应比较消息保留、回放需求、路由复杂度、顺序边界、吞吐、延迟和团队运维能力。

题目解析

日志流更适合按分区保留、独立消费和按位点回放,队列更适合灵活路由和竞争消费。选择前要明确是事件流、数据集成还是一项任务只需要一个消费者完成。

两类系统都只提供一定的投递和存储语义,不会自动替业务保证唯一性、全局顺序或外部副作用。消费者重启、重复投递、回放和下游失败都需要业务侧处理。

评估时要比较保留和回放、路由复杂度、分区/队列模型、延迟、吞吐、故障恢复和团队运维能力,不能只看厂商基准。

常见误区

  • 误区:把 Kafka 当作无限可靠数据库。改正:按保留、复制、容量和备份策略使用,业务事实仍应有权威存储。
  • 误区:认为 RabbitMQ 天然保证业务不重复。改正:确认和重投递仍可能导致重复,消费端需要幂等。
  • 误区:只看基准吞吐。改正:同时验证回放、重平衡、毒性消息、下游故障和恢复时间。

作者信息