选型

Kafka

你可能会说

我们才三个后端,要不要为了「解耦」上 Kafka?

高吞吐、可重放的分布式事件流平台生产者把消息写进分区,消费者按消费组拉取;消息落盘保留一段时间,可以重复消费。适合日志、埋点、异步解耦这类「量大、能等、要能重放」的场景。
也常被叫作消息队列事件流
先问一句高吞吐、要重放?
默认Kafka→擅长日志/埋点→别用小团队简单异步
成熟度采用

什么时候选它

  • 日志、埋点、监控指标等高吞吐数据管道
  • 服务间异步解耦,且需要按分区保序
  • 需要重放历史消息,让新消费者补数据
  • 流处理的上游,配合 Flink / Spark 使用

什么时候别选

  • 只是两个服务之间发个通知:直接调用或轻量队列更简单
  • 团队没人维护集群和消费位点,托管服务也要会排错
  • 低延迟的同步调用场景,它不是 RPC 的替代品
容易混在一起 · 怎么分
Kafka≠RabbitMQ

Kafka 按日志保留、可重放、吞吐高;RabbitMQ 路由更灵活,单条确认和延迟队列更成熟。

Kafka≠数据库

它是流经的日志,不是按主键查询的存储。

消息队列≠事件流

队列消费完就没了;事件流会保留,可以被多个消费者重复读。

Q面试会问什么

  • 问:Kafka 为什么吞吐高?
    答:顺序写磁盘、页缓存、零拷贝、批量发送与压缩;分区让读写并行。
  • 问:怎么保证不丢消息?
    答:生产者 acks=all 加重试和幂等,副本 ISR 足够,消费者手动提交位点。
  • 问:分区和消费组什么关系?
    答:一个分区同一时刻只被组内一个消费者消费;消费者数超过分区数时,多出来的人会空闲。
延伸阅读 · 权威出处