0
点赞
收藏
分享

微信扫一扫

消息队列以及非常牛的kafka

柠檬的那个酸_2333 2022-04-04 阅读 88
架构

目录

概念

例子比较

传统串行服务

引入消息队列

事务

socket

MQ的两种流派

1、有broker

2、无broker

kafka的基本概念

 kafka的安装

关于消息队列的思考:


1、对计算机有初步了解的人都知道,队列是个什么玩意,它就像一个管道一样先进先出。

那么我们来了解一下消息队列是个啥玩意吧!!!

概念

2、Message Query(MQ),消息队列中间件,很多初学者认为,MQ通过消息的发送和接受来实现程序的异步和解耦,mq主要用于异步操作,这个不是mq的真正目的,只不过是mq的应用,mq真正的目的是为了通讯。他屏蔽了复杂的通讯协议,像常用的dubbo,http协议都是同步的。这两种协议很难实现双端通讯,A调用B,B也可以主动调用A,而且不支持长连接。mq做的就是在这些协议上构建一个简单协议——生产者、消费者模型,mq带给我们的不是底层的通讯协议,而是更高层次的通讯模型。他定义了两个对象:发送数据的叫做生产者,接受消息的叫做消费者,我们可以无视底层的通讯协议,我们可以自己定义生产者消费者。

例子比较

我们以淘宝订单为例,比较传统串行服务和引入消息队列多的区别

传统串行服务

 如果我们想买一个东西,那么需要经过以上的几个步骤,完成之后,才会给我们发送成功信号,消耗的时间是长的,并且十分容易引发错误,当网络波荡的时候,就会导致任务失败。

传统串行服务的优点:系统架构简单,排查错误比较容易

传统串行服务的缺点:1.耦合性太强 2.系统吞吐量不大,耗时多

引入消息队列

 引入消息队列后,当在处理新订单是,只要消息发送到消息队列上,我们客户端就能收到订单成功的消息。剩下的处理操作,由消息队列来处理。大大减少了耗时。并且后面的操作之间也不会相互影响。因为他们进行的异步操作。这就降低了耦合性,提高了性能。

这里我们要思考一个问题:

如何解决重复通知,一个服务订阅多个队列的问题?

使用分布式锁,当一个消息队列被一个服务订阅以后,就会给消息队列加上锁,其他的服务就不能在订阅了。

事务

只要涉及到消息队列,肯定要处理事务问题。

事务:原子性,我所有的动作要么都执行,要么都不执行。

比如说:张三给我转100元,可以分成两部分,张三账户减100,我账户加100

socket

1、socket用于即时通讯。socket是长连接。

2、传统的http请求,随着服务端的返回给客户端消息,两者之间的关联就消失了,所以服务端想要主动联系客户端就得靠轮询的方式,但是这种轮询比较耗费性能的,既要消耗客户端性能,又消耗服务器资源,于是有了长连接的概念。

MQ的两种流派

1、有broker

broker是一个中转站,为了将消息放到不同的队列里。存放方式有两种:

(1)消息来了主动放

(2)等待消息请求

有broker的也分为两类

       1、重topic

        kafka:全球消息处理性能最快的一款mq

        rocket:阿里内部的一个大神根据kafka的执行原理手写的,性能与kafka差不多,但是功能   上比kafka要多,比如说顺序消费。

        2、轻topic       

        可以没有topic,topic只是一种中转模式

        rabbitmq

2、无broker

        zeromq:没有使用broker,是直接使用socket进行通信。

kafka的基本概念

kafka是一个分布式的分区的消息,提供消息系统应该具备的功能。

名称

解释

broker

消息中间件处理节点,一个broker就是一个kafka节点,多个broker构成一个kafka集群。

topic

kafka根据消息进行分类,发布到kafka的每个消息都有一个对应的topic

producer

消息生产(发布)者

consumer

消息消费(订阅)者

consumergroup

消息订阅集群,一个消息可以被多个consumergroup消费,但是一个consumergroup只有一个consumer可以消费消息。

 kafka的安装

可以来看这篇博客

http://t.csdn.cn/LYJ3b

关于消息队列的思考:

了解了消息队列,现在让我们来思考一个消息队列的问题,也是经典的消息堆积问题,比如说客户端每秒生产10000条消息,但是消费者每秒消耗100条。

-------------------------------------------------------------

|

|

|
|

|

答案:

1、增加消费者,既然消费不了,那么就多找几个消费者,来完成消费

2、限流,限制客户端每秒产生消息的数量。

举报

相关推荐

0 条评论