分布式消息中间件 RocketMQ:概述与源码编译篇

一、前言

Apache RocketMQ 是一个分布式消息中间件,其具有低延迟、高性能和可靠性、万亿级容量、灵活的可扩展性特性;它是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。

二、RocketMQ架构

image.png

本图来自rocketmq官网

RocketMQ 是一个分布式消息中间件,其具有低延迟、高性能和可靠性、万亿级容量、灵活的可扩展性特性。它主要有四部分组成,分别为name servers, brokers, producers and consumers.每部分都可以进行水平扩展,而不会出现单点问题。

  • NameServer Cluster:名称服务集群,提供轻量级的服务发现与路由服务,每个名称服务器记录了全部的broker的路由信息,并且提供相应的读写服务,支持快速存储扩展。
  • Broker Cluster:broker集群,broker通过提供轻量级的主题和队列机制来维护消息存储。它支持推和拉两种模型,包含容错机制(2个副本或3个副本),并提供了强大的平滑峰值,提供积累数以亿计的消息并保证其在原始时间顺序的被消费能力。此外,broker也提供灾难恢复、丰富的度量统计和警报机制,所有这些能力在传统的消息传递系统里面都是没有的。
  • Producer Cluster:生产者集群,提供分布式部署,分布式的生产者发送消息到broker集群,具体选择哪一个broker机器是通过一定的负载均衡策略来决定的,发送消息中支持故障快速恢复,并且具有较低的等待时间
  • Consumer Cluster:消费者集群,消费者在推和拉模型中支持分布式部署。它还支持集群消费和消息广播。它提供了实时消息订阅机制,可以满足大多数消费者的需求。

注:broker在启动时候会去链接nameserver, 然后注册topic信息到NameServer,NameServer维护了所有topic的信息和对应的broker路由信息,broker与NameServer之间是有心跳检查的,NameServer 发现broker挂了后,会从注册信息里面删除,这类似zookeeper实现的服务注册;producer则需要配置nameserver的地址,然后定时从NameServer获取对应topic的路由信息(这个topic的消息应该路由到那个broker),同时producer与NameServer,proudcer与broker有心跳检查;同理Consumer需要配置NameServer的地址,然后定时从NameServer获取对应topic的路由信息(应该从那个broker的消息队列获取消息),同时Consumer与NameServer,Consumer与broker有心跳检查。

三、Mac下RocketMq源码编译与环境搭建

3.1 源码下载与编译

image.png

  • 本文使用maven与JDK版本

image.png

  • 下载后在源码根目录下执行 mvn -Prelease-all -DskipTests clean install -U,执行完毕后出出现下面结果:

image.png

出现上面结果说明源码以及编译OK了,然后在源码根目录的distribution/target目录会出现apache-rocketmq.tar.gz,如下图

image.png

解压apache-rocketmq.tar.gz文件夹,结果如下:

image.png

image.png

image.png

最后

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术栈

Kafka 单机和分布式环境搭建与案例使用

zookeeper:http://www.apache.org/dyn/closer.cgi/zookeeper/

1762
来自专栏散尽浮华

CentOS7下单机部署RabbltMQ环境的操作记录

一、RabbitMQ简单介绍 在日常工作环境中,你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题...

2706
来自专栏JAVA同学会

RocketMQ 基本概念

生产者发送业务系统产生的消息给broker。RocketMQ提供了多种发送方式:同步的、异步的、单向的。

2012
来自专栏北京马哥教育

Ansible 详细用法说明(一)

Ansible 一、概述 运维工具按需不需要有代理程序来划分的话分两类: agent(需要有代理工具):基于专用的agent程序完成管理功能,puppet, f...

3625
来自专栏jeremy的技术点滴

ansible简易入门

4105
来自专栏星汉技术

Kafka简介及安装配置

5125
来自专栏IT可乐

RabbitMQ详解(一)------简介与安装

1805
来自专栏计算机编程

ubuntu Nginx配置笔记

说明:configure后面必须在同一行进行输入,此放在此处即是为了看清楚配置了哪些东西

3552
来自专栏程序手艺人

autojump 一键直达目录

5226
来自专栏Pythonista

centos7之saltstack使用手册

  salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apac...

2531

扫码关注云+社区

领取腾讯云代金券