加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

常用动静中间件17个维度全方位比拟

发布时间:2019-09-24 13:57:01 所属栏目:建站 来源:搬砖的码哥
导读:本文先容了Kafka、RabbitMQ、ZeroMQ、RocketMQ、ActiveMQ 17 个方面综合比拟作为动静行列行使时的差别。 一 资料文档 Kafka:中。有kafka作者本身写的书,网上资料也有一些。rabbitmq:多。有一些不错的书,网上资料多。zeromq:少。没有专门写zeromq的书
副问题[/!--empirenews.page--]

 常用动静中间件17个维度全方位比拟

本文先容了Kafka、RabbitMQ、ZeroMQ、RocketMQ、ActiveMQ 17 个方面综合比拟作为动静行列行使时的差别。

一 资料文档

Kafka:中。有kafka作者本身写的书,网上资料也有一些。rabbitmq:多。有一些不错的书,网上资料多。zeromq:少。没有专门写zeromq的书,网上的资料多是一些代码的实现和简朴先容。rocketmq:少。没有专门写rocketmq的书,网上的资料良莠不齐,官方文档很简捷,可是对技能细节没有过多的描写。activemq:多。没有专门写activemq的书,网上资料多。

二 开拓说话

Kafka:Scala rabbitmq:Erlang zeromq:c rocketmq:java activemq:java

三 支持的协议

Kafka:本身界说的一套…(基于TCP) rabbitmq:AMQP zeromq:TCP、UDP rocketmq:本身界说的一套… activemq:OpenWire、STOMP、REST、XMPP、AMQP

四 动静存储

Kafka:内存、磁盘、数据库。支持大量会萃。

kafka的最小存储单位是分区,一个topic包括多个分区,kafka建设主题时,这些分区会被分派在多个处事器上,凡是一个broker一台处事器。分区首了解匀称地漫衍在差异的处事器上,分区副本也会匀称的漫衍在差异的处事器上,确保负载平衡和高可用性,当新的broker插手集群的时辰,部门副本会被移动到新的broker上。按照设置文件中的目次清单,kafka会把新的分区分派给目次清单里分区数起码的目次。默认环境下,分区器行使轮询算法把动静平衡地漫衍在统一个主题的差异分区中,对付发送时指定了key的环境,会按照key的hashcode取模后的值存到对应的分区中。

rabbitmq:内存、磁盘。支持少量会萃。

rabbitmq的动静分为耐久化的动静和非耐久化动静,不管是耐久化的动静还长短耐久化的动静都可以写入到磁盘。耐久化的动静在达到行列时就写入到磁盘,而且假如可以,耐久化的动静也会在内存中生涯一份备份,这样可以进步必然的机能,当内存吃紧的时辰会从内存中破除。非耐久化的动静一样平常只存在于内存中,在内存吃紧的时辰会被换入到磁盘中,以节减内存。

引入镜像行列机制,可将重要行列“复制”到集群中的其他broker上,担保这些行列的动静不会丢失。设置镜像的行列,都包括一个主节点master和多个从节点slave,假如master失效,插手时刻最长的slave会被晋升为新的master,除发送动静外的全部举措都向master发送,然后由master将呼吁执行功效广播给各个slave,rabbitmq会让master匀称地漫衍在差异的处事器上,而统一个行列的slave也会匀称地漫衍在差异的处事器上,担保负载平衡和高可用性。

zeromq:动静发送端的内存可能磁盘中。不支持耐久化。

rocketmq:磁盘。支持大量会萃。

commitLog文件存放现实的动静数据,每个commitLog上限是1G,满了之后会自动新建一个commitLog文件生涯数据。ConsumeQueue行列只存放offset、size、tagcode,很是小,漫衍在多个broker上。ConsumeQueue相等于CommitLog的索引文件,斲丧者斲丧时会从consumeQueue中查找动静在commitLog中的offset,再去commitLog中查找元数据。

ConsumeQueue存储名目标特征,担保了写进程的次序写盘(写CommitLog文件),大量数据IO都在次序写统一个commitLog,满1G了再写新的。加上rocketmq是累计4K才逼迫从PageCache中刷到磁盘(缓存),以是高并发写机能突出。

activemq:内存、磁盘、数据库。支持少量会萃。

五 动静事宜

Kafka:支持

rabbitmq:支持。客户端将信道配置为事宜模式,只有当动静被rabbitMq吸取,事宜才气提交乐成,不然在捕捉非常后举办回滚。行使事宜会使得机能有所降落

  • zeromq:不支持
  • rocketmq:支持
  • activemq:支持

六 负载平衡

Kafka:支持负载平衡。

一个broker凡是就是一台处事器节点。对付统一个Topic的差异分区,Kafka会极力将这些分区漫衍到差异的Broker处事器上,zookeeper生涯了broker、主题和分区的元数据信息。分区首了解处理赏罚来自客户端的出产哀求,kafka分区首了解被分派到差异的broker处事器上,让差异的broker处事器配合分管当务。

每一个broker都缓存了元数据信息,客户端可以从恣意一个broker获取元数据信息并缓存起来,按照元数据信息知道要往那边发送哀求。

kafka的斲丧者组订阅统一个topic,会尽也许地使得每一个斲丧者分派到沟通数目的分区,分摊负载。

当斲丧者插手可能退出斲丧者组的时辰,还会触发再平衡,为每一个斲丧者从头分派分区,分摊负载。

kafka的负载平衡大部媒崆自动完成的,分区的建设也是kafka完成的,潜匿了许多细节,停止了繁琐的设置和工钱疏忽造成的负载题目。

发送端由topic和key来抉择动静发往哪个分区,假如key为null,那么会行使轮询算法将动静平衡地发送到统一个topic的差异分区中。假如key不为null,那么会按照key的hashcode取模计较出要发往的分区。

rabbitmq:对负载平衡的支持欠好。

动静被投递到哪个行列是由互换器和key抉择的,互换器、路由键、行列都必要手动建设。

rabbitmq客户端发送动静要和broker成立毗连,必要事先知道broker上有哪些互换器,有哪些行列。凡是要声明要发送的方针行列,假如没有方针行列,会在broker上建设一个行列,假若有,就什么都不处理赏罚,接着往这个行列发送动静。假设大部门沉重使命的行列都建设在统一个broker上,那么这个broker的负载就会过大。(可以在上线前预先建设行列,无需声明要发送的行列,可是发送时不会实行建设行列,也许呈现找不到行列的题目,rabbitmq的备份互换器会把找不到行列的动静生涯到一个专门的行列中,以便往后查询行使)

行使镜像行列机制成立rabbitmq集群可以办理这个题目,形成master-slave的架构,master节点会匀称漫衍在差异的处事器上,让每一台处事器分摊负载。slave节点只是认真转发,在master失效时会选择插手时刻最长的slave成为master。

当新节点插手镜像行列的时辰,行列中的动静不会同步到新的slave中,除非挪用同步呼吁,可是挪用呼吁后,行列会阻塞,不能在出产情形中挪用同步呼吁。

当rabbitmq行列拥有多个斲丧者的时辰,行列收到的动静将以轮询的分发方法发送给斲丧者。每条动静只会发送给订阅列内外的一个斲丧者,不会一再。

这种方法很是得当扩展,并且是专门为并发措施计划的。

假如某些斲丧者的使命较量沉重,那么可以配置basicQos限定信道上斲丧者能保持的最大未确认动静的数目,在到达上限时,rabbitmq不再向这个斲丧者发送任何动静。

对付rabbitmq而言,客户端与集群成立的TCP毗连不是与集群中全部的节点成立毗连,而是挑选个中一个节点成立毗连。

可是rabbitmq集群可以借助HAProxy、LVS技能,可能在客户端行使算法实现负载平衡,引入负载平衡之后,各个客户端的毗连可以分摊到集群的各个节点之中。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读