本系列主要讲解kafka基本设计和原理分析,分以下内容:html
Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通讯。
点对点与发布订阅最初是由JMS定义的。这两种模式主要区别或解决的问题就是发送到队列的消息可否重复消费(多订阅)。
JMS规范目前支持两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic)。编程
点对点:并发
消息生产者生产消息发送到queue中,而后消息消费者从queue中取出而且消费消息。这里要注意:
消息被消费之后,queue中再也不有存储,因此消息消费者不可能消费到已经被消费的消息。
Queue支持存在多个消费者,可是对一个消息而言,只会有一个消费者能够消费。
异步
生产者发送一条消息到queue,只有一个消费者能收到。分布式
发布/订阅
消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不一样,发布到topic的消息会被全部订阅者消费。
高并发
发布者发送到topic的消息,订阅了topic的全部订阅者都会收到消息。设计
RabbitMQ实现了AQMP协议,AQMP协议定义了消息路由规则和方式。生产端经过路由规则发送消息到不一样queue,消费端根据queue名称消费消息。此外RabbitMQ是向消费端推送消息,订阅关系和消费状态保存在服务端。
点对点
3d
生产端发送一条消息经过路由投递到Queue,只有一个消费者能消费到。htm
发布/订阅
中间件
当RabbitMQ须要支持多订阅时,发布者发送的消息经过路由同时写到多个Queue,不一样订阅组消费此消息。
RabbitMQ既支持内存队列也支持持久化队列,消费端为推模型,消费状态和订阅关系由服务端负责维护,消息消费完后当即删除,不保留历史消息。因此支持多订阅时,消息会多个拷贝。
kafka没有实现JMS协议,但其消费组能够像点对点模型同样让消息被一组进程处理,同时也能够像发布/订阅模式同样,让你发送广播消息到多个消费组。
点对点
当多个消费者同属一个消费组时,对应消息会被同消费组的当个消费组消费使用,相似点对点的消息模型。
即消息Message1只会被消费组GroupA中的Consumer_一、Consumer_二、Consumer_3消费
发布/订阅
当每一个消费者都属于不一样的消费组时,对应的消息会被每一个消费者消费使用,相似订阅/发布的消息模型。
关于做者
爱编程、爱钻研、爱分享、爱生活
关注分布式、高并发、数据挖掘
如需捐赠,请扫码