阿里RocketMQ用户指南V3.2.4.pdf

所需积分/C币:5 2017-06-07 13:35:29 844KB PDF
收藏 收藏
举报

阿里RocketMQ用户指南V3.2.4阿里RocketMQ用户指南V3.2.4阿里RocketMQ用户指南V3.2.4.pdf
项目开源主页:hts:/ github. com/alibaba/ RocketMo 目录 前言 2产品发展历史 ·:日::::::::::::::::日: 3专业术语 2 4消息中间件需要解决哪些问题? Publish/Subscribe 4.2 Message priorit Message Orde 5 4.4 Filter 4.5 Message persistence 4.6 Message Reliablity ., 4.7 Low Latency Messaging 4.8 At least once 4.9 Exactly Only Once 4.10 Broker的 Buffer满了怎么办? 4.11回溯消费 677788 4.12消息堆积 4.13分布式事务 4.14定时消息 4.15消息重试 9 5 RocketMQ Overview RocketS是什么? 52 Rockets物理部署结构 5.3 RocketMQ逻辑部署结构 12 6 RocketMQ存储特点 零拷贝原理 62 文件系统 44 数据存储结构 项目开源主页:hts:/ github. com/alibaba/ RocketMo 64 存储目录结构 65 数据可靠性 16 7 RocketS关键特性 16 7.1 单机支持1万以上持久化队列 16 7.2 刷盘策略 7.21异步刷盘 18 7.22同步刷盘 消息查询 7.3.1按照 Message Id查询消息 .20 7.3.2按照 Message Key查询消息 20 74 服务器消息过滤 .::..: 21 7.5 长轮询Pull .22 76顺序消息 22 76.1顺序消息原理 22 7.62顺序消息缺陷 7.7 事务消息 7.8 发送消息负载均衡 1■■■■■■1, ■■ 7.9 订阅消息负载均衡 24 710单队列并行消费 7.11发送定时消息 25 712消息消费失败,定时重试 7.13HA,同步双写/异步复制 7.14单个JM进程也能利用机器超大内存 26 7.15消息堆积问题解决办法 27 项目开源主页:hts:/ github. com/alibaba/ RocketMo 8 RocketS消息过滤 27 8.1 简单消息过滤 82高级消息过滤 28 9 RocketMQ通信组件 29 9.1 网络协议 92心跳处理 9.3 连接复用 94 超时连接 10 RocketMQ服务发现( Name server) 31 客户端使用指南 31 11.1客户端如何寻址 .::..: 12自定义客户端行为 112.1客户端AP形式 32 1122客户端的公共配置 1123 Producer配置 1124 PushConsumer配置 1.2.5 Pullconsumer配置∴…… 34 1、3 Message数据结构 35 11.31针对 Producer 35 1132针对 Consumer… 35 12 Broker使用指南 35 2 Broker配置参 数 35 122 Broker集群搭建 37 123 Broker重启对客户端的影响 40 lIlI 项目开源主页:hts:/ github. com/alibaba/ RocketMo 13 Producer最佳实践 40 13.1发送消息注意事项 40 132消息发送失败如何处理 41 133选择 oneway形式发送 42 134发送顺序消息注意事项 14 Consumer最佳实践 42 141消费过程要做到幂等(即消费端去重) 42 142消费失败处理方式 143消费速度慢处理方式 143.1提高消费并行度 .43 14.3.2批量方式消费 143.3跳过非重要消息 44 14.34优化每条消息消费过程 45 消费打印日志 46 145利用服务器消息过滤,避免多余的消息传输 46 附录A参考文档、规范 46 项目开源主页:htis: github. com/alibaba/ RocketMQ 1前言 本文档旨在描述 RocketMG的多个关键特性的实现原理,并对消息中间件遇到的各种问题进行总结,阐述 RocketMQ如何解决这些问题。文中主要引用了JMS规范与 CORBA Notificationη规范,规范为我们设计系统指明了 方向,但是仍有不少冋题规范没有提及,对于消息中间件又至关重要 RocketMQ并不遵循任何规范,但是参考了 各种规范与同类产品的设计思想。 2产品发展历史 大约经历了三个主要版本迭代 Metaq( Metamorphosis )1.x 由开源社区 killme2008维护,开源社区非常活跃。 httpsllgithub.com/killme2008/metamorphosis. 二、 Metal2x 于2012年10月份上线,在淘宝内部被广泛使用。 三、 RocketMQ3 基于公司内部开源共建原则, RocketMQ项目只维护核心功能,且去除了所有其他运行时依赖,核心功能最 简化。每个BU的个性化需求都在 RocketS项目之上进行深度定制。 RocketMQ向其他BU提供的仅仅是 Jar包,例如要定制个 Broker,那么只需要依赖 rocketmq-broker这个jar包即可,可通过AP进行交互, 如果定制 client,则依赖 rocketing- client这个jar包,对其提供的api进行再封装。 开源社区地址 httpslgithub.comlalibaba/rocketmq 在 Rockets项目基础上衍生的项目如下 com taobao meta v3.0= RocketMQ+淘宝个性化需求 为淘宝应用提供消息服务 项目开源主页:htis: github. com/alibaba/ RocketMQ com. alipay. zpullmsg v1.= RocketMQ+支付宝个性化需求 为支付宝应用提供消息服务 com. alibaba. commonmg v1.0= Notify+ RocketMQ+B2B个性化需求 为B2B应用提供消息服务 3专业术语 Producer 消息生产者,负责产生消息,一般由业务系统负责产生消息。 Consumer 消息消费者,负责消费消息,一般是后台系统负责异步消费。 Push Consumer Consumer的一种,应用通常向 Consumer对象注册一个 Listener接口,一旦收到消息, Consumer对象立 刻回调 Listener接口方法。 Pull consumer Consumer的—种,应用通常主动调用 Consumer的拉消息方法从 Broker拉消息,主动权由应用控制。 Producer Group 类 Producer的集合名称,这类 Producer通常发送一类消息,且发送逻辑一致。 Consumer Group 一类 Consumer的集合名称,这类 Consumer通常消费一类消息,且消费逻辑-致。 Broker 消息中转角色,负责存储消息,转发消息,一般也称为 Server。在JMS规范中称为 Provider 广播消费 一条消息被多个 Consumer消费,即使这些 Consumer属于同一个 Consumer Group消息也会被 Consumer Group中的每个 Consumer都消费一次,广播消费中的 Consumer Group概念可以认为在消息划分方面无意 义。 在 CORBA Notification规范中,消费方式都属于广播消费 在JMS规范中,相当于 JMS publish/ subscribe model 项目开源主页:htis: github. com/alibaba/ RocketMQ 集群消费 一个 Consumer Group中的 Consumer实例平均分摊消费消息。例如某个 Topic有9条消息,其中一个 Consumer Group有3个实例(可能是3个进程,或者3台机器),那么每个实例只消费其中的3条消息。 在 CORBA Notification规范中,无此消费方式。 在JMS规范中, JMS point-to- point model与之类似,但是 RocketMQ的集群消费功能大等于PTP模型。 因为 RocketS单个 Consumer Group内的消费者类似于PTP但是一个 Topic/Queue可以被多个 Consumer Group消费。 顺序消息 消费消息的顺序要同发送消息的顺序一致,在 Rockets中,主要指的是局部顺序,即一类消息为满足顺 序性,必须 Producer单线程顺序发送,且发送到同一个队列,这样 Consumer就可以按照 Producer发送 的顺序去消费消息。 普通顺序消息 顺序消息的一种,正常情况下可以保证完全的顺序消息,但是一旦发生通信异常 Broker重启,由于队列 总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不—致。 如果业务能容忍在集群异常情况(如某个 Broker宕机或者重启)下,消息短暂的乱序,使用普通顺序方 式比较合适。 严格顺序消息 顺序消息的—种,无论正常异常情况都能保证顺序,但是牺牲了分布式 Failover特性,即 Broker集群中只 要有一台机器不可用,则整个集群都不可用,服务可用性大大降低。 如果服务器部署为同步双写模式,此缺陷可通过备机自动切换为主避免,不过仍然会存在几分钟的服务不 可用。(依赖同步双写,主备自动切换,自动切换功能目前还未实现) 目前已知的应用只有数据库 binlog同步强依赖严格顺序消息,其他应用绝大部分都可以容忍短暂乱序,推 荐使用普通的顺序消息。 Message Queue 项目开源主页:htis: github. com/alibaba/ RocketMQ 在 RocketS中,所有消息队列都是持久化,长度无限的数据结构,所谓长度无限是指队列中的毎个存储 单元都是定长,访问其中的存储单元使用 Offset来访问, offset为 java long类型,64位,理论上在100 年內不会溢出,所以认为是长度无限,另外队列中只保存最近几天的数据,之前的数据会按照过期时间来 删除。 也可以认为 Message Queue是一个长度无限的数组, offset就是下标。 4消息中间件需要解决哪些问题? 本节阐述消息中间件通常需要解决哪些问题,在解决这些问题当中会遇到什么困难, RocketMQ是否可以解决, 规范中如何定义这些问题 4.1 Publish/subscribe 发布订阅是消息中间件的最基本功能,也是相对于传统RPC通信而言。在此不再详述。 4.2 Message priority 规范中描述的优先级是指在—个消息队列中,每条消息都有不同的优先级,一般用整数来描述,优先级高的消 息先投递,如果消息完全在一个内存队列中,那么在投递前可以按照优先级排序,令优先级高的先投递。 由于 RocketMQ所有消息都是持久化的,所以如果按照优先级来排序,开销会非常大,因此 RocketS没有特 意支持消息优先级,但是可以通过变通的方式实现类似功能,即单独配置一个优先级高的队列,和一个普通优先级 的队列,将不同优先级发送到不同队列即可。 对于优先级问题,可以归纳为2类 1)只要达到优先级目的即可,不是严格意义上的优先级,通常将优先级划分为高、中、低,或者再多几个级 别。每个优先级可以用不同的 topic表示,发消息时,指定不同的 topic来表示优先级,这种方式可以解决 绝大部分的优先级问题,但是对业务的优先级精确性做了妥协。 2)严格的优先级,优先级用整欻表示,例如0~65535,这种优先级问题-般使用不同 topic解决就非常不合

...展开详情
试读 52P 阿里RocketMQ用户指南V3.2.4.pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
deane163 不错,使用API文档,感谢楼主分享!
2018-10-09
回复
  • GitHub

    绑定GitHub第三方账户获取
  • 分享达人

    成功上传6个资源即可获取
关注 私信 TA的资源
上传资源赚积分or赚钱
最新推荐
阿里RocketMQ用户指南V3.2.4.pdf 5积分/C币 立即下载
1/52
阿里RocketMQ用户指南V3.2.4.pdf第1页
阿里RocketMQ用户指南V3.2.4.pdf第2页
阿里RocketMQ用户指南V3.2.4.pdf第3页
阿里RocketMQ用户指南V3.2.4.pdf第4页
阿里RocketMQ用户指南V3.2.4.pdf第5页
阿里RocketMQ用户指南V3.2.4.pdf第6页
阿里RocketMQ用户指南V3.2.4.pdf第7页
阿里RocketMQ用户指南V3.2.4.pdf第8页
阿里RocketMQ用户指南V3.2.4.pdf第9页
阿里RocketMQ用户指南V3.2.4.pdf第10页
阿里RocketMQ用户指南V3.2.4.pdf第11页

试读结束, 可继续读5页

5积分/C币 立即下载 >