
1、ActiviMq消息队列,解决了服务解耦合的动作,缓解了服务并发量很大,造成服务器无法处理的状况。(kafka、rabbitMQ、activiMQ)
其他作用:异步处理、消息通讯、流量消峰、应用解耦
应用场景:
1、用户注册的时候,重点内容是将用户信息保存到数据库中,发短信验证或者是发邮件增加了业务的复杂度。这时使用MQ将发短信、发邮件通知MQ由另外的服务平台完成。
2、搜索平台、缓存平台
查询数据,建立缓存、索引,不从数据库查询,从缓存或者索引库查询,当数据库发生增加、修改、删除 *** 作时发消息给MQ,缓存平台或者是索引平台从MQ获取到这个消息,更新缓存或者索引。
ActiveMQ使用的是标准的生产者(完成生产消息并发送消息)和消费者(获取消息,完成自己的业务逻辑)模型
有两种数据结构
Topic(发布订阅) 一个生产者对应多个消费者,消息默认不会持久化,需要手动配置持久化。如果A服务器挂了,再生产一条消息的话,会被B服务器拿去使用,就算重新启动,A服务器也不会再拿到消息了
商品系统、库存系统、生成商品详情页面的系统,现在要添加一个商品信息,消息肯定是需要让库存系统以及商品信息详情页面系统知道的。
Queue(点对点)一个生产者对应一个消费者,默认消息持久化
StringMessage
mapMessage
byteMessage
objectMessage
要完成topic模式的消息持久化,需要保证每个消费者有唯一的clientID(本文来自北大青鸟)
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。kafka 是一个高性能的消息队列,也是一个分布式流处理平台。
kafka中文网
kafka官网
Producer :Producer即生产者,消息的产生者,是消息的入口。
kafka cluster :
Broker :Broker是kafka实例,每个服务器上有一个或多个kafka的实例,姑且认为每个broker对应一台服务器。一个集群由多个broker组成,集群内的broker都有一个不重复的编号,如图中的broker-0、broker-1等……
Topic :消息的主题,可以理解为消息的分类,kafka的数据就保存在topic。在每个broker上都可以创建多个topic。
Partition :Topic的分区,每个topic可以有多个分区,分区的作用是做负载,提高kafka的吞吐量。 同一个topic在不同的分区的数据是不重复的 ,partition的表现形式就是一个一个的文件夹!
Replication : 每一个分区都有多个副本 ,副本的作用是做备胎。当主分区(Leader)故障的时候会选择一个备胎(Follower)上位,成为Leader。在kafka中默认副本的最大数量是10个,且副本的数量不能大于Broker的数量,follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)。
Message :每一条发送的消息主体。
Consumer :消费者,即消息的消费方,是消息的出口。
Consumer Group :将多个消费组成一个消费者组。在kafka的设计中 同一个分区的数据只能被同一消费者组中的某一个消费者消费 。Partition 的分配问题,即确定哪个 Partition 由哪个 Consumer 来消费。Kafka 有两种分配策略,一个是 RoundRobin,一个是 Range,默认为Range。
一个消费者组内也可以订阅多个topic
多个消费组可以订阅同一个topic 。
Zookeeper :kafka集群依赖zookeeper来保存集群的的元信息,来保证系统的可用性。
使用brew进行安装,非常方便。
ZooKeeper是一个分布式的,开放源码的 分布式应用程序协调服务 ,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
kafka是基于zookeeper的,启动kafka之前,需要先启动zookeeper
查看启动是否成功
启动kafka
查看启动是否成功
查看topic列表
新起一个终端,作为生产者,用于发送消息,每一行算一条消息,将消息发送到kafka服务器
新起一个终端作为消费者,接收消息
服务关闭的顺序是先kafka,然后zookeeper
再过半小时,你就能明白kafka的工作原理了
Kafka架构原理,也就这么回事!
1、事务发布,效率还不错,对网络稳定性要求较高,带宽使用较少
2、快照发布,其实相当于给现在的数据拍了张照片,然后拷贝走,再在其他服务器上恢复,适合使用移动硬盘拷贝
3、具有可更新订阅的事务发布,效率最高,对网络稳定性要求较高,带宽使用较少。
4、合并发布,性能在1和2的之间
rocketMq概念介绍
rocketMq-namesrv介绍
rocketMq-Topic创建过程
rocketMq-producer介绍
rocketMq-consumer介绍
rocketMq - rebalance介绍
rocketMq - 并发消费过程
rocketMq - 串行消费过程
rocketMq-broker介绍
rocketMq-broker消息存储介绍
rocketMq - commitLog
rocketMq - index介绍
rocketMq-延迟消息介绍
rocketMq-事务消息介绍
rocketMq消息查询
rocketMq和kafka的架构区别
rocketMq - master/slave同步
本章主要讲解Rebalance在consumer端的作用,如果要理解consumer的逻辑,就必须要知道在consumer端有Rebalance这个服务,没有Rebalance也就没有consumer的消息拉取。
1、从namesrv获取messageQueue信息
2、从broker获取consumer信息
3、选择Rebalance策略
4、三者结合实现Rebalance *** 作
Rebalance是针对Topic+ConsumerGroup进行Rebalance的,在我们创建的comsumer过程中会订阅topic(包括%retry%consumerGroup),Rebalance就是要这些Topic下的所有messageQueue按照一定的规则分发给consumerGroup下的consumer进行消费。
说明:参见RebalanceImpl类
1、着重需要强调的概念,Rebalance是针对订阅的topic进行Rebalance,也就是假如consumer订阅了10个Topic,那么我们就需要对10个Topic里的每一个Topic进行Rebalance。
说明:参见RebalanceImpl类
1、Rebalance的过程需要3个要素,分别是Topic下的所有MessageQueue、consumerGroup下的所有consumer、Rebalance策略。这里的MessageQueue是指Topic在每个broker上的队列配置信息。
2、获取MessageQueue信息,获取consumerGroup下的consumer信息,根据Rebalance策略进行Rebalance。
3、更新Rebalance的结果进行消息的拉取。
4、Rebalance更新consumer负责的messageQueue
说明:参见RebalanceImpl类
说明:参见RebalanceImpl类
说明:参见AllocateMessageQueueAveragely类
1、举其中一种策略说明,这个策略是考虑当前consumerId的位置,consumer的数量,MessageQueue的数量,根据consumerId所处的位置决定分配多少消费队列。
2、该过程会动态调整,也可能会不一致,因为依赖的数据来自broker会有不一致,但是最终肯定会一致,周期性的Rebalance的作用。
说明:参见MQClientInstance类
1、consumer端的MessageQueue是根据topic中的readQueueNums来计算的
2、计算MessageQueue的TopicRouteData是从namesrv中获取的
说明:参见MQClientInstance类
参见:MQClientAPIImpl类
说明:参见ConsumerManageProcessor类
1、获取consumer列表跟注册过程是对称的
要知道consumer的获取必须知道consumer是怎么注册的,其实consumer会把注册信息发送给broker保存,当然由于没有强一致性的保证,会存在某些极端情况下broker上的配置不一致,但是由于这是一个周期性的任务,所以最终肯定会达到一致的。
说明:参见DefaultMQPushConsumerImpl类
说明:参见MQClientInstance类
1、心跳信息包含client的注册信息
2、同步给broker的信息是最终一致性的,非强一致性
说明:参见ClientManageProcessor
1、处理consumer心跳信息的入口
说明:参见ConsumerManager类
1、broker保存consumer元信息
在JMS中,TOPIC实现了分发和订阅,当你分发一个消息,所有订阅这个消息的服务都能得到这个服务,所以从0到许多个订阅者都能得到一个消息的拷贝,只有在消息代理收到消息时有一个有效订阅时的订阅者才能得到这个消息的拷贝。JMS Queue实现了负载均衡,一个消息只能被一个消费者接受,当没有消费者可用时,这个消息会被保存直到有 一个可用的消费者,一个queue可以有很多消费者,他们之间实现了负载均衡,所以Queue实现了一个可靠的JMS负载均衡。
以上就是关于ActiveMQ是什么是干什么用的全部的内容,包括:ActiveMQ是什么是干什么用的、Kafaka入门(1)- Kafka简介和安装与启动(mac)、SQL数据库发布订阅的四个类型中哪个效率更高等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)