这是陈东景于2021年8月29日下午16点原创作品,转载请标明出处!!!!

        在进行软件设计的过程中,如果软件设计业务上存在需要短时间内处理大批量的信息,又需要能保证软件能正常运行(保证软件的高可靠和高可用)。因为大批量(几十万,几百万级别的数据或者消息需要同一个时间处理),软件的IO过高,会导致软件运行阻塞或者消耗内存过高而崩溃,甚至是宕机。消息队列的概念被提了出来,通过缓存消息的模式,进行生产和消费。通过异步处理的方式,解耦这种短时间内出现大批量需要处理消息的场景。目前我们使用到的比较场景的消息队列有RabbitMq 、AtiveMQ、RocketMQ和Kafka。从单词字面上,我们可以看出前三者很明确的说他们是一种类型的MQ,而Kafka并没有说自己的是KafkaMQ。这里是非常有趣的事情。本贴今天就主要讲讲RabbitMq与Kafka的使用场景和区别。

那什么是RabbitMq和Kafka呢。

RabbitMq:RabbitMq是遵循AMQP协议,使用erlanng语言开发的一款用在实时的对可靠性要求比较高的消息传递上一种处理软件。从Rabbit上我们可以看出这是比如的手法,因为兔子一蹦一跳的,给人一种弹跳非常快的感觉。俗话说跑的比兔子还快。这个单词已经足够说明RabbitMq处理消息之快。

RabbitMq 的组成:交换器(exchange),队列(queue)、binding(绑定路由)、通道(Channels)、routing(路由)。

Kafka:kafka是Linkedin于2010年12月份开源的消息发布/订阅系统,主要用于处理活跃的流式数据,或者大数据量的数据处理上,横向扩展好,吞吐量大(几十万甚至百分级别)。常用日志采集,数据采集上。从kafka的特点上,kafka更像一套消息处理系统,或者是MQ的一种拓展。所以Kafka不叫KafkaMQ也是有道理的。而RabbitMq,更精确定义为消息中间件。这也是两者从定义上比较明显的区别。

Kafka的组成: Topic (主题)、Partition(分区) 、Offset(偏移) 、Replica(副本、)、 Message(消息)、  LogSegment(日志段 )Producer(消息生产者) Consumer(消息消费者 )

       单从他们的组成上我们就可以看出RabbitMq和Kafka的实现原理其实完全不同,差异巨大。但是之所以把他们放在一起讨论。他们的基本模式都是生产者/消费者的模式。其他的就是各自有各自的优点。所以RabbitMq和kafka的使用区别还是很大的。

下面讲讲他们的主要特性区别:

(1)RabbitMq的消息消费是无法保证有序的。而Kafka的实现原理可以保证消息消费有序。

(2)RabbitMq的消息被成功消费后,会被删除掉。而kafka是不管消费状态的。kakfa里的消息可以设置过期时间后删除。消息可以反复被消费。

(3)RabbitMq是不易做横向扩展的。而kafka可以做很好的横向扩展,性能处理上可达到百万级别。

(4)RabbitMq是 一个消费者同一时刻只能消费一个消息,消费失败就就丢回队列。而kafka,多个消费者可以消费同一个消息还可以重复消费,不做消费状态标志。

比较上了上面几点差异。我们可以看出kakfa更像一个数据库的功能。

这里就简单讲一下RabbitMq与Kafka的使用区别。这选择消息中间的业务场景上,希望对你们有参考作用。


 

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐