热门标签 | 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客户端支持高性能和低延迟的文件存储



推荐阅读
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 构建基础的字符串队列实现方法
    在探讨如何构建基础的字符串队列实现方法时,我们发现许多开发者在面对这一问题时常常感到困惑。实际上,队列的基本原理非常简单,即遵循先进先出的原则。然而,在具体实现过程中,需要注意的是Java语言中并没有指针的概念,因此需要通过嵌套类来模拟指针,进而构建链表结构。这种实现方式不仅能够有效地管理字符串数据,还能提升代码的可读性和维护性。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在当今的软件开发领域,分布式技术已成为程序员不可或缺的核心技能之一,尤其在面试中更是考察的重点。无论是小微企业还是大型企业,掌握分布式技术对于提升工作效率和解决实际问题都至关重要。本周的Java架构师实战训练营中,我们深入探讨了Kafka这一高效的分布式消息系统,它不仅支持发布订阅模式,还能在高并发场景下保持高性能和高可靠性。通过实际案例和代码演练,学员们对Kafka的应用有了更加深刻的理解。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 寒假作业解析:第三周 2月12日 第7题
    尽快完成之前的练习任务!每日一练2.1 Problem A Laurenty and Shop 的题目要求是选择两条不同的路线以最小化总的等待时间。简要分析:通过对比不同路线的等待时间,可以找到最优解。此问题可以通过动态规划或贪心算法来解决,具体取决于路线的复杂性和约束条件。 ... [详细]
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社区 版权所有