84°

Kafaka与RocketMQ的特性对比

对比项 Kafka RocketMQ
消息路由 将同一topic分为多个分区,存储在不同的broker上

生产者视角:获取topic对应分区的broker信息,生产者根据key发送到指定分区
消费者视角:消费者加入消费者组后,会分配指定的分区进行消费

关于topic和broker关联关系的元信息可以通过任意broker获取,因为元信息存储在zookeeper上,获得元信息都是一致的
broker上为每个topic分配了一定数量的读写队列,topic可以单独分配在一个broker上也可以分配在集群的每个broker上

生产者视角:通过nameserver获取topic对应的broker以及broker的读写队列数量,根据key发送到不同的队列
消费者视角:消费者加入消费者组后,会分配指定的消费队列进行消费

关于topic和broker关联关系的元信息可以通过从nameserver获取,元信息在各个nameserver上单独存储,因为nameserver之间不涉及任何同步,所以nameserver上的元信息会出现不一致的可能
集群架构 通过分区提高写请求负载,通过副本机制实现数据的备份以及读的负载

分区中的leader失效以后,分区的其他副本可以自动切换为新的leader实现服务的高可用
通过指定多个broker上创建topic实现负载的扩容,通过主从机制,从服务定时同步主服务上的数据实现数据的备份

主服务挂了以后,无法实现自动切换,需要手动将从服务切换到主服务

主服务挂了以后,从服务可以继续提供消息的读取,无法提供消息的写入
持久化存储 每个分区作为一个单独目录,目录下存储分区的log日志文件以及索引文件。

日志会根据大小和时间策略进行定期删除

当topic过多的时候,由于分区文件变多,文件的读写就容易变成随机读写,进而影响整个的读写性能
所有topic的消息都存储在一个log文件中,topic的数量不易造成随机读写

消息的读取也是通过索引文件,去读取log文件中的消息
消息过滤 只支持消费端的过滤 支持broker端和消费端的过滤

本文由【MorganZh】发布于开源中国,原文链接:https://my.oschina.net/dushougudu/blog/3159449

全部评论: 0

    我有话说: