RabbitMQ/RocketMQ/Kafka 单机架构的对比

RabbitMQ

1.在RabbitMQ中,生产者通过与Broker连接并且建立信道(Channel),将消息发送至交换器(Exchange)。然后根据Exchange 的类型,将消息路由到指定队列。

2.消费者通过与Broker连接并且建立信道(Channel),消费队列消息。

3.关键字

   channel: 信道,一个连接内的逻辑区分。

   routeKey: 路由key 与 bindKey 相对应

   Exchange: 可以视为一个名称与队列绑定的列表

   Queue: 队列

4.在RabbitMQ中,一个队列就包含了所有的消息。

RocketMQ

1.在RocketMQ中,创建Topic是需要指定名称和队列的数量(默认4个队列)。当生成者发布消息到broker时,客户端会根据指定策略,将消息发送的指定队列。Broker收到消息之后,会将消息写入commitLog & consumeQueue,并根据刷盘策略落地。

2.消费者会根据指定策略,被分配的不同的队列中进行消费(一个队列只能被同一个消费组中的一个消费者消费),并在消费完成后提交消费位移。

3.这里关键字是

    Topic:主题

    Queue:队列

    消费位移

4.在RocketMQ中,所有队列的并集就是消息总和。

Kafka

1.在Kafka中,创建Topic是需要指定名称和分区的数量。当生成者发布消息到broker时,客户端会根据指定策略,将消息发送的指定分区。Broker收到消息之后,会将消息写入.log & .index & .timeIndex ,并根据刷盘策略落地。

2.消费者会根据指定策略,被分配的不同的分区中进行消费(一个分区只能被同一个消费组中的一个消费者消费),并在消费完成后提交消费位移。

3.这里关键字是

   Topic:主题

   Partition:分区

   消费位移

4.在Kafka中,所有分区的并集就是消息总和。

总结

1.RabbitMQ 、RocketMQ 和 Kafka 在存储消息的模式存在区别。RabbitMQ是典型的内存式堆积(不是绝对的,当内存不足时,会出现换页现象),而 RocketMQ 与 Kafka 是磁盘式堆积。一般情况下磁盘的空间都远大于内存,所有相对而言,RocketMQ 和 Kafka 的消息堆积能力更强。

2.概念的区分。    

   RabbitMQ: Exchange、Queue    

   RocketMQ: Topic、MessageQueue    

   Kafka: Topic、Partition

3.数据集合    

   RabbitMQ 每个队列拥有全部数据    

   RocketMQ 队列的并集为全部数据    

   Kafka 分区的并集为全部数据

4.日志存储的区别    

    RabbitMQ 消息存储在内存    

    RocketMQ 消息存储在一个日志文件,相应队列只存储对应的消息偏移量    

     Kafka  消息分布存储在不同的分区,每个分区包含日志文件,偏移量文件及时间偏移量文件。

参考

1.狸猫技术窝 RocketMQ系列

2.《深入理解Kafka:核心设计与实践原理》

3.《RabbitMQ实战》

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值