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

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

    点对点模式 发布订阅模式

一、点对点模式

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

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

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

二、发布订阅模式

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

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

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

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

经验分享 程序员 微信小程序 职场和发展