大家好,欢迎来到IT知识分享网。
1.JMS 规范是什么
(1)JMS 的基础
JMS 是什么:JMS 是 Java 提供的是一套技术规范,即 Java 消息服务(Java Message Service)应用程序接口。是一个 Java 平台中关于面向消息中间件的 API。用于在两个应用程序之间或分布式系统中发送消息,进行异步通信。Java 消息服务是一个与具体平台无关的事情 API
JMS 干什么用:用来异构系统集成通信,缓解系统瓶颈,提高系统的伸缩性增强系统用户体验,使得系统模块化和组件化变得可行并更加灵活
通过什么方式:生产消费者模式(生产者、服务器、消费者)通常消息传递有两种类型的消息模式可用一种是点对点 queue 队列模式(p2p),另一种是 topic 发布-订阅模式(public-subscribe)
(2)JMS 消息传输模型
1、点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)
点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。
2、发布/订阅模式(一对多,数据生产后,推送给所有订阅者)
发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即时当前订阅者不可用,处于离线状态
(3)JMS 核心组件
1、Destination:消息发送的目的地,也就是前面说的 Queue 和 Topic
2、Message:从字面上就可以看出是被发送的消息
a、StreamMessage:Java 数据流消息,用标准流操作来顺序地填充和读取
b、MapMessage:一个 Map 类型的消息;名称为 string 类型,而值为 Java 的基本类型
c、TextMessage:普通字符串消息,包含一个 String
d、ObjectMessage:对象消息,包含一个可序列化的 Java 对象
e、BytesMessage:二进制数组消息,包含一个 byte[]
f、XMLMessage: 一个 XML 类型的消息
最常用的是 TextMessage 和 ObjectMessage
3、Producer:消息的生产者,要发送一个消息,必须通过这个生产者来发送
4、MessageConsumer:与生产者相对应,这是消息的消费者或接收者,通过它来接收一个消息
5、通过与 ConnectionFactory 可以获得一个 connection
6、通过 connection 可以获得一个 session 会话
(4)常见的类 JMS 消息服务器
1、JMS 消息服务器 ActiveMQ
ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持 JMS1.1 和 J2EE 1.4 规范的
主要特点:
a、多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议:OpenWire,Stomp REST,WS Notification,XMPP,AMQP
b、完全支持 JMS1.1 和 J2EE 1.4 规范 (持久化,XA 消息,事务)
c、对 Spring 的支持,ActiveMQ 可以很容易内嵌到使用 Spring 的系统里面去,而且也支持Spring2.0 的特性
d、 通过了常见 J2EE 服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors 的配置,可以让 ActiveMQ
可以自动的部署到任何兼容 J2EE 1.4商业服务器上可以自动的部署到任何兼容 J2EE 1.4商业服务器上
e、支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
f、 支持通过 JDBC 和 journal 提供高速的消息持久化
g、 从设计上保证了高性能的集群,客户端-服务器,点对点
h、 支持 Ajax
i、 支持与 Axis 的整合
j、 可以很容易的调用内嵌 JMS provider 进行测试
2、分布式消息中间件 Metamorphosis
Metamorphosis(MetaQ) 是一个高性能、高可用、可扩展的分布式消息中间件,类似于 LinkedIn的 Kafka,具有消息存储顺序写、吞吐量大和支持本地
和 XA 事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景,在淘宝和支付宝有着广泛的应用,现已开源
主要特点:
a、生产者、服务器和消费者都可分布
b、消息存储顺序写
c、性能极高,吞吐量大
d、支持消息顺序
e、支持本地和 XA 事务
f、客户端 pull,随机读,利用 sendfile 系统调用,zero-copy ,批量拉数据
i、支持消费端事务
j、支持消息广播模式
k、支持异步发送消息
l、支持 http 协议
m、支持消息重试和 recover
n、数据迁移、扩容对用户透明
o、消费状态保存在客户端
p、支持同步和异步复制两种 HA
q、支持 group commit
3、分布式消息中间件 RocketMQ
RocketMQ 是一款分布式、队列模型的消息中间件
主要特点:
a、能够保证严格的消息顺序
b、提供丰富的消息拉取模式
c、高效的订阅者水平扩展能力
d、实时的消息订阅机制
e、亿级消息堆积能力
f、Metaq3.0 版本改名,产品名称改为 RocketMQ
4、其他 MQ
a、.NET 消息中间件 DotNetMQ
b、基于 HBase 的消息队列 HQueue
c、Go 的 MQ 框架 KiteQ
d、AMQP 消息服务器 RabbitMQ
e、MemcacheQ 是一个基于 MemcacheDB 的消息队列服务器
2.为什么需要消息队列
消息系统的核心作用就是三点:解耦,异步和并行
(1)用户注册的一般流程
用户注册—》发新手红包—》准备支付宝账号—》进行合法性验证—》通知SNS
问题:随着后端流程越来越多,每步流程都需要额外的耗费很多时间,从而会导致用户更长的等待延迟。
(2)用户注册的并行执行
用户注册—》发新手红包,准备支付宝账号,进行合法性验证,通知SNS
问题:系统并行的发起了 4 个请求,4 个请求中,如果某一个环节执行 1 分钟,其他环节再快,用户也需要等待 1 分钟。如果其中一个环节异常之后,整个服务挂掉了
(3)用户注册的最终一致
发送消息—》用户注册
1、 保证主流程的正常执行、执行成功之后,发送 MQ 消息出去。
2、 需要这个 destination 的其他系统通过消费数据再执行,最终一致。
消息队列投递—》发新手红包,准备支付宝账号,进行合法性验证,通知SNS
3.Kafka 的优点
(1)解耦
(2)冗余
(3)扩展性
(4)灵活性 & 峰值处理能力
(5)可恢复性
(6)顺序保证
(7)缓冲
(8)异步通信
4.Kafka 是什么
(1)Kafka 概述
1、在流式计算中,Kafka 一般用来缓存数据,Storm 通过消费 Kafka 的数据进行计算。经典架构:Flume + Kafka + Storm + Redis
2、Apache Kafka 最初是是由 LinkedIn 开发的一个基于发布订阅的分布式的消息系统,由 Scala编写,并于 2011 年初开源
3、Kafka 是一个分布式消息队列:具有生产者、消费者的功能。它提供了类似于 JMS 的特性,但是在设计实现上完全不同,此外它并不是 JMS 规范的实现
4、Kafka 对消息保存时根据 Topic 进行归类,发送消息者称为 Producer,消息接受者称为Consumer,此外 Kafka 集群有多个 Kafka 实例组成,每个实例(server)成为 broker。
5、无论是Kafka集群,还是Producer和Consumer都依赖于ZooKeeper集群保存一些meta信息,来保证系统可用性
(2)Kafka 特性
1、高吞吐量、低延迟:kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个 topic可以分多个 partition,consumer group 对 partition 进行消费操作
2、可扩展性:kafka 集群支持热扩展
3、持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
4、容错性:允许集群中节点失败(若副本数量为 n,则允许 n-1 个节点失败)
5、高并发:支持数千个客户端同时读写
5.Kafka 的应用场景
(1)消息系统
(2)跟踪网站活动
(3)运营指标
(4)日志聚合
(5)流处理
(6)采集日志
(7)提交日志
6.Kafka 核心组件
(1)工作模式
Kafka 是 LinkedIn 用于日志处理的分布式消息队列,同时支持离线和在线日志处理。
发送消息者就是 Producer,消息的发布描述为 Producer
消息接受者就是 Consumer,消息的订阅描述为 Consumer
每个 Kafka 实例称为 Broker,将中间的存储阵列称作 Broker(代理)
Kafka 的大致工作模式:
1、启动 ZooKeeper 的 server
2、启动 Kafka 的 server
3、Producer 生产数据,然后通过 ZooKeeper 找到 Broker,再将数据 push 到 Broker 保存
4、Consumer 通过 ZooKeeper 找到 Broker,然后再主动 pull 数据
(2)Kafka 的核心概念详解
1、Broker:Kafka 节点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka 集群。
2、Topic:一类消息,消息存放的目录即主题,例如 page view 日志、click 日志等都可以以 topic的形式存在,Kafka 集群能够同时负责多个 topic 的分发。
3、Partition:topic 物理上的分组,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列
每个分区其实都是有序且顺序不可变的记录集,并且不断地追加到结构化的 commit log 文件。
4、Segment:partition 物理上由多个 segment 组成,每个 Segment 存着 message 信息
5、Producer : 生产 message 发送到 topic
6、Consumer : 订阅 topic 消费 message,consumer 作为一个线程来消费
a、 一个 Partition 的消息只会被 group 中的一个 Consumer 消费
b、 可以认为一个 group 就是一个“订阅者”
c、 一个 Topic 中的每个 Partition 只会被一个“订阅者”中的一个 Consumer 消费
7、Consumer Group:一个 Consumer Group 包含多个 consumer,这个是预先在配置文件中配置好的
一般来说:
a、一个 Topic 的 Partition 数量大于等于 Broker 的数量,可以提高吞吐率。
b、同一个 Partition 的 Replica 尽量分散到不同的机器,高可用。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6419.html