Kafka
你可能会说
我们才三个后端,要不要为了「解耦」上 Kafka?
高吞吐、可重放的分布式事件流平台生产者把消息写进分区,消费者按消费组拉取;消息落盘保留一段时间,可以重复消费。适合日志、埋点、异步解耦这类「量大、能等、要能重放」的场景。
也常被叫作消息队列事件流
什么时候选它
- 日志、埋点、监控指标等高吞吐数据管道
- 服务间异步解耦,且需要按分区保序
- 需要重放历史消息,让新消费者补数据
- 流处理的上游,配合 Flink / Spark 使用
什么时候别选
- 只是两个服务之间发个通知:直接调用或轻量队列更简单
- 团队没人维护集群和消费位点,托管服务也要会排错
- 低延迟的同步调用场景,它不是 RPC 的替代品
容易混在一起 · 怎么分
Kafka≠RabbitMQ
Kafka 按日志保留、可重放、吞吐高;RabbitMQ 路由更灵活,单条确认和延迟队列更成熟。
Kafka≠数据库
它是流经的日志,不是按主键查询的存储。
消息队列≠事件流
队列消费完就没了;事件流会保留,可以被多个消费者重复读。
Q面试会问什么
- 问:Kafka 为什么吞吐高?
答:顺序写磁盘、页缓存、零拷贝、批量发送与压缩;分区让读写并行。 - 问:怎么保证不丢消息?
答:生产者 acks=all 加重试和幂等,副本 ISR 足够,消费者手动提交位点。 - 问:分区和消费组什么关系?
答:一个分区同一时刻只被组内一个消费者消费;消费者数超过分区数时,多出来的人会空闲。
延伸阅读 · 权威出处