常见的Message Queue对比

RabbitMQ

RabbitMQ是使用Erlang编写的一个开源消息队列,本身支持很多协议:AMQP、XMPP、SMPT、STOMP,也正因为如此,它非常重量级,更适合于企业级的开发。同时实现了Broker架构,这意味着消息在发送给客户端时现在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。

Redis

Redis是一个基于Key-Value键值对的NoSQL的数据库,开发维护很活跃。虽然他是一个key-value的数据库存储系统,但他本身支持MQ功能,所以完全可以当做一个轻量级的消息队列来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每十万次记录一次执行时间。测试数据为128Bytes、512Bytes。1k和10k四个不同大小的数据。实验表明:入队时当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10k,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能远低于Redis。

ZerMQ

ZerMQ号称最快的消息队列系统。尤其针对大吞吐量的需求场景。ZerMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对ZerMQ能够应用成功的挑战。ZerMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序将扮演这个服务器角色。你只需要简单的引用ZerMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。但是ZerMQ仅提供非持久性的队列,也就是说,如果宕机,数据将会丢失。其中,Twwitter的Storm0.9.0以前的版本中默认使用ZerMQ作为数据流的传输。

ActiveMQ

ActiveMQ是Apache下的一个子项目。类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。

Kafka中专业术语的解释

broker

Kafka集群包含一个或者多个服务器,服务器节点称为broker。

Topic

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。

Partition

topic中的数据分割为一个或多个partition。每个topic至少有一个partition。每个partition中的数据使用多个segment文件存储。partition中的数据是有序的,不同partition间的数据丢失了数据的顺序。如果topic有多个partition,消费数据时就不能保证数据的顺序。在需要严格保证消息的消费顺序的场景下,需要将partition数目设为1。

Producer

生产者即数据的发布者,该角色将消息发布到Kafka的topic中。broker接收到生产者发送的消息后,broker将该消息追加到当前用于追加数据的segment文件中。生产者发送的消息,存储到一个partition中,生产者也可以指定数据存储的partition。

Consumer

消费者可以从broker中读取数据。消费者可以消费多个topic中的数据。

Consumer Group

每个partition有多个副本,其中有且仅有一个作为Leader,Leader是当前负责数据的读写的partition。

Follower

Follower跟随Leader,所有写请求都通过Leader路由,数据变更会广播给所有Follower,Follower与Leader保持数据同步。如果Leader失效,则从Follower中选举出一个新的Leader。当Follower与Leader挂掉、卡住或者同步太慢,leader会把这个follower从“in sync replicas”列表中删除,重新创建一个Follower。

走进大数据丨 Kafka(三)

相关文章:

  • 2022-01-09
  • 2021-12-27
  • 2021-05-08
  • 2021-12-13
  • 2021-04-11
  • 2021-11-07
  • 2021-04-07
猜你喜欢
  • 2021-11-01
  • 2022-01-20
  • 2021-04-16
  • 2021-07-09
  • 2021-04-17
  • 2022-01-05
  • 2021-10-18
相关资源
相似解决方案