精华内容
下载资源
问答
  • 常用mq比较

    千次阅读 2017-02-17 10:13:46
    常用MQ产品比较 ActiveMQ Joram HornetQ OpenMQ MuleMQ SonicMQ RabbitMQ ZeroMQ

    常用MQ产品比较


    ActiveMQ Joram HornetQ OpenMQ MuleMQ SonicMQ RabbitMQ ZeroMQ
    关注度
    成熟度 成熟 比较成熟 比较成熟 比较成熟 新产品无成功案例 成熟 成熟 不成熟
    所属社区/公司 Apache OW2 Jboss Sun Mule Progress

    社区活跃度
    文档
    特点 功能齐全,被大量开源项目使用
    在Linux平台上直接调用操作系统的AIO,性能得到很大的提升
    性能非常好,与MuleESB无缝整合 性能优越的商业MQ 由于Erlang语言的并发能力,性能很好 低延时,高性能,最高43万条消息每秒
    授权方式 开源 开源 开源 开源 商业 商业 开源 开源
    开发语言 Java Java Java Java Java Java Erlang C
    支持的协议 OpenWire、STOMP、REST、XMPP、AMQP JMS JMS JMS JMS JMS AMQP TCP、UDP
    客户端支持语言 Java、C、C++、Python、PHP、Perl、.net等 Java Java Java Java Java、C、C++、.net Java、C、C++、Python、PHP、Perl等 python、java、php、.net等
    持久化 内存、文件、数据库 内存、文件 内存、文件 内存、文件 内存、文件 内存、文件、数据库 内存、文件 在消息发送端保存
    事务 支持 支持 支持 支持 支持 支持 不支持 不支持
    集群 支持 支持 支持 支持 支持 支持 支持 不支持
    负载均衡 支持 支持 支持 支持 支持 支持 支持 不支持
    管理界面 一般
    一般 一般 一般
    部署方式 独立、嵌入 独立、嵌入 独立、嵌入 独立、嵌入 独立 独立 独立 独立
    评价 成熟稳定,开源首选 依赖容器,不适合跨语言调用 推出的时间不长,尚无使用案例,不适合跨语言调用 依赖容器,不适合跨语言调用 推出的时间不长,无成功案例,目前仅支持Java 成熟稳定 Queue的数量大于50后,高并发下无法持续稳定的提供服务 不支持事务、集群,并且消息不能在服务端持久化 

    节选自:http://blog.csdn.net/apanious/article/details/51014396

    展开全文
  • Java常用MQ比较

    2020-01-14 16:33:43
    kafka的集群依赖与zookeeper, zookeeper支持热拓展, 所有的broker, 消费者, 分区都可以动态移除, 而无需关闭服务, 与不依赖zookeeper集群的mq相比, 这是最大的优势. rabbitmq:支持简单集群,'复制’模式,对 高级...
    Kafka RabbitMQ RocketMQ ActiveMQ
    资料文档 中。有kafka作者自己写的书,网上资料也有一些 稍微长一点的文本 多。有一些不错的书,网上资料多 少。没有专门写rocketmq的书,网上的资料良莠不齐,官方文档很简洁,但是对技术细节没有过多的描述
    开发语言 Scala Erlang java java
    支持的协议 自己定义的一套…(基于TCP) AMQP 自己定义的一套… OpenWire、STOMP、REST、XMPP、AMQP
    消息存储 Kafka:内存、磁盘、数据库。支持大量堆积。kafka的最小存储单元是分区,一个topic包含多个分区,kafka创建主题时,这些分区会被分配在多个服务器上,通常一个broker一台服务器。 分区首领会均匀地分布在不同的服务器上,分区副本也会均匀的分布在不同的服务器上,确保负载均衡和高可用性,当新的broker加入集群的时候,部分副本会被移动到新的broker上。 根据配置文件中的目录清单,kafka会把新的分区分配给目录清单里分区数最少的目录。 默认情况下,分区器使用轮询算法把消息均衡地分布在同一个主题的不同分区中,对于发送时指定了key的情况,会根据key的hashcode取模后的值存到对应的分区中。 **内存、磁盘。支持少量堆积。**rabbitmq的消息分为持久化的消息和非持久化消息,不管是持久化的消息还是非持久化的消息都可以写入到磁盘。持久化的消息在到达队列时就写入到磁盘,并且如果可以,持久化的消息也会在内存中保存一份备份,这样可以提高一定的性能,当内存吃紧的时候会从内存中清除。非持久化的消息一般只存在于内存中,在内存吃紧的时候会被换入到磁盘中,以节省内存。引入镜像队列机制,可将重要队列“复制”到集群中的其他broker上,保证这些队列的消息不会丢失。配置镜像的队列,都包含一个主节点master和多个从节点slave,如果master失效,加入时间最长的slave会被提升为新的master,除发送消息外的所有动作都向master发送,然后由master将命令执行结果广播给各个slave,rabbitmq会让master均匀地分布在不同的服务器上,而同一个队列的slave也会均匀地分布在不同的服务器上,保证负载均衡和高可用性。 磁盘。支持大量堆积 commitLog文件存放实际的消息数据,每个commitLog上限是1G,满了之后会自动新建一个commitLog文件保存数据。ConsumeQueue队列只存放offset、size、tagcode,非常小,分布在多个broker上。ConsumeQueue相当于CommitLog的索引文件,消费者消费时会从consumeQueue中查找消息在commitLog中的offset,再去commitLog中查找元数据。ConsumeQueue存储格式的特性,保证了写过程的顺序写盘(写CommitLog文件),大量数据IO都在顺序写同一个commitLog,满1G了再写新的。加上rocketmq是累计4K才强制从PageCache中刷到磁盘(缓存),所以高并发写性能突出。 内存、磁盘、数据库。支持少量堆积
    消息事务 支持 支持。客户端将信道设置为事务模式,只有当消息被rabbitMq接收,事务才能提交成功,否则在捕获异常后进行回滚。使用事务会使得性能有所下降 支持 支持
    负载均衡
    集群方式
    管理界面 一般 一般
    可用性 非常高(分布式) 高(主从) 非常高(分布式) 高(主从)
    消息重复 支持at least once、at most once 支持at least once、at most once 支持at least once 支持at least once
    吞吐量TPS (十万级,17万)极大Kafka按批次发送消息和消费消息。发送端将多个小消息合并,批量发向Broker,消费端每次取出一个批次的消息批量处理 (万级别,5万)比较大 (十万级别)大 rocketMQ接收端可以批量消费消息,可以配置每次消费的消息数,但是发送端不是批量发送 (万级别)比较大
    订阅形式和消息分发
    顺序消息 设置生产者的max.in.flight.requests.per.connection为1, 可以保证消息是按照发送顺序写入服务器的,即使发生了重试. Kafka保证同一个分区的消息是有序的, 但是这种分两种情况: key为null, 消息逐个写入不同的主机分区中, 但是对于每个分区依然是有序的. key不为null, 消息被写入同一个分区,这个分区的消息都是有序的 不支持 不支持 不支持
    消息确认 支持 支持 支持 支持
    消息回溯 支持指定分区offset位置的回溯 不支持 支持指定时间点的回溯 不支持
    消息重试
    并发度

    负载均衡

    Kafka: 支持负载均衡

    1. 一个broker通常就是一台服务器节点. 对于同一个Topic的不同分区, Kafka会尽力将这些分区分布刀不同的Broker服务器上, zookeeper保存了broker, 主题和分区的元数据信息. 分区首领会处理来自客户端的生产请求, Kafka分区首领会被分配到不同的zookeeper服务器上, 让不同的broker服务器共同分担任务.

      每一个broker都缓存元数据信息, 客户端可以从任意一个broker获取元数据信息并缓存起来, 根据元数据信息知道要往哪里发送请求.

      1. Kafka的消费者组订阅同一个topic, 会尽可能地使得每一个消费者分配到相同数量的分区, 分摊负载.

      2. 当消费者组订阅了同一个topic, 还会促发再均衡, 为每一个消费者重新分配分区, 分摊负责。

        Kafka的负载均衡大部分是自动完成的, 分区的创建也是Kafka完成的, 隐藏了许多细节, 避免了繁琐的配置和人为疏忽造成的负载问题。

        4.发送端由topic和key来决定消息发送到那个分区,如果key为null,那么会使用轮询算法将消息负载发送到同一个topic的不同分区中。 如果key不为null,那么会根据key的hashcode取模计算要发往的分区。

    rabbitmq:对负载均衡的支持不好

    1.消息被投递到那个队列是由交换机和key决定的, 交换器,路由键, 队列都需要手动创建

    rabbitMQ客户端发送消息要和broker建立连接, 需要事先知道broker有那些交换器, 有那些队列。通常要声明发送的目标队列, 如果没有目标队列, 会在broker上创建一个队列,如果有,就什么都不处理, 接着往这个队列发送消息。假设大部分繁琐的任务都在同一个broker上,那这个broker的负载会过大。(可以在上线前预先创建队列,无需声明要发送的队列,但是发送时不会尝试去创建队列,可能出现找不到队列的问题, rabbitmq的备份交换器会把找不到队列的消息保存到一个专门的队列中,以便以后查询用)

    使用镜像队列机制建立rabbitmq集群可以解决这个问题, 形成master-slave的架构, master节点会均匀分布在不同的服务器上, 让每一台服务器分摊负载. slave节点只是负责转发, 在master失效时会选择加入时间最长的slaver成为master

    当新节点加入镜像队列的时候, 队列中的消息不会同步到新的slaver中,除非调用同步命令, 但是调用命令后, 队列会阻塞, 不能在生产环境中调用同步命令

    2.当rabbitmq队列拥有多个消费者的时候,队列收到的消息将以轮询的分发方式发送给消费者。每条消息只会发送给订阅列表里的一个消费者,不会重复。

    这种方式非常适合扩展,而且是专门为并发程序设计的。

    如果某些消费者的任务比较繁重,那么可以设置basicQos限制信道上消费者能保持的最大未确认消息的数量,在达到上限时,rabbitmq不再向这个消费者发送任何消息。

    3.对于rabbitmq而言,客户端与集群建立的TCP连接不是与集群中所有的节点建立连接,而是挑选其中一个节点建立连接。

    但是rabbitmq集群可以借助HAProxy、LVS技术,或者在客户端使用算法实现负载均衡,引入负载均衡之后,各个客户端的连接可以分摊到集群的各个节点之中。

    rocketmq:支持负载均衡

    一个broker通常是一个服务器节点,broker分为master和slave,master和slave存储的数据一样,slave从master同步数据。

    1.nameserver与每个集群成员保持心跳,保存着Topic-Broker路由信息,同一个topic的队列会分布在不同的服务器上。

    2.发送消息通过轮询队列的方式发送,每个队列接收平均的消息量。发送消息指定topic、tags、keys,无法指定投递到哪个队列(没有意义,集群消费和广播消费跟消息存放在哪个队列没有关系)。

    tags选填,类似于 Gmail 为每封邮件设置的标签,方便服务器过滤使用。目前只支 持每个消息设置一个 tag,所以也可以类比为 Notify 的 MessageType 概念。

    keys选填,代表这条消息的业务关键词,服务器会根据 keys 创建哈希索引,设置后, 可以在 Console 系统根据 Topic、Keys 来查询消息,由于是哈希索引,请尽可能 保证 key 唯一,例如订单号,商品 Id 等。

    3.rocketmq的负载均衡策略规定:Consumer数量应该小于等于Queue数量,如果Consumer超过Queue数量,那么多余的Consumer 将不能消费消息。这一点和kafka是一致的,rocketmq会尽可能地为每一个Consumer分配相同数量的队列,分摊负载。

    activemq:支持负载均衡。可以基于zookeeper实现负载均衡

    集群方式

    Kafka:天然的’Leader-Slave’无状态集群, 每台服务既是Master也是Slave

    分区首领均匀地分布在不同的Kafka服务器上, 分区副本业均匀地分布在不同的Kafka服务器上, 所以每台kafka服务既含分区首领, 同时又含有分区副本, 每一台kafka服务器是某一台kafka服务器的Slave, 同时也是某一台kafka服务器的leader

    kafka的集群依赖与zookeeper, zookeeper支持热拓展, 所有的broker, 消费者, 分区都可以动态移除, 而无需关闭服务, 与不依赖zookeeper集群的mq相比, 这是最大的优势.

    rabbitmq:支持简单集群,'复制’模式,对高级集群模式支持不好

    rabbitmq的每一个节点,不管是单一节点系统或者是集群中的一部分,要么是内存节点,要么是磁盘节点,集群中至少要有一个是磁盘节点。

    在rabbitmq集群中创建队列,集群只会在单个节点创建队列进程和完整的队列信息(元数据、状态、内容),而不是在所有节点上创建。没有拓展性可言

    引入镜像队列,可以避免单点故障,确保服务的可用性,但是需要人为地为某些重要的队列配置镜像。

    rocketmq:常用 多对’Master-Slave’ 模式,开源版本需手动切换Slave变成Master

    Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。

    Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。

    Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。

    Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。
    客户端先找到NameServer, 然后通过NameServer再找到 Broker。
    一个topic有多个队列,这些队列会均匀地分布在不同的broker服务器上。rocketmq队列的概念和kafka的分区概念是基本一致的,kafka同一个topic的分区尽可能地分布在不同的broker上,分区副本也会分布在不同的broker上。

    rocketmq集群的slave会从master拉取数据备份,master分布在不同的broker上。

    activemq:支持简单集群模式,比如’主-备’,对高级集群模式支持不好

    订阅形式和消息分发

    Kafka:基于topic以及按照topic进行正则匹配的发布订阅模式

    [发送]

    ​ 发送端由topic和key来决定消息将发往那个分区,如果key为null, 那么会使用轮询算法将消息均衡地发送到同一个topic的不同分区中. 如果key不是null, 那么会将key的hashcode取模计算出要发往的分区.

    [接受]

    1.consumer向群组协调器broker发送心跳来维持他们和群组的从属关系以及他们对分区的从属关系以及他们对分区的所有权关系,所有权关系一旦被分配到不会改变除非发生再均衡(比如有一个comsumer加入或者离开consumer group), consumer只会从对应的分区读取消息.

          2. Kafka限制consumer个数要**少于**分区个数, 每个消息只会被同一个consumer Group的一个消费者(非广播)
    
      3. Kafka的consumer group订阅同一个topic, 会尽可能地使得每一个consumer分配到相同数量的分区,不同consumer group同一个主题互相独立, 同一个消息会被不同的consumer group处理
    

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

    [发送]

    ​ 先声明一个队列, 这个队列会被创建或者已经被创建, 队列是基本的存储单元.

    有exchage和key决定消息队列存储到那个队列

    fanout>与key无关,会发送到所有和exchange绑定的队列 (比如订阅模式)

    direct>发送到bindingKey完全匹配的队列(比如路由模式)

    topic>路由key是含有".“的字符串, 会发送到含有”*", "#"进行模糊匹配的bindingKey对应的队列(比如topic模式, 也叫主题模式)

    headers>与key无关, 消息内容的headers属性(一个键值对)和绑定的键值对完全匹配时, 会发送此队列. 此方式性能低一般不用.

    [接受]

    rabbitmq的队列是基本存储单元, 不在被分区或者分片, 对于我们已经创建了队列,消费端要指定从那个队列接收消息.

    work模式, 路由模式, topic模式: 当rabbitmq队列拥有多个consumer的时候, 每条消息只会发送给订阅列表里的一个consumer, 不会重复. 这种方式非常合适拓展, 而是专门为并发程序设计的

    PS: 如果某些消费者的任务比较繁重, 那么可以设置basicQos限制信道上消费者能保持的最大未确认消息的数量,在达到上限时, rabbitmq不再向这个消费发送任何消息.

    rocketmq:基于topic/messageTag以及按照消息类型、属性进行正则匹配的发布订阅模式

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

    消息确认

    Kafka:支持

    发送机制:

    ack=0, 不管消息是否成功写入分区

    ack=1, 消息成功写入首领分区后,返回成功

    ack=all, 消息成功写入所有分区后, 返回成功

    接收方确认机制:

    自动或者手动提交分区偏移量,早期版本的kafka偏移量是提交给Zookeeper的,这样使得zookeeper的压力比较大,更新版本的kafka的偏移量是提交给kafka服务器的,不再依赖于zookeeper群组,集群的性能更加稳定

    Rabbitmq:支持

    发送方确认机制:

    消息被投递到所有匹配的队列后,返回成功。如果消息和队列是可持久化的,那么在写入磁盘后,返回成功。支持批量确认和异步确认

    接收方确认机制

    设置autoAck为false,需要显式确认,设置autoAck为true,自动确认。

    当autoAck为false的时候,rabbitmq队列会分成两部分,一部分是等待投递给consumer的消息,一部分是已经投递但是没收到确认的消息。如果一直没有收到确认信号,并且consumer已经断开连接,rabbitmq会安排这个消息重新进入队列,投递给原来的消费者或者下一个消费者。
    未确认的消息不会有过期时间,如果一直没有确认,并且没有断开连接,rabbitmq会一直等待,rabbitmq允许一条消息处理的时间可以很久很久,

    所以这里有个疑问: 如果consumer设置autoAck=false, 然后在处理某消息的时候宕机了, 而MQ一直在等待怎么办? 还说说如果断开连接了, MQ会将这个消息重发给consumer处理?

    ​ 刚刚做了测试, 如果在consumer处理的时候, 手动杀死其进程, 好像rabbitmq会自动将这消息重新入队

    消息重试

    Kafka: 不支持, 但是可以实现

    Kafka支持指定分区offset位置的回溯, 可以实现消息重试.

    rabbitmq, 不支持,但是可以利用消息确认机制实现

    生产者:

    等待补充!!!其实RabbitMQ几乎可以保证99.99%发生成功, 但是偶尔也有失败,

    处理方式大概2种类: 1定时重发, 2记录日志人工处理, 如果是重要的消息可以发起系统预警

    消费者:

    当autoAck为false的时候,rabbitmq队列会分成两部分,一部分是等待投递给consumer的消息,一部分是已经投递但是没收到确认的消息。如果一直没有收到确认信号,并且consumer已经断开连接,rabbitmq会安排这个消息重新进入队列,投递给原来的消费者或者下一个消费者

    如果消费者消费3次都失败,可以根据业务情况进入死信队列

    rocketmq:支持

    消息消费失败的大部分场景下, 立即重试99%都会失败, 所以rocketmq的策略是在消费失败时定时重试,每次时间间隔相同.

    生产者: (发送端的 send 方法本身支持内部重试)

    a.最多重试3次

    b.如果发送失败, 则轮转到下一个broker

    c. 这个方法的总耗时不超过sendMsgTimeout 设置的值,默认 10s,超过时间不在重试

    消费者: 消费消息失败后,要提供一种重试机制,令消息再消费一次。Consumer 消费消息失败通常可以分为以下两种情况:

    1.由于消息本身的原因, 例如反序列化失败, 消息数据本身无法处理(比如充话费的时候,当前手机号不存在). 定时重试机制,比如超过10s后再重试

    2.由于依赖的下游应用服务器不可用, 例如db连接不可用, 外系统网络不可达.

    即使跳过当前失败的消息,消费其他消息同样也会报错。这种情况可以 sleep 30s,再消费下一条消息,减轻 Broker 重试消息的压力。

    activemq:不支持

    并发度

    Kafka 高

    一个线程一个消费者, Kafka限制消费者的个数要**<=**分区数,如果要提高并行度, 可以在消费者中开启多线程, 或者增加consumer实例数量

    RabbitMQ: 极高(下面这段文字上面有提起)

    本身是用Erlang语言写的,并发性能高。

    可在消费者中开启多线程,最常用的做法是一个channel对应一个消费者,每一个线程把持一个channel,多个线程复用connection的tcp连接,减少性能开销。

    当rabbitmq队列拥有多个消费者的时候,队列收到的消息将以轮询的分发方式发送给消费者。每条消息只会发送给订阅列表里的一个消费者,不会重复。

    这种方式非常适合扩展,而且是专门为并发程序设计的。

    如果某些消费者的任务比较繁重,那么可以设置basicQos限制信道上消费者能保持的最大未确认消息的数量,在达到上限时,rabbitmq不再向这个消费者发送任何消息

    rocketmq:高

    1. rocketmq限制消费者个数**<=**队列数,但是可以在消费者再开启多线程, 这一点和Kafka是一致的,提高并行度的方法相同.

      修改消费并行度方法:

      a.同一个ConsumerGroup下, 通过增加Consumer实例数量来提高并发度, 超过订阅队列数的Consumer实例无效.

      b.提高单个Consumer的消费并行线程, 通过修改参数consumeThreadMin, consumeThreadMax

    2.同一个网络连接connection, 客户端多个线程连接可以同事发送请求,连接会被复用, 减少性能开销.

    activemq: 高

    单个ActiveMQ的接收和消费消息的速度在1万笔/秒(持久化 一般为1-2万, 非持久化 2 万以上),在生产环境中部署10个Activemq就能达到10万笔/秒以上的性能,部署越多的activemq broker 在MQ上latency也就越低,系统吞吐量也就越高

    文章来自于

    展开全文
  • 这是一个MQ的系列文章,主要由MQ的基础认识到深入了解,和针对不同业务对MQ的技术选型问题。通过文章了解不同MQ的各种区别,和使用MQ会存在的一些问题。

    前言

    这是一个MQ的系列文章,主要由MQ的基础认识到深入了解,和针对不同业务对MQ的技术选型问题。通过文章了解不同MQ的各种区别,和使用MQ会存在的一些问题。

    入门篇:MQ(消息队列)系列学习—MQ基础认识
    基础篇:MQ(消息队列)系列学习—MQ组件优劣势比较
    晋级篇:MQ(消息队列)系列学习—MQ如何保证消息队列高可用
    在这里插入图片描述

    1.文字总结

    1.1 ActiveMQ

    优点

    • 单机吞吐量:万级
    • topic数量都吞吐量的影响:
    • 时效性:ms级
    • 可用性:高,基于主从架构实现高可用性
    • 消息可靠性:有较低的概率丢失数据
    • 功能支持:MQ领域的功能极其完备

    缺点

    • 社区维护较少,官方版本
    • 在大规模吞吐下性能较差

    1.2 Kafka

    优点

    • 单机吞吐量:十万级
    • 专为大数据准备,数据采集、传输、存储
    • 可用性:高,kafka是分布式
      缺点
    • 社区更新较慢
    • 支持消息顺序,但一台代理服务器宕机会导致消息乱序
    • 使用轮询,消息的实时性取决于轮询间隔时间
    • 消息有可能会被重复消费

    1.3 RabbitMQ

    优点

    • 由于是erlang语言开发,性能较好,支持高并发
    • 中小公司都选择它
    • 时效性最高
    • 社区活跃性高
    • 管理界面友好

    缺点

    • 由于是erlang语言开发,不能定制开发。较难维护,不利于二次开发
    • 吞吐量较低

    1.4 RocketMQ

    优点

    • 阿里出品,基于java语言。已在阿里中订单、交易、充值、流计算各种高并发场景中使用
    • 单机吞吐量:最高(十万级)
    • 消息可靠性:那是相当可靠,杠杠的
    • 可以自己进行定制化开发

    缺点

    • 支持命令行界面,可视化页面不太友好
    • 社区活跃性一般

    2.MQ选择推荐

    (1)中小型软件公司,建议选RabbitMQ.

    1.支持高并发
    2.管理界面友好
    3.社区活跃,一般中小公司都选择该MQ进行开发,碰见bug在网上也能较快找到
    4.消息时效性最高-微秒级

    (2)大型软件公司,建议选择 RocketMQ

    1.单机的吞吐量最高
    2.消息可靠性极高,理论不会丢失。如有对消息可靠性有要求,那么RocketMQ首选
    3.基于java开发,可以定制化开发
    4.稳定性极好,阿里双11年年帮我们测试

    (3)大型数据型公司,建议选Kafka

    1.如果由日志采集功能、实时计算-Kafka首选
    2.吞吐量极高
    3.适合大数据,专门用于处理数据

    展开全文
  • 吞吐量来说:Kafka>RabbitMQ>ActiveMQ 数据准确性:RabbitMQ>ActiveMQ>Kafka ...历史悠久,可以与spring-jms轻松结合,实现了多种协议,但不够轻巧,队列数较多下支持情况不好。...支持AMQP事务处理,在...

     

     

    吞吐量来说:Kafka>RabbitMQ>ActiveMQ

    数据准确性:RabbitMQ>ActiveMQ>Kafka

     

    ActiveMQ

    历史悠久,与spring整合较好,实现了多种协议,但性能并不高,多用于中小型公司

    RabbitMQ

    支持AMQP事务处理数据一致性、稳定性、可靠性做的最好,使用最广,但性能并没有RocketMQ和Kafka高

    RocketMQ

    阿里开源的中间件,具有高吞吐量、高并发、适合大规模分布式系统应用的特点,经过双十一实战场景的多次检验。但由于它是阿里内部从实战到开源的产物,里面有很多接口和API并不是那么直接的普遍被众多项目适用,相比Kafka甚至性能更优,但社区并没有前几个大。

    除此之外,RocketMQ的分布式事务功能需要收费,并不是所有功能都免费~

    Kafka

    Kafka设计的初衷是处理日志,性能上比RabbitMQq强,能扛大数据、高并发,但准确性差没有RabbitMQ强,广泛应用在大数据领域

    展开全文
  • 比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时,还提供了超一流的读写性能。针对Kafka性能方面进行简单分析,相关数据请参考:https://segmentfault.com/a/1190000003985468,下面介绍...
  • 常用MQ的说明及比较
  • 最近需要用到MQ组件,对具体组件的选型有一些调研,集合网上已有的一些材料,将粗略归纳的选型材料展示成列表形式,方便比对: 参考:https://www.cnblogs.com/imstudy/p/11064589.html
  • MQ(Message Queue)是一个常用的消息中间件,在各种场景都能见到MQ的身影,其最主要的三个场景分别是异步、解耦、削峰。 异步:当一个交易的链路涉及多个系统的互相调用时,系统处理完毕,返回结果的时长会比较长,...
  • mq常用类的总结

    2019-02-13 09:59:16
    1、MQQueueManager―――队列管理器访问类&...1:绑定方式,这种方式要求MQ服务器与应用程序同属一台服务器,效率比较高。 2:客户机方式:这种方式应用程序和MQ服务器可以不在同一台服务器上,但是要考虑到MQ权...
  • 关于几种MQ比较

    2020-12-21 21:57:55
    目前市面上常用MQ有: 1、RocketMQ 2、RabbitMQ 3、ActiveMQ 4、Kafka 5、ZeroMQ 一、几种MQ的介绍 ①RocketMQ        阿里系下开源的一款分布式、队列模型的消息中间件,原名Metaq,3.0版本...
  • MQ常用配置详解以及注意事项)MQ消息管理管:配置持久化注意 MQ消息管理管: 至于中间件的安装这个就比较容易,下载下来解压到指定的目录就行/ 默认登录地址以及账号信息 地址:http://localhost:8161/admin 用户名:...
  • 常用中间件:MQ、Redis、Nginx

    千次阅读 2019-03-18 17:02:57
    MQ是一种消息中间件,比较主流的消息中间件有ActiveMQ、RabbitMQ和kafka,目前公司用的是RabbitMQ。 在消息中间件中,比较重要的组成是Producer、Consumer、Exchange、Queue、Message。 消息推送之前,MQ配置:...
  • MQ 的使用场景有很多,但是比较核心的有3个:解耦、异步、削峰 。 1.解耦   A系统发送个数据到BCD三个系统,接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种...
  • 看来ZeroMQ和Kafka在这些中间件当中还是比较...8大通讯中间件/MQ比较常用且有名的有如下几种: 1. ACE: ACE提供了一组丰富的可重用C++包装外观(WrapperFacade)和框架组件,可跨多种平台完成通用的通信
  • 非常常用的3个消息队列Kafka、RocketMQ、RabbitMQ的讲解,把使用优缺点及使用场景都有说明,值得分享,如果再有puluar的分享就更好了。一、三种对比Kafka:1)基于Pull模式来处理,2)高吞吐量,3)大量数据、日志采集...
  • 非常常用的3个消息队列Kafka、RocketMQ、RabbitMQ的讲解,把使用优缺点及使用场景都有说明,值得分享,如果再有puluar的分享就更好了。一、三种对比Kafka:1)基于Pull模式来处理,2)高吞吐量,3)大量数据、日志采集...
  •  在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择。这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨。activemq是JMS消息通信规范...
  • BlockIP2是广泛使用的IBM®WebSphere®MQ的著名独立软件供应商(ISV)安全出口。... 本文概述并比较了BlockIP2和CHLAUTH中最常用的功能。 本文的主要目的是帮助熟悉安全性的人员熟悉通道身份验证记录如何替代Block...
  • 1、什么是MQ 消息队列(MQ)是一种应用程序对应用程序的通信方法。...比如:A系统和B系统之间要进行消息传递,我们常用的方式可能是某一个系统提供一个接口,另一个系统调用该接口来传递数据,从而满足业务需...
  • ActivityMQ安装部署

    千次阅读 2018-02-27 19:36:28
    ActivityMQ是IBM提供的一个开源的MQ工具,也是目前开发环境中比较常用MQ,尤其是对于为银行等金融机构开发的同事,我们知道监管机构使用的MQ队列都是IBM的供应商,如果开发时使用Rabbit或者Rocket南面上线或者生产...
  • 常用消息中间件比较

    2019-08-22 17:25:58
    导语 : 消息队列是分布式系统中重要的...一、消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时...
  • 1、什么是MQ 消息队列(MQ)是一种应用程序对应用程序的通信方法。...比如:A系统和B系统之间要进行消息传递,我们常用的方式可能是某一个系统提供一个接口,另一个系统调用该接口来传递数据,从而满足业务需...
  • Websphere MQ

    2012-10-08 13:54:37
    消息分片和消息分组是在 WebSphere MQ 的编程中处理大消息的常用手段,到底采用哪种方式比较合适,需要根据实际的需求而定。如果大消息需要分割成有实际业务意义的一批小消息,那么采用消息分组比较合适;反之,如果...
  • 现在常用的的MQ有ActiveMQ,RabbitMQ,RocketMQ,ZeroMQ,Kafka。网上比较这几种MQ的文章有很多,大家可以去参考下。我下面就给大家简单说下。 公司选型MQ主要就在于稳定性、社区活跃性、功能性(当然也不是功能越多...
  • 消息队列mq

    2020-07-23 11:47:08
    常用的消息队列服务有:kafka、rocket mq。 主要解决应用耦合,异步消息,流量削锋等问题; 很好奇我为什么要学习mq?因为工作需要。 使用场景是这样的:平台服务有一个打包服务,这个打包服务比较耗费cpu, ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 115
精华内容 46
关键字:

常用mq比较