一、什么是kafka,什么是rabbit

  Kafka是由Scala语言开发的一种分布式流处理框架,主要用于处理活跃的流式数据,以及大数据量的数据处理。它采用发布-订阅模型,支持消息的批量处理,数据的存储和获取是本地磁盘顺序批量操作,这使得消息处理的效率较高,吞吐量较大。

  RabbitMQ则是由Erlang语言开发,主要用于实时的、对可靠性要求较高的消息传递。它采用AMQP(高级消息队列协议)进行消息的传递,并且有一个broker(消息代理)作为中心,可以确认消息的传递。RabbitMQ支持消息的可靠的传递,支持事务,但并不支持批量操作,基于存储的可靠性的要求存储可以采用内存或硬盘,但吞吐量相对较小。


二、rabbit和kafka的特性

(1)Kafka的特性:

  1. 大规模数据处理:Kafka的吞吐量巨大,其数据存储和获取是本地磁盘的批量处理,可以达到百万/s。
  2. 持久性消息存储:Kafka是一个持久性消息存储,在数据写入后即使出现系统崩溃,也能够保证数据的完整性。
  3. 可靠性的支持:Kafka的broker支持主备模式,为数据的安全性提供了保障。

(2)RabbitMQ的特性:

  1. 消息确认机制:RabbitMQ具有生产者confirm机制以及消费者的消息应答机制ack,可以保证消息的可靠传递。
  2. 消息顺序性:在RabbitMQ中,在一个队列里的消息是严格顺序的,按照先进先出。
  3. 持久化支持:RabbitMQ支持持久化,可以把消息写入到磁盘中,保证数据在内存不足时也不会丢失。
  4. 高可用性:RabbitMQ使用了MirrorQueue的机制,可以将重要队列“复制”到集群中的其他broker上,保证这些队列的消息不会丢失。

(3)二者的相同点在于都是为了解决消息的传递问题,但在很多方面也有显著的不同:

  1. 架构模型:RabbitMQ遵循AMQP协议,由Exchange、Binding、queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费。而Kafka遵从一般的MQ结构,以producer、broker、consumer为中心。
  2. 消息确认机制:Kafka并不具有应答机制,而RabbitMQ具有生产者confirm机制以及消费者的消息应答机制ack。
  3. 消息的顺序:在RabbitMQ中,在一个队列里面,rabbitmq的消息是严格顺序的,按照先进先出。然而在Kafka中,虽然每个partition中的消息是有序的,但是因为Kafka将数据分布在不同的partition中,所以总体是无序的。
  4. 吞吐量:在不使用ACK机制的情况下,RabbitMQ的QPS可以达到6W+,而在双方使用ACK机制的情况下,QPS降到了1W+。与此相反的是,Kafka具有巨大的吞吐量,数据的存储以及获取是本地磁盘的批量处理,可以达到百万/s。
  5. 可靠性: RabbitMQ使用了MirrorQueue的机制,也可以做到多个机器进行热备。而Kafka的主备模式提供了另外一种可靠性保障。

总的来说,RabbitMQ和Kafka在特性和应用场景上各有优势和劣势。在选择使用时需要考虑到自身需求以及两者的特性和限制。


三、两者使用场景,如何才能方便应用

  我们首先要明白kafka不是消息中间件的一种实现,他是分布式流系统,他的定位就是来处理日志及大数据方面,吞吐量无疑是很高的。而rabbit他的push模式就导致了他得延时是较低的,但是场景上只支持主从,所以在本身的设计上就是比较小的,cpu消耗自然就更低。

从消息顺序来讲

Kafka可以保证在单个分区中的消息顺序是有序的,即按照消息的写入顺序进行消费。但是,当使用多个分区时,就不能保证消息的顺序了,因为每个分区都是独立的,消息的写入顺序和消费顺序都是分区内部的顺序,与其他分区无关,如果需要保证消息的顺序,可以将所有的消息写入到单个分区中,或者使用单个消费者或消费者组来消费消息。

而对于RabbitMQ,如果是单个消费者,那么它先进先出的机制,可以保证消息的有序性,但是如果有多个消费者从同一个队列中读取消息,那么就难以保证消息的顺序。例如,一个消费者在处理消息后可能由于失败等原因将消息放回队列,这样另一个消费者就可以继续处理它,从而可能导致消息的顺序错乱。这种情况下,可以通过限制消费者并发数=1的方式来保证消息的有序性。

(1)Kafka的使用场景和例子:

  1. 大规模数据流处理:Kafka可以处理大规模的数据流,并且具有高吞吐量和持久性特性,可以承受大量的数据。例如,一个大型的网络应用需要收集来自数百台服务器的日志数据,并将这些数据传递给分布式数据处理系统(如 Apache Spark)进行实时数据分析和仪表板展示。 Kafka可以作为数据枢纽,服务器将日志消息发布到Kafka Topic中,而 Spark 则通过消费者从 Kafka 中订阅和处理这些消息。
  2. 实时数据流处理:Kafka可以支持实时的数据流处理,并且具有低延迟的特性。例如,电商平台需要实时处理订单和库存消息,当有新订单生成时,需要通知库存管理系统进行库存调整。 Kafka可以用于传递这些实时的订单和库存消息,并支持低延迟的处理。

(2)RabbitMQ的使用场景和例子:

  1. 消息路由:RabbitMQ可以通过消息路由的方式将消息发送到不同的消费者或者消费者组中。例如,一个电子商务平台需要处理订单和库存管理,当有新订单生成时,需要通知库存管理系统进行库存调整。 RabbitMQ可以将订单消息路由到库存管理系统,并通知其进行库存调整。
  2. 消息持久化:RabbitMQ可以保证消息的持久化存储,以便在系统故障时能够恢复消息。例如,在电子商务平台中,如果订单处理系统出现故障,RabbitMQ可以保证订单消息不被丢失,并在系统恢复后继续处理。

   总体来说,Kafka更适合大规模的数据流处理和实时数据处理场景,而RabbitMQ更适合消息路由和持久化存储场景,要选择适合自己项目的架构。


四、总结

  Kafka和RabbitMQ都是用于消息传递的工具,它们具有不同的特性和应用场景。Kafka适合处理大规模的实时数据流,并具有高吞吐量和持久性特性,而RabbitMQ更适合消息路由和持久化存储,并具有消息确认机制和严格的消息顺序。在选择使用时,需要考虑到自身需求以及两者的特性和限制。

  PS:可以结合使用:虽然Kafka和RabbitMQ具有不同的特性和应用场景,但它们可以结合使用,以获得更好的效果。例如,可以使用Kafka来处理大规模的实时数据流,并使用RabbitMQ来处理消息路由和持久化存储

  本文简述一些特性以及区别,但是我们要应用于生产上的项目和结构还是要去看官方文档,文档里都有详细的方案,从而助我们更好的分辨需要用什么工具。本文如果有什么错误点欢迎大家指正。

Kafka与RabbitMQ的更多相关文章

  1. Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能-转自阿里中间件

    引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. ...

  2. 消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局

    一.前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦 ...

  3. IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?

    1.前言 在IM这种讲究高并发.高消息吞吐的互联网场景下,MQ消息中间件是个很重要的基础设施,它在IM系统的服务端架构中担当消息中转.消息削峰.消息交换异步化等等角色,当然MQ消息中间件的作用远不止于 ...

  4. 转 Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和优势

    Kafka.RabbitMQ.RocketMQ等消息中间件的对比 —— 消息发送性能和优势 引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前 ...

  5. Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能

    引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. ...

  6. 在服务端处理同步发送小消息的性能上Kafka>RocketMQ>RabbitMQ

    在发送小消息的场景中,三个消息中间件的表现区分明显: Kafka的吞吐量高达17.3w/s,远超其他两个产品.这主要取决于它的队列模式保证了写磁盘的过程是线性IO.此时broker磁盘IO已达瓶颈. ...

  7. Kafka、RabbitMQ、RocketMQ消息中间件的对比

    引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,目前对Kafka.RabbitMQ.RocketMQ这三个消息中间件做下对比分析. - - k ...

  8. Kafka、RabbitMQ、RocketMQ、ActiveMQ 17 个方面综合对比

    本文将从,Kafka.RabbitMQ.ZeroMQ.RocketMQ.ActiveMQ 17 个方面综合对比作为消息队列使用时的差异.(欢迎加入Java程序员群:630441304,一起学习交流会) ...

  9. 转:Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能 (阿里中间件团队博客)

    from: http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/ 引言 分布式 ...

  10. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列

    原文:https://mp.weixin.qq.com/s/lpsQ3dEZHma9H0V_mcxuTw 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 七.集群 ...

随机推荐

  1. vst实例(2) 创建VST

    前面我们知道,创建一个虚拟树,应该首先告知VST节点数据的大小(即nodedatasize),其实在创建树结构时,这一点并不是必须的,而是如果你需要让VST的每一个节点能指向一定的数据,从而在执行树的 ...

  2. 第一课 使用开发者模式快速入门 Odoo 13

    Odoo提供了一个快速应用开发框架,非常适合创建商业应用.这类应用通常用于保留业务记录,增删改查操作.Odoo 不仅简化了这类应用的创建,还提供了看板.日历.图表等视图的丰富组件,用于创建好看的用户界 ...

  3. Kubernetes(k8s)一次性任务:Job

    目录 一.系统环境 二.前言 三.Kubernetes Job简介 四.创建一次性任务job 4.1 创建一个简单任务的job 4.2 创建需要执行多次的job任务 五.测试job失败重试次数 六.j ...

  4. 混沌演练状态下,如何降低应用的 MTTR(平均恢复时间)

    在企业业务领域,锦礼是针对福利.营销.激励等员工采购场景的一站式解决方案,包含面向员工.会员等弹性激励SAAS平台.由于其直接面向公司全体员工,其服务的高可用尤其重要,本文将介绍锦礼商城大促前夕,通过 ...

  5. 前端树形结构图组件 tree组件,可拖拽移动,点击展开收缩,无限添加子集

    快速实现树形结构图组件 tree组件,可拖拽移动,点击展开收缩,无限添加子集; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=1 ...

  6. [随笔]记一此更新win10后mysql服务消失的问题

    十几天前系统自动更新 没在意 几天前用php连mysql的时候 报错 Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] 由于目标计算 ...

  7. 前端Vue自定义带历史记录的搜索框组件searchBar 支持搜索输入框清空 搜索历史存储记录清除

    前端Vue自定义带历史记录的搜索框组件searchBar 支持搜索输入框清空 搜索历史存储记录清除,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/p ...

  8. vue3中使用defineExpose报TS-2339

    开头先把错误贴上 src/hooks/usePageSearch.ts:9:27 TS2339: Property 'getPageData' does not exist on type '{ $: ...

  9. python学习笔记:第九章异常

    1.1 异常是什么 python使用异常对象来表示异常状态,并在遇到错误时引发异常.异常对象未被处理,程序将终止并显示一条错误信息. 我们可以通过各种方法引发和捕获错误,并采取对应措施. 1.2 将& ...

  10. Day-4 路由匹配源码

    1. 请求来了会走WSGIHandler的call方法 convert_exception_to_response也是进行封装 真的handler是从下图定义 resolver = URLResolv ...