RocketMQ 是出自 A 公司的开源产物,用 Java 语言实现,在设计时参考了 Kafka,并做出了本身的一些改造,动静靠得住性上比 Kafka 更好,今朝,RocketMQ 的文档仍然不足富厚 1 2,社区仍然无法与 Kafka 比肩,但 A 公司已经推出了基于 RocketMQ 的云产物 3,相信将来 RocketMQ 也会有不错的成长。本文回收 RocketMQ 3.2.6 举办尝试,由于 RocketMQ 与 Kafka 很相似,本文许多处所对两者做出了较量。
根基观念
RocketMQ 由于警惕了 Kafka 的设计,包罗组件的定名也许多与 Kafka 相似,下面摘抄一段《RocketMQ 道理简介》中的先容,可以与 Kafka 的定名比对一下,
《RocketMQ 道理简介》中还先容了一些其他的观念,譬喻,广播消费和集群消费,广播消费是 Consumer Group 中对付同一条动静每个 Consumer 都消费,集群消费是 Consumer Group 中对付同一条动静只有一个 Consumer 消费。Kafka 回收的是集群消费,不支持广播消费(好吧,是我没有找到)。再譬喻,普通顺序动静和严格顺序动静,劳务派遣管理系统,普通顺序动静在 Broker 重启环境下不会担保动静顺序性;严格顺序动静纵然在异常环境下也会担保动静的顺序性。小我私家领略,所谓普通顺序动静,昆山软件开发,应该就是 Kafka 中的 Partition 级别有序,严格顺序动静,应该是 Topic 级别有序,但文中也提到,这样的有序级别是要支付价钱的,Broker 集群中只要有一台呆板不行用,则整个集群都不行用,低落处事可用性。利用这种模式,需要依赖同步双写,主备自动切换,但自动切换成果今朝还未实现(我猜,自动切换仅仅是没开源吧)。说白了,严格顺序动静不具备出产可用性,本身玩玩还行,其应用场景主要是数据库 binlog 同步。
关于 RocketMQ 和 Kafka 的比拟,可以参考 RocketMQ Wiki 中的文章 4,看看就行,不必较真。
顺序性的话题,适才已经提到了一些,RocketMQ 的实现应该不弱于 Kafka。对付分区,RocketMQ 好像有意弱化了这个观念,只有在 Producer 中有一个参数 defaultTopicQueueNums
,分区在 RocketMQ 中有时被称为行列。RocketMQ 的普通顺序动静模式,应该就是分区顺序性,这点与 Kafka 一致。
RocketMQ 实现高可用的方法有多种,《RocketMQ 用户指南》文档中提到的有:多主模式、多主多从异步复制模式、多主多从同步复制模式。多主模式下,机能较好,可是在 Broker 宕机的时候,该 Broker 上未消费的生意业务不行消费;多主多从异步复制模式,与 Kafka 的副本模式较量雷同,主 Broker 宕机后,会自动切换到从 Broker,动静的消费不会呈现中断;多主多从同步复制模式更进一步,回收同步刷盘的方法,制止了主 Broker 宕机带来的动静丢失,可是,今朝不支持自动切换。
固然 RocketMQ 提供了多种高可用方法,可是今朝能出产利用的就只有多主多从异步复制模式,纵然在这个模式上,其实现也比 Kafka 要差。因为 RocketMQ 的机制中,主从干系是工钱指定的,主 Broker 上包袱所有的动静派发,而 Kafka 的主从干系是通过选举的方法选出来的,每个分区的主节点都是纷歧样的,可以从差异的节点派动员静。Kafka 的模式是分手模式,有利于负载平衡,并且当一个 Broker 宕机的时候,只影响部门 Topic,而 RocketMQ 一旦主 Broker 宕机,会影响所有的 Topic。别的,Kafka 可以支持 Broker 间同步复制(通过配置 Broker 的 acks
参数),这样比的话,RocketMQ 就差太多了。
关于 RocketMQ 的先容,昆山软件开发,网上的文章不算太多,也较量杂,《漫衍式开放动静系统(RocketMQ)的道理与实践》5 6 7这篇道理先容的不错,推荐。
RocketMQ 的东西和编程接口
对较量 Kafka 而言,RocketMQ 提供的东西要少一些,如下,
bin/mqadmin bin/mqbroker bin/mqbroker.numanode0 bin/mqbroker.numanode1 bin/mqbroker.numanode2 bin/mqbroker.numanode3 bin/mqfiltersrv bin/mqnamesrv bin/mqshutdown