kafka知识体系-消息模型

本系列主要讲解kafka基本设计和原理分析,分如下内容:

  1. 基本概念
  2. 消息模型
  3. kafka副本同步机制
  4. kafka文件存储机制
  5. kafka数据可靠性和一致性保证
  6. kafka leader选举
  7. kafka消息传递语义
  8. Kafka集群partitions/replicas默认分配解析

消息模型

JMS协议(ActiveMQ)

Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
点对点与发布订阅最初是由JMS定义的。这两种模式主要区别或解决的问题就是发送到队列的消息能否重复消费(多订阅)。
JMS规范目前支持两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic)。

点对点

消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。这里要注意:
消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。
Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。
719892-20180627210305037-352317925.jpg

生产者发送一条消息到queue,只有一个消费者能收到。

发布/订阅
消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。
719892-20180627210321925-911797389.jpg

发布者发送到topic的消息,订阅了topic的所有订阅者都会收到消息。

AQMP协议(RabbitMQ)

RabbitMQ实现了AQMP协议,AQMP协议定义了消息路由规则和方式。生产端通过路由规则发送消息到不同queue,消费端根据queue名称消费消息。此外RabbitMQ是向消费端推送消息,订阅关系和消费状态保存在服务端。
点对点
719892-20180627210407642-452811297.jpg

生产端发送一条消息通过路由投递到Queue,只有一个消费者能消费到。

发布/订阅
719892-20180627210437706-1948451321.jpg

当RabbitMQ需要支持多订阅时,发布者发送的消息通过路由同时写到多个Queue,不同订阅组消费此消息。
RabbitMQ既支持内存队列也支持持久化队列,消费端为推模型,消费状态和订阅关系由服务端负责维护,消息消费完后立即删除,不保留历史消息。所以支持多订阅时,消息会多个拷贝。

kafka

kafka没有实现JMS协议,但其消费组可以像点对点模型一样让消息被一组进程处理,同时也可以像发布/订阅模式一样,让你发送广播消息到多个消费组。
点对点
当多个消费者同属一个消费组时,对应消息会被同消费组的当个消费组消费使用,类似点对点的消息模型。
719892-20180627210505445-1484128075.png

即消息Message1只会被消费组GroupA中的Consumer_1、Consumer_2、Consumer_3消费

发布/订阅

当每个消费者都属于不同的消费组时,对应的消息会被每个消费者消费使用,类似订阅/发布的消息模型。
719892-20180627210534275-525977621.jpg


关于作者
爱编程、爱钻研、爱分享、爱生活
关注分布式、高并发、数据挖掘
如需捐赠,请扫码
sqm.jpg

转载于:https://www.cnblogs.com/aidodoo/p/8873125.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值