Kafka与RabbitMQ的区别?

三世轮回 提交于 2020-08-05 02:00:39

1、Kafka和RabbitMQ在吞吐量的区别是什么?

一般情况下,RabbitMQ单机的吞吐率在万级别之内,而Kafka单机则比RabbitMQ高出一两个量级,可以达到十万级别,甚至可以达到百万级别。(/但吞吐率是受到硬件层面的限制的。比如网卡的宽带,如果宽带为1gb,要达到百万的吞吐量就相当于1gb / 8 / 100w = 134b,相当于每次的消息体大小不能超过13b,否则就不算是百万的吞吐量了/)

这是RabbitMQ和Kafka在吞吐量之间的区别。

2、Kafka和RabbitMQ在消息可靠性的区别是什么?(/消息的可靠性:是指对消息不丢失的保障程度;消息的可用性:是指无故障运行时间的百分比,通常用几个9来衡量。/)

使用消息中间件在传输消息的过程中会导致消息的丢失,也就是可靠性是每个中间件都会面临的问题;同时又会涉及到消息的可用性。

从微观方面来说,分布式系统结构是一致性协议理论的应用实现,对于消息中间件的可靠性和可用性吧区别的话可以根据它们的一致性协议来看;

-Kafka采用的是类似PacificA的一致性协议,通过ISR (In-Sync-Replica) 来保证多副本之间的同步,并且支持强一致性语义(通过acks实现)。(/类似Pacific的一致性协议和ZAB都是基于实用主义,把 log replication日志赋值 和 Leader election Leader选举分开,而Paxos算法则是将两个问题合在一起想/)

-RabbitMQ则是通过镜像环形队列实现多副本以及强一致性语义。

3、RabbitMQ和Kafka在扩展能力的区别是什么?(可用性方面)

消息中间件的扩展能力是指能够增强其可用能力及范围;

比如RabbitMQ可以支持多种消息协议就是它扩展能力的一种体现,是RabbitMQ在其基础上添加了一个插件来扩展实现的。

而Kafka在集群部署上,例如LinkedIn实践介绍中就说过有部署超过了千台设备的Kafka集群,这就是Kafka在扩展能力方面的体现。

4、应用场景

Kafka 设计之初是为日志处理而生,给人们留下了数据可靠性要求不要的不良印象,但是随着版本的升级优化,其可靠性得到极大的增强, 就目前而言,在金融支付领域使用 RabbitMQ 居多 。

而在日志处理、大数据等方面 Kafka 使用居多。

 

业界内主要的 消息队列中间(消息中间件)件常用的主要有:RabbitMQ、Kafka、ActiveMQ、RocketMQ、ZeroMQ等等。

分布式系统:是由多台计算机主机组成的一个集合,在用户的角度看来是一台单独的主机上的一个分布式系统;但不是说硬件层面的全部组成一个集合,只是涉及多台计算机的部分硬件;它是基于网络的基础上建立的软件系统。(我的第一句话可以类比进行理解:例如阿里巴巴的分布式系统是由多台(十几万台)计算机组成的,在我们的角度看来它好像就只是一台巨大的主机,其实它是由多个主机组成的。第二句话类比理解:这些计算机组成了分布式系统但不是全部都只能进行对系统方面进行运转,它们可以用在其他方面例如存储其他的数据等。第三句类比理解:十几万台计算机是建立在网络上的软件系统,通过网络通信和连接组成一个庞大软件系统来对庞大的用户提供服务)

消息中间件是指:利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式的环境下提供应用解耦、异步通信、流量削峰等等。

 

RabbitMQ是什么?——RabbitMQ是一个消息队列,主要作用是解耦、异步、削峰、消息分发等等。是一个消息中间件。

Kafka是什么?——是基于Zookeeper协调的一个分布式消息系统,是一个高吞吐量的分布式发布和订阅消息系统,以水平扩展和高吞吐率而被广泛使用。

 

对消息中间件可以从多个方面进行比较,功能维度(同时又分为多个子维度)、性能维度(有时候比功能维度更加重要)、可靠性+可用性、运维管理、社区力度及生态发展。

面试的时候回答性能、可靠可用性、重量级即可。重量级是什么?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!