kafka的使用1:消息队列的通信模式

1 篇文章 0 订阅
1 篇文章 0 订阅

目录

一、点对点模式

二、发布订阅模式


消息队列的通信模式主要有两种:

  • 点对点模式
  • 发布订阅模式

一、点对点模式

如下图为点对点模式。点对点模式通常是基于拉取或者轮询的消息传送模型,这个模型的特点是发送到队列的消息被一个且只有一个消费者进行处理。生产者将消息放入队列后,由消费者主动的拉取消息进行消费。

消息生产者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持存在多个消费者,但是对一个消费者而言,只会有一个消费者可以消费。

点对点模型的优点是消费者拉取消息的频率可以由消费者自己控制。但是队列中是否有消息需要消费,消费者是无法自己感知的,因此在消费端需要额外的线程去监控。

举个例子,我们平时去食堂吃饭。食堂的师傅是生产者,饭盆里的饭是消息,我们这些飞奔向食堂的人就是消费者。食堂师傅把饭做好防盗盆里,吃货们根据自己的需要去盆里打饭。但是盆里到底有没有饭呢?就需要有人专门来负责,没有饭的时候通过广播或者微信来告诉我们没有饭了。

二、发布订阅模式

下图为发布订阅模式。发布订阅模式是一个是一个基于消息传送的模型。在这个模型中,可以有多种订阅者。生产者把消息放入队列后,队列会将消息推送给订阅该消息的消费者,这个过程类似于我们经常用到的微信公众号。由于消费者是被动的接收推送,因此就不需要感知队列中是否有待消费消息了。

消息生产者(发布)将消息发布到队列中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。

但是这样会存在一个问题,什么问题呢?

就是不同的消费者处理消息的能力是不一样的(机器性能等影响),但是消息队列却无法感知消费者消费的速度。所以推送的速度就成了发布订阅模式的问题。

假设三个消费者处理速度分别是8M/s、5M/s、2M/s,如果队列推送的速度为5M/s,则consumer3无法承受!如果队列推送的速度为2M/s,则consumer1、consumer2会出现资源的极大浪费!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值