请从架构、消息语义、性能和运维成本等角度,对比 RocketMQ 与 Kafka 的差异,并分别指出各自的优点和不足。
考察说明
考查对主流消息队列核心特性差异的理解及选型能力。
回答思路
- 【回答框架 1】架构差异:Kafka基于分区和副本,依赖ZooKeeper(或新版KRaft),追求顺序写和高吞吐;RocketMQ基于CommitLog和ConsumeQueue,支持丰富队列模型,命名服务NameServer更轻量。
- 【回答框架 2】消息语义:Kafka提供至少一次,可通过幂等生产者实现精确一次;RocketMQ默认至少一次,支持事务消息实现分布式事务最终一致,且消费进度更精确。
- 【回答框架 3】过滤与顺序:RocketMQ支持Tag和SQL过滤,顺序消息(全局或分区)能力更强;Kafka主要靠分区内有序,广播消费通过独立消费组实现。
- 【回答框架 4】功能与运维:RocketMQ提供延迟消息、死信队列等开箱即用功能,但客户端生态和社区规模不及Kafka;Kafka生态庞大(流处理、连接器等),运维需关注分区数、副本和磁盘规划。
- 【关键点 1】Kafka高吞吐、低延迟,适合日志采集和流处理;RocketMQ功能丰富,适合金融等对可靠性要求高的场景。
- 【关键点 2】RocketMQ事务消息通过半消息和回查保证最终一致,Kafka依赖幂等生产者。
- 【关键点 3】Kafka顺序性依赖分区,RocketMQ支持全局顺序和分区顺序。
- 【关键点 4】选型需要考虑吞吐量、消息语义、运维成本和生态成熟度。
- 【易错点 1】不要认为Kafka绝对比RocketMQ快,RocketMQ在亿级消息下性能也足够。
- 【易错点 2】Kafka精确一次涉及事务协调,可能增加延迟和复杂度。
- 【易错点 3】忽略集群规划和监控,两者都可能出现分区不均或消费积压。