Kafka和RabbitMQ比较之基础知识部分

Kafka和RabbitMQ比较之基础知识部分,第1张

1LinkedIn起初设计的基于Zookeeper协调的分布式消息系统。将消息持久化到磁盘中。

2一个典型的 Kafka 体系架构包括若干 Producer、若干 Broker、若干 Consumer,以及一个ZooKeeper集群。

3Producer:生产者,消息发送方。

4Consumer:消费者,消息接收方,针对消息做业务处理。

5Broker:服务代理节点,实际是Kafka服务器实例,接收Producer发送的消息,再把消息转发给Consumer。

6Zookeeper,控制Producer向哪个Broker发送消息以及Consumer从哪个Broker接收消息。

7发送的消息又有几个重要概念,Topic主题,Partition分区。

8Topic主题,一个逻辑概念,每条消息必须有且只有一个主题。

9Partition分区:在同一个主题下,可以设置一个或者多个分区,来增加消息处理的并发度。另外注意一个消息在同一个分区内是有序的,但是如果并发下发送消息,多个分区的消息顺序无法保证。

10分区副本:分区如果设置了多副本,提升了容灾能力,则同时会有Leader副本处理消息读写请求,follower副本负责同步leader副本的消息,如果leader副本出现问题,则会选择一个follower副本成为新的leader副本。一般情况下,副本不在同一个Broker中处理,但是如果有三个Broker,但是设置了4个副本,那么肯定是有2个副本在同一个Broker中的,实际这种设计意义不大。

1基于AMQP(Advanced Messaging Queuing Protocol)高级消息队列协议

2一个典型的 RabbitMQ体系架构(这些实际也是AMQP的设计)包括Publisher、Message、Exchange、Binding、Consumer、Queue、Broker。

3Producer:生产者,消息发送方。

4Message:具体的发送的消息内容,包括消息头和消息体。

5Exchange:交换器,用来接收生产者发送的消息,并把消息路由给服务器中的队列。

6Binding:绑定交换器和队列。就是决定交换器过来的消息发送到哪个队列。

6Queue:消息队列,用来保存消息直到发送给消费者,消息的容器,一个消息进入队列后,一直等待直到消息被取走。

7Consumer:消费者,从消息队列中取出消息。

8Broker:服务代理节点,实际是RabbitMQ服务器实例。

9Exchange又分为四类:direct,交换器通过消息的routing key判断,如果与Binding的binding key一致,交换器就将消息发送到对应的队列;fanout,消息发送到所有交换器绑定的队列上去,类似于广播;topic,这种是通过某些规则匹配到不同的队列中,比如routing key是cntest和cnuat,bingding key规则为cn#的队列就可以收到两个消息,bingding key为#test的队列就只能收到routing key为cntest的消息;header用的很少,有两种,完全匹配和匹配任意,也就是header中key value都匹配的队列才可以收到或者任意key value匹配就可以收到消息。

10为了保证消息的可靠性,可以设置queue,exchange, message持久化到磁盘,但是有时候需要先存储到cache,一段时间后才写入到磁盘中。

1使用方面,在java项目中Kafka需要单独引用kafka的maven包,而RabbitMQ由于基于AMQP协议,Springboot直接引入spring-boot-starter-amqp这个包即可,不用单独引用RabbitMQ的包,任何符合AMQP协议的消息中间件都可以通过spring-boot-starter-amqp使用。

2消息类型方面,RabbitMQ的支持四种复杂的类型,direct,fanout,topic和header模式。Kafka只能通过Topic和partition来控制消息的发送类型。

3服务器方面,RabbitMQ单独安装或者集群安装即可,不需要再安装其他组件,Kafka则需要Zookeeper配合使用,Producer和Consumer才能找到对应的Broker。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10769939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存