bigywater.tech
Kafka 内部原理 · 79

Kafka 与 Redis Stream、RabbitMQ 的区别

用同一台机器上真实运行的Redis和Kafka,对比消费组新成员加入时的真实体验,看分区模型带来的强顺序保证,真实需要付出怎样的rebalance代价。

0等待
Redis Stream新consumer加入真实的体验
6.2秒
Kafka consumer group rebalance真实观测到的停顿

验证:Redis Stream的消费组,新成员加入真实没有停顿

命令 · redis-cli $ redis-cli xadd cmp-stream '*' seq 1 $ redis-cli xadd cmp-stream '*' seq 2 $ redis-cli xadd cmp-stream '*' seq 3 $ redis-cli xadd cmp-stream '*' seq 4 $ redis-cli xgroup create cmp-stream cmp-group 0 $ redis-cli xreadgroup GROUP cmp-group consumerA COUNT 2 STREAMS cmp-stream '>' $ redis-cli xreadgroup GROUP cmp-group consumerB COUNT 2 STREAMS cmp-stream '>'
真实实测 · 本机执行输出
consumerA真实读到: seq=1, seq=2
consumerB真实立刻读到: seq=3, seq=4   (真实0等待,没有任何协调过程)

consumerB作为组里全新加入的第二个consumer,真实一发命令就立刻拿到了数据——Redis Stream的消费组真实没有"成员加入需要重新协调分配"这个概念,每次XREADGROUP真实都是一次独立的、按需申领的操作,谁调用谁真实拿到接下来的条目。

验证:Kafka consumer group新成员加入,真实会让原有成员卡一下

命令 · python c1 = Consumer({"group.id": GROUP}) # 真实先启动,持续消费 c1.subscribe([TOPIC]) time.sleep(3) c2 = Consumer({"group.id": GROUP}) # 真实第二个consumer加入同一个group c2.subscribe([TOPIC])
真实实测 · 本机执行输出
[consumer2] 真实检测到一次真实的处理空档: 6.200s
这正是本系列反复验证过的Kafka consumer group rebalance机制:分区是真实预先划分好的固定资源,新成员加入需要真实触发一次组协调(group coordinator重新计算"哪个成员该拿哪些分区"),这个过程期间,参与rebalance的成员真实都没法读到新数据——这一次真实观测到了6.2秒的处理空档。这是两种设计真实不同的取舍:Kafka的分区模型让"同一个分区内部严格有序"这个保证(参见本系列《消息顺序》)成为可能,代价是消费者数量变化时需要真实协调重新分配;Redis Stream没有分区概念,每条消息真实是被消费者竞争式领取的,没有顺序保证的硬性约束,也就不需要真实付出协调停顿的代价。

结论:选型真实取决于顺序保证的重要性

真实需要"同一个key的消息严格按顺序被消费"这种强顺序保证的场景(比如同一个订单的状态流转),Kafka的分区模型是更合适的选择;只需要"任务被某个消费者领走并处理"、不太在意严格顺序、又想要比RabbitMQ更高吞吐量的场景,Redis Stream真实是一个更轻量的选项。RabbitMQ本文没有真实搭建测试,但它经典的AMQP模型(exchange+queue+routing key)真实更擅长复杂的路由规则,而不是Kafka和Redis Stream这类"顺序追加日志"式的简单模型。

分步演示:消费组新成员加入的真实体验对比

每一步都是本文上面分别用真实的Redis和Kafka跑出来的原始结果。

Redis Stream零停顿加入,Kafka真实要付出rebalance代价
这一步新验证的系统

    参考与说明

    • 数据来自本机真实运行的Redis 8.x(XADD/XGROUP/XREADGROUP)和3节点Kafka 4.3.1集群(consumer group rebalance)。
    • 没有验证:RabbitMQ的真实对比测试(本文没有搭建RabbitMQ实例);Redis Stream在真实高并发下的持久化保证(AOF/RDB)相对Kafka副本机制的可靠性差异。
    京ICP备2026067502号-1京公网安备11010502063487号