卡夫卡 点对点与发布订阅模式
背景知识
JMS一个在 Java标准化组织(JCP)内开发的标准(代号JSR 914)。2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1.
Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
点对点与发布订阅最初是由JMS定义的。这两种模式主要区别或解决的问题就是发送到队列的消息能否重复消费(多订阅)
1.JMS中定义
JMS规范目前支持两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic)。
点对点
- 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。这里要注意:
- 消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。
- Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。
发布/订阅
- 消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。
- 和点对点方式不同,发布到topic的消息会被所有订阅者消费。
-
![]()
-
![]()
![]()
-
在Kafka中,点对点模式和发布订阅模式并不是通过简单的配置切换的,而是通过不同的使用方式来实现的。这两种模式的本质区别在于消息的消费方式和消息的存储位置。
点对点模式
点对点模式通常通过Kafka的队列(Queue)实现,一个消息只能被一个消费者消费。在Kafka中,可以通过以下方式实现类似点对点模式的效果:-
使用单个消费者组(Consumer Group):所有消费者都属于同一个消费者组,每个分区(Partition)的消息只会被该组中的一个消费者消费。
-
配置消费者组:通过设置
group.id,确保每个消费者组中只有一个消费者实例消费某个分区的消息。
发布订阅模式
发布订阅模式通过Kafka的Topic实现,一个消息可以被多个消费者消费。在Kafka中,可以通过以下方式实现发布订阅模式:-
使用多个消费者组:不同的消费者组可以订阅同一个Topic,每个消费者组中的消费者都会独立消费消息。
-
配置消费者组ID:不同的消费者组通过不同的
group.id来区分,每个组都会独立消费消息
-




浙公网安备 33010602011771号