rabitmq,redis以及kafuka作为消息队列的区别[通俗易懂]

rabitmq,redis以及kafuka作为消息队列的区别[通俗易懂]kafukakafuka涉及到的名词词意解释:Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲、异步通信、汇集日志、系统解耦等方面。相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时,还提供了超一流的读写性能。针对Kafka性能方面进行简单分析,相关数据请参考:https://segmentfault.com/a/119000000398…

大家好,又见面了,我是你们的朋友全栈君。

kafuka

kafuka涉及到的名词词意解释:

Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲、异步通信、汇集日志、系统解耦等方面。相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时,还提供了超一流的读写性能。

针对Kafka性能方面进行简单分析,相关数据请参考:https://segmentfault.com/a/1190000003985468,下面介绍一下Kafka的架构和涉及到的名词:

Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上。

Partition:是Kafka中横向扩展和一切并行化的基础,每个Topic都至少被切分为1个Partition。

Offset:消息在Partition中的编号,编号顺序不跨Partition。

Consumer:用于从Broker中取出/消费Message。

Producer:用于往Broker中发送/生产Message。

Replication:Kafka支持以Partition为单位对Message进行冗余备份,每个Partition都可以配置至少1个Replication(当仅1个Replication时即仅该Partition本身)。

Leader:每个Replication集合中的Partition都会选出一个唯一的Leader,所有的读写请求都由Leader处理。其他Replicas从Leader处把数据更新同步到本地,过程类似大家熟悉的MySQL中的Binlog同步。

Broker:Kafka中使用Broker来接受Producer和Consumer的请求,并把Message持久化到本地磁盘。每个Cluster当中会选举出一个Broker来担任Controller,负责处理Partition的Leader选举,协调Partition迁移等工作。

ISR(In-Sync Replica):是Replicas的一个子集,表示目前Alive且与Leader能够“Catch-up”的Replicas集合。由于读写都是首先落到Leader上,所以一般来说通过同步机制从Leader上拉取数据的Replica都会和Leader有一些延迟(包括了延迟时间和延迟条数两个维度),任意一个超过阈值都会把该Replica踢出ISR。每个Partition都有它自己独立的ISR。

  1. 负载均衡:kafka采用zookeeper对集群中的broker、consumer进行管理,可以注册topic到zookeeper上;通过zookeeper的协调机制,producer保存对应topic的broker信息,可以随机或者轮询发送到broker上;并且producer可以基于语义指定分片,消息发送到broker的某分片上。
  2. Scale out:支持在线水平扩展。
  3. kafka的broker支持主备模式。
  4. 性能:kafka具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
  5. 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
  6. 同时支持离线数据处理和实时数据处理。

更多关于Kafka的数据,参考:https://segmentfault.com/a/1190000003985468

RabbitMQ

  1. RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发。
  2. RabbitMQ实现了Broker构架,这意味着消息在发送给客户端时先在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。
  3. RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。
  4. rabbitMQ以broker为中心;有消息的确认机制,可靠性比较高。
  5. 可用性方面,rabbitMQ支持miror的queue,主queue失效,miror queue接管。

  6. rabbitMQ的负载均衡需要单独的loadbalancer进行支持。

redis

redis是一个基于Key-Value对的NoSQL数据库,开发维护很活跃。虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用

  1. redis的list数据结构可以实现轻量级的消息队列,处理少量消息时读写性能很高,当写入消息数量较大时(单机本地测试10k左右)写入性能会大大降低,读取性能受影响不大,依然很优秀。
  2. 比较适合在Web场景下作为队列服务使用
  3. redis作为消息队列不能实现消息的分类,还有没有确认机制,知道接收消息的消费者执行成功与否
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131840.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HTTP-500错误的常见原因与分析「建议收藏」

    HTTP-500错误的常见原因与分析「建议收藏」前言:最近使用阿里云windows2008R2云服务器搭建网站QQ互联接入(第三方登录)服务的过程中,使用了phpcmsV9提供的V9.6.3压缩包内的.htaccess文件。几经辗转,仍然没能解决过程中遇到的问题,问了一些技术大咖,有人说可能是500错误。以前知道有400报错,还真不知道有个500错误,所以上网查询之后,觉得应该小结一篇。1.造成500错误常见原因有:ASP语法出…

    2022年6月13日
    30
  • Android2017-2018最新面试题(3-5年经验个人面试经历)

    2017-2018最新Android面试题版权声明:本文为博主原创文章,未经博主允许不得转载。原文链接:http://blog.csdn.net/huangqili1314/article/details/72792682大家好,在跟大家讲述自己的面试经历,以及遇到的面试题前,先说说几句题外话。接触Android已经3年,在工作中遇到疑难问题总是在网上(csdn大牛博客,stack…

    2022年4月10日
    43
  • arduino mpu9250_arduino模拟输出

    arduino mpu9250_arduino模拟输出Arduino有多种通信方式,每一种通信方式都有相对应的类库来支持:1)硬件串口通信——HardwareSerial类库2)软件模拟串口通信——SoftwareSerial类库3)IIC总线的使用——Wire类库4)SPI总线的使用——SPI类库 MPU6050的数据接口用的是I2C总线协议,因此我们需要Wire类库的帮助来实现Arduino与MPU6050之间的通…

    2025年6月7日
    3
  • 浏览器主页被劫持成360导航.每次打开都是360导航https://hao.360.cn/?src=lm&ls=n36a7f6a197

    浏览器主页被劫持成360导航.每次打开都是360导航https://hao.360.cn/?src=lm&ls=n36a7f6a197这里有个误区:(本人亲测有效)大家都以为是篡改了主页,其实你去IE的设置里去看,主页没变化,或者说已经被锁定不能修改了。问题出在启动项的参数上—你试试在桌面IE的图标点击属性,看目标下边,正常的只有EXE文件的路径,但是很可能你的EXE文件路径后边跟上了一串网址字符,我的就是这样:"C:\ProgramFiles\InternetExplorer\iexplore.exe" htt…

    2022年7月14日
    20
  • iOS PerformSelector 遗漏问题

    iOS PerformSelector 遗漏问题一基础用法performSelecor响应了OC语言的动态性:延迟到运行时才绑定方法。当我们在使用以下方法时:[objperformSelector:@selector(play)];[objperformSelector:@selector(play:)withObject:@"李周"];[objperformSelector:@selector(play:with:)…

    2025年7月5日
    3
  • PL/SQL语句_sql语句declare用法

    PL/SQL语句_sql语句declare用法因为SQL只能访问、操作数据库,却不能进行程序设计,而OraclePL/SQL是一种高级数据库程序设计语言,该语言专门用于对ORACLE数据库进行访问,并且可以进行过程处理。*注:在PL/SQL中只能用SQL语句中的DML部分,不能用DDL部分,如果要在PL/SQL中使用DDL(如CREATEtable等)的话,只能以动态的方式来使用。**1.DML(datamanipulationlanguage)数据操纵语言:比如SELECT、UPDATE、INSERT、DELETE

    2022年8月20日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号