热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

rocketmqjava_rocketmq简介

ApacheRocketMQ™是一个开源的分布式消息和流数据平台。1、既然是消息系统,最核心的功能就是要提供消息的发布与订阅功能,最简单的概念模型如下&

Apache RocketMQ™是一个开源的分布式消息和流数据平台。

1、既然是消息系统,最核心的功能就是要提供消息的发布与订阅功能,最简单的概念模型如下:

ac2241d7a97957f4ffc3bf2b41889b3c.png

但是rocketmq提供的能力会比这个复杂的多,如一个生产方发布消息,需要多个消费方订阅,也会存在多个生产方生产消息,一个消费方消费消息,出现一对多,多对一的情况。

dc0e8bfe2ba30bb9b1eeb4655a0e0601.png

上图就是扩展了producer、consumer和Topic的概念模型,rocketmq最核心的概念就是Tpoic,producer和consumer都是围绕Topic展开,每个broker下可以有多个topic,topic下又可以有很对队列messageQueue,相同的topic又可以分布在不同broker节点下,producer发送消息会轮训的发送到topic的队列下;相同consumer分组是负载均衡订阅消息,不同的consumer分组之间互不干扰,即使广播订阅消息;同一Topic下的每个队列只能被相同分组下的一个consumer订阅消费,但一个consumer可以消费多个队列。

2、整体部署架构图

32f4810b102ff19ddf42ff8f88dd3d94.pngnameserver是几乎没有状态的节点,可以集群部署,节点之间也没有任何数据同步。

broker的部署相对复杂,是一个数据分散集群,分master和slave,每个master存储一部分数据,为了数据的高可用,每个master节点可以有多个slave节点,master之间无数据同步,master与slave之间有数据同步。master和slave之间的关系通过brokerName来绑定,brokerId来定义,即相同的brokerName,brokerId等于0表示master节点,非0表示slave节点。所有的broker节点与nameserver集群的所有节点保持长连接,定时注册Topic信息到所有的nameserver。

producer与nameserver集群中的一台(随机)保持长连接,定时获取Topic路由信息,并且与提供Topic服务的broker的master节点保持长连接,并定时发送心跳,producer集群也是无状态的,可以集群部署。

consumer与nameserver集群中的一台(随机)保持长连接,定时获取Topic路由信息,并且向提供Topic的broker的master和slave节点都保持长连接,并定时发送心跳,Consumer既可以从 Master 订阅消息,也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定,consumer也是集群的部署的,负载均衡的消费Topic的消息。

3、消息的存储模型

353b1e097637c321543c9aa7a87f47ef.png

rocketmq的消息存储与消费队列是分开的,消息被存储在commitLog下,然后再异步构建消费队列messageQueue,消费队列并不存储真正的消息内容,只是存储消息在commitLog下的偏移量、消息的长度和消息的tag的hashcode。如图所示:所有数据单独存储到一个 Commit Log,完全顺序写,随机读。

对最终用户展现的队列实际只存储消息在 Commit Log 的位置信息,并且串行方式刷盘。

这样设计有以下优势:队列轻量化,单个队列数据量非常少。

对磁盘的访问串行化,避免磁盘竟争,不会因为队列增加导致 IOWAIT 增高。

但也存在以下缺点:写虽然完全是顺序写,但是读却变成了完全的随机读。

读一条消息,会先读 Consume Queue,再读 Commit Log,增加了开销。

要保证 Commit Log 与 Consume Queue 完全的一致,增加了编程的复杂度。

4、rocketmq具有以下特点能够保证严格的消息顺序

提供丰富的消息拉取模式

高效的订阅者水平扩展能力

实时的消息订阅机制

亿级消息堆积能力

与其他消息队列系统的一个对比如下:消息产品支持客户端协议和规范顺序消息定时消息批量消息广播消息消息过滤消息回溯消息优先级高可用和故障切换消息追踪配置管理和操作工具Server Triggered Redelivery消息存储ActiveMQjava,c++,php,net推模型,支持 OpenWire, STOMP, AMQP, MQTT, JMS独占消费和消息分组支持顺序支持不支持支持支持支持支持支持,leveldb+zookeeper不支持默认配置是低级别的,用户需要优化配置参数支持不支持支持JDBC,leveldb,kahadb

Kafkajava,scala拉模型, 支持TCP分区内消息有顺序不支持支持异步生产者不支持支持支持不支持支持,依赖zookeeper不支持Kafka使用键值对格式进行配置。这些值可以通过文件提供,也可以通过编程方式提供支持,使用命令行不支持高性能文件存储

RocketMQjava,c++,go拉模型, 支持TCP, JMS, OpenMessaging确保消息的严格顺序,并可以优雅地扩展支持支持同步模式,以避免消息丢失支持支持支持按时间和偏移量不支持支持主从模式支持开箱即用,用户只需注意一些配置支持,命令行和web客户端支持高性能和低延迟的文件存储



推荐阅读
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 本文深入探讨了分布式文件系统的核心概念及其在现代数据存储解决方案中的应用,特别是针对大规模数据处理的需求。文章不仅介绍了多种流行的分布式文件系统和NoSQL数据库,还提供了选择合适系统的指导原则。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
  • 本文详细解析 Skynet 的启动流程,包括配置文件的读取、环境变量的设置、主要线程的启动(如 timer、socket、monitor 和 worker 线程),以及消息队列的实现机制。 ... [详细]
  • 初探Hadoop:第一章概览
    本文深入探讨了《Hadoop》第一章的内容,重点介绍了Hadoop的基本概念及其如何解决大数据处理中的关键挑战。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 酷家乐 Serverless FaaS 产品实践探索
    本文探讨了酷家乐在 Serverless FaaS 领域的实践与经验,重点介绍了 FaaS 平台的构建、业务收益及未来发展方向。 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 本文介绍了如何使用Workman框架构建一个功能全面的即时通讯系统,该系统不仅支持一对一聊天、群组聊天,还集成了视频会议和实时音视频通话功能,同时提供了红包发送等附加功能。 ... [详细]
  • [编程题] LeetCode上的Dynamic Programming(动态规划)类型的题目
    继上次把backTracking的题目做了一下之后:backTracking,我把LeetCode的动态规划的题目又做了一下,还有几道比较难的Medium的题和Hard的题没做出来,后面会继续 ... [详细]
  • 基于OpenCV的小型图像检索系统开发指南
    本文详细介绍了如何利用OpenCV构建一个高效的小型图像检索系统,涵盖从图像特征提取、视觉词汇表构建到图像数据库创建及在线检索的全过程。 ... [详细]
  • 本文旨在介绍一系列提升工作效率的浏览器插件和实用小工具,帮助用户在日常工作中更加便捷高效。内容由原作者授权发布。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
author-avatar
raz4150266
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有