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

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

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

Kafka:极大 Kafka按批次发送动静和斲丧动静。发送端将多个小动静归并,批量发向Broker,斲丧端每次取出一个批次的动静批量处理赏罚。

  • rabbitmq:较量大
  • zeromq:极大
  • rocketmq:大

rocketMQ吸取端可以批量斲丧动静,可以设置每次斲丧的动静数,可是发送端不是批量发送。

activemq:较量大

十二 订阅情势和动静分发

Kafka:基于topic以及凭证topic举办正则匹配的宣布订阅模式。

【发送】

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

【吸取】

1)consumer向群组和谐器broker发送心跳来维持他们和群组的从属相关以及他们对分区的全部权相关,全部权相关一旦被分派就不会改变除非产生再平衡(好比有一个consumer插手可能分开consumer group),consumer只会从对应的分区读打动静。

2)kafka限定consumer个数要少于分区个数,每个动静只会被统一个 Consumer Group的一个consumer斲丧(非广播)。

3)kafka的 Consumer Group订阅统一个topic,会尽也许地使得每一个consumer分派到沟通数目的分区,差异 Consumer Group订阅统一个主题彼此独立,统一个动静会被差异的 Consumer Group处理赏罚。

rabbitmq:提供了4种:direct, topic ,Headers和fanout。

【发送】

先要声明一个行列,这个行列会被建设可能已经被建设,行列是根基存储单位。

由exchange和key抉择动静存储在哪个行列。

direct>发送到和bindingKey完全匹配的行列。

topic>路由key是含有"."的字符串,会发送到含有“*”、“#”举办恍惚匹配的bingKey对应的行列。

fanout>与key无关,会发送到全部和exchange绑定的行列

headers>与key无关,动静内容的headers属性(一个键值对)和绑定键值对完全匹配时,会发送到此行列。此方法机能低一样平常不消

【吸取】

rabbitmq的行列是根基存储单位,不再被分区可能分片,对付我们已经建设了的行列,斲丧端要指定从哪一个行列吸取动静。

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

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

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

zeromq:点对点(p2p)

rocketmq:基于topic/messageTag以及凭证动静范例、属性举办正则匹配的宣布订阅模式。

【发送】

发送动静通过轮询行列的方法发送,每个行列吸取均匀的动静量。发送动静指定topic、tags、keys,无法指定投递到哪个行列(没故意义,集群斲丧和广播斲丧跟动静存放在哪个行列没有相关)。

tags选填,相同于 Gmail 为每封邮件配置的标签,利便处事器过滤行使。今朝只支 持每个动静配置一个 tag,以是也可以类比为 Notify 的 MessageType 观念。

keys选填,代表这条动静的营业要害词,处事器会按照 keys 建设哈希索引,配置后, 可以在 Console 体系按照 Topic、Keys 来查询动静,因为是哈希索引,请尽也许 担保 key 独一,譬喻订单号,商品 Id 等。

【吸取】

1)广播斲丧。一条动静被多个Consumer斲丧,纵然Consumer属于统一个ConsumerGroup,动静也会被ConsumerGroup中的每个Consumer都斲丧一次。

2)集群斲丧。一个 Consumer Group中的Consumer实例均匀分摊斲丧动静。譬喻某个Topic有 9 条动静,个中一个Consumer Group有3个实例,那么每个实例只斲丧个中的 3 条动静。即每一个行列都把动静轮番分发给每个consumer。

activemq:点对点(p2p)、广播(宣布-订阅)

点对点模式,每个动静只有1个斲丧者;

宣布/订阅模式,每个动静可以有多个斲丧者。

【发送】

点对点模式:先要指定一个行列,这个行列会被建设可能已经被建设。

宣布/订阅模式:先要指定一个topic,这个topic会被建设可能已经被建设。

【吸取】

点对点模式:对付已经建设了的行列,斲丧端要指定从哪一个行列吸取动静。

宣布/订阅模式:对付已经建设了的topic,斲丧端要指定订阅哪一个topic的动静。

十三 次序动静

Kafka:支持。

配置出产者的max.in.flight.requests.per.connection为1,可以担保动静是凭证发送次序写入处事器的,纵然产生了重试。

kafka担保统一个分区里的动静是有序的,可是这种有序分两种环境

1)key为null,动静逐个被写入差异主机的分区中,可是对付每个分区依然是有序的

2)key不为null , 动静被写入到统一个分区,这个分区的动静都是有序。

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

十四 动静确认

Kafka:支持。

1)发送方确认机制

ack=0,不管动静是否乐成写入分区

ack=1,动静乐成写入首领分区后,返回乐成

ack=all,动静乐成写入全部分区后,返回乐成。

2)吸取方确认机制

自动可妙手动提交分区偏移量,早期版本的kafka偏移量是提交给Zookeeper的,这样使得zookeeper的压力较量大,更新版本的kafka的偏移量是提交给kafka处事器的,不再依靠于zookeeper群组,集群的机能越发不变。

rabbitmq:支持。

1)发送方确认机制,动静被投递到全部匹配的行列后,返回乐成。假如动静和行列是可耐久化的,那么在写入磁盘后,返回乐成。支持批量确认和异步确认。

2)吸取方确认机制,配置autoAck为false,必要显式确认,配置autoAck为true,自动确认。

当autoAck为false的时辰,rabbitmq行列会分成两部门,一部门是守候投递给consumer的动静,一部门是已经投递可是充公到确认的动静。假如一向没有收到确认信号,而且consumer已经断开毗连,rabbitmq会布置这个动静从头进入行列,投递给原本的斲丧者可能下一个斲丧者。

(编辑:湖南网)

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

热点阅读