
MQ
文章平均质量分 89
MQ
fedorafrog
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Rocket MQ(六)消息存储之二
文章摘要:上篇中主要介绍了RocketMQ存储部分的整体架构设计,本篇将深入分析RocketMQ存储部分的细节内容在本篇文章中,小编将继续深入分析与介绍RocketMQ消息存储部分中的关键技术—Mmap与PageCache、几种RocketMQ存储优化技术(包括预先创建分配MappedFile、文件预热和mlock系统调用)、RocketMQ内部封装类—CommitLog/MappedFile/MappedFileQueue/ConsumeQueue的简析。然后,再简要介绍下RocketMQ消息刷盘两种主转载 2021-04-06 20:38:21 · 313 阅读 · 1 评论 -
Rocket MQ(五)消息存储之一
文章摘要:MQ分布式消息队列大致流程在于消息的一发一收一存,本篇将为大家主要介绍下RocketMQ存储部分的架构消息存储是MQ消息队列中最为复杂和最为重要的一部分,所以小编也就放在RocketMQ系列篇幅中最后一部分来进行阐述和介绍。本文先从目前几种比较常用的MQ消息队列存储方式出发,为大家介绍RocketMQ选择磁盘文件存储的原因。然后,本文分别从RocketMQ的消息存储整体架构和RocketMQ文件存储模型层次结构两方面进行深入分析介绍。使得大家读完本文后对RocketMQ消息存储部分有一个大致的了转载 2021-04-06 20:30:04 · 323 阅读 · 0 评论 -
Rocket MQ(四)Topic,Topic分片和Queue
Queue是RocketMQ中的另一个重要概念。在对该概念进行分析介绍前,我们先来看一张图:从本质上来说,RocketMQ中的Queue是数据分片的产物。为了更好地理解Queue的定义,我们还需要引入一个新的概念:Topic分片。在分布式数据库和分布式缓存领域,分片概念已经有了清晰的定义。同理,对于RocketMQ,一个Topic可以分布在各个Broker上,我们可以把一个Topic分布在一个Broker上的子集定义为一个Topic分片。对应上图,TopicA有3个Topic分片,分布在Broker转载 2021-04-06 20:24:02 · 12691 阅读 · 4 评论 -
Rocket MQ(三)消费模式和消费策略详解
首先明确一点,RocketMQ 是基于发布订阅模型的消息中间件。所谓的发布订阅就是说,consumer 订阅了 broker 上的某个 topic,当 producer 发布消息到 broker 上的该 topic 时,consumer 就能收到该条消息。之前我们讲过 consumer group 的概念,即消费同一类消息的多个 consumer 实例组成一个消费者组,也可以称为一个 consumer 集群,这些 consumer 实例使用同一个 group name。需要注意一点,除了使用同一个 gr转载 2021-04-06 20:16:57 · 6997 阅读 · 0 评论 -
Rocket MQ(二)消息详解
首先明确一点,RocketMQ 是基于发布订阅模型的消息中间件。所谓的发布订阅就是说,consumer 订阅了 broker 上的某个 topic,当 producer 发布消息到 broker 上的该 topic 时,consumer 就能收到该条消息。之前我们讲过 consumer group 的概念,即消费同一类消息的多个 consumer 实例组成一个消费者组,也可以称为一个 consumer 集群,这些 consumer 实例使用同一个 group name。需要注意一点,除了使用同一个 gr转载 2021-04-02 20:04:23 · 1560 阅读 · 0 评论 -
Rocket MQ(一)概述
1. 简介主流的MQ有很多,比如ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等。之前阿里巴巴也是使用ActiveMQ,随着业务发展,ActiveMQ IO 模块出现瓶颈,后来阿里巴巴 通过一系列优化但是还是不能很好的解决,之后阿里巴巴把注意力放到了主流消息中间件kafka上面,但是kafka并不能满足他们的要求,尤其是低延迟和高可靠性。所以RocketMQ是站在巨人的肩膀上(kafka)MetaQ的内核,又对其进行了优化让其更满足互联网公司的特点。它是纯Java转载 2021-04-01 20:03:27 · 458 阅读 · 0 评论 -
Kafka详解(十一)Kafka日志读写实现
1.Kafka日志存储结构众所周知,Kafka的Topic可以有多个分区,分区其实就是最小的读取和存储结构,即Consumer看似订阅的是Topic,实则是从Topic下的某个分区获得消息,Producer也是发送消息也是如此。topic-partition关系上图是总体逻辑上的关系,映射到实际代码中在磁盘上的关系则是如下图所示:每个分区对应一个Log对象,在磁盘中就是一个子目录,子目录下面会有多组日志段即多Log Segment,每组日志段包含:消息日志文件(以log结尾)、位移索转载 2020-07-07 21:19:23 · 3091 阅读 · 0 评论 -
Kafka详解(十)高水位和Leader Epoch详解
1. 高水位1.1 高水位的作用在Kafka中,高水位的作用主要有两个定义消息可见性,即用来标识分区下的哪些消息是可以被消费者消费的。 帮助Kafka完成副本同步下面这张图展示了多个与高水位相关的 Kafka 术语。假设这是某个分区 Leader 副本的高水位图。首先,请注意图中的“已提交消息”和“未提交消息”。之前在讲到 Kafka 持久性保障的时候,特意对两者进行了区分...转载 2020-01-28 16:29:47 · 11272 阅读 · 4 评论 -
Kafka详解(九)控制器组件Controller
控制器组件(Controller),是 Apache Kafka 的核心组件。它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群。控制器是重度依赖 ZooKeeper的。集群中任意一台 Broker 都能充当控制器的角色,但是,在运行过程中,只能有一个 Broker 成为控制器,行使其管理和协调的职责。换句话说,每个正常运转的 Kafka 集群,在任意...转载 2020-01-28 15:44:08 · 644 阅读 · 0 评论 -
Kafka详解(八)消费者组重平衡全流程
消费者组的重平衡流程,它的作用是让组内所有的消费者实例就消费哪些主题分区达成一致。重平衡需要借助 Kafka Broker 端的 Coordinator 组件,在 Coordinator 的帮助下完成整个消费者组的分区重分配。今天我们就来详细说说这个流程。1. 触发条件消费者组重平衡触发的3个条件:组成员数量发生变化 订阅主题数量发生变化 订阅主题的分区数发生变化在实际生产环境中...转载 2020-01-28 15:15:02 · 1247 阅读 · 0 评论 -
Kafka详解(七)Purgatory
DelayedOperationPurgatory是用来缓存延时请求(Delayed Request)的。所谓延时请求,就是那些一时未满足条件不能立刻处理的请求。比如设置了 acks=all 的 PRODUCE 请求,一旦设置了 acks=all,那么该请求就必须等待 ISR 中所有副本都接收了消息后才能返回,此时处理该请求的 IO 线程就必须等待其他 Broker 的写入结果。当请求不能立刻处理...转载 2020-01-15 17:11:09 · 1537 阅读 · 0 评论 -
Kafka详解(六)服务端请求处理
1. 请求协议格式Kafka自定义了一组请求协议,用于实现各式各样的交互操作。比如常见的 PRODUCE 请求是用于生产消息的,FETCH 请求是用于消费消息的,METADATA 请求是用于请求 Kafka 集群元数据信息的。所有的请求都是通过TCP网络以Socket的方式进行通讯的。协议的基本结构如下:不同的API(PRODUCE,FETCH等),RequestBody和Resp...转载 2020-01-15 16:18:20 · 596 阅读 · 0 评论 -
Kafka详解(五)Kafka副本机制
所谓的副本机制(Replication),也可以称之为备份机制,通常是指分布式系统在多台网络互联的机器上保存有相同的数据拷贝。它的作用主要有以下几点:提供数据冗余。即使系统部分组件失效,系统依然能够继续运转,因而增加了整体可用性以及数据持久性。 提供高伸缩性。支持横向扩展,能够通过增加机器的方式来提升读性能,进而提高读操作吞吐量。 改善数据局部性。允许将数据放入与用户地理位置相近的地方,从...转载 2020-01-15 15:14:29 · 1332 阅读 · 0 评论 -
Kafka详解(四)多线程消费者实践
1. Kafka Java Consumer设计原理Kafka Java Consumer采用的是双线程设计,即将用户主线程和心跳线程分开。所谓用户主线程,就是你启动 Consumer 应用程序 main 方法的那个线程,而新引入的心跳线程(Heartbeat Thread)只负责定期给对应的 Broker 机器发送心跳请求,以标识消费者应用的存活性(liveness)。引入这个心跳线程还...转载 2020-01-14 16:36:45 · 3990 阅读 · 1 评论 -
Kafka详解(三)客户端TCP链接管理机制
1. 生产者TCP链接管理1.1 Kafka生产者程序概览Kafka 的 Java 生产者 API 主要的对象就是 KafkaProducer。通常我们开发一个生产者的步骤有 4 步。构造生产者对象所需的参数对象。 利用第 1 步的参数对象,创建 KafkaProducer 对象实例。 使用 KafkaProducer 的 send 方法发送消息。 调用 KafkaProduce...转载 2020-01-14 16:10:07 · 2448 阅读 · 1 评论 -
Kafka详解(二)消费者实践及原理剖析
1. 消费者组概念Consumer Group 是 Kafka 提供的可扩展且具有容错性的消费者机制。既然是一个组,那么组内必然可以有多个消费者或消费者实例(Consumer Instance),它们共享一个公共的 ID,这个 ID 被称为 Group ID。组内的所有消费者协调在一起来消费订阅主题(Subscribed Topics)的所有分区(Partition)。当然,每个分区只能由同一...转载 2020-01-14 15:46:03 · 1027 阅读 · 0 评论 -
Kafka详解(一)生产者实践及原理剖析
1. 消息分区机制原理剖析1.1 分区概念Kafka有主题(Topic)的概念,它是承载真实数据的逻辑容器,而在主题之下还分为若干个分区,也就是说Kafka的消息组织方式实际上是三级结构:主题-分区-消息。主题下的每一条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。官网上这张图非常清晰的展示了kafka的三级结构,如下图所示:1.2 分区的作用分区的作用就是提供负载...转载 2020-01-14 14:09:49 · 789 阅读 · 0 评论 -
Kafka概述(二)进阶知识
1. 日志存储1.1 文件目录布局一个分区副本对应一个日志(Log),一个日志会分配成多个日志分段(LogSegment),Log在物理上以文件夹形式存储,而LogSegment对应磁盘上的一个日志文件和2个索引文件及可能的其他文件。 向Log追加消息时是顺序写入的,只有最后一个LogSegment才能执行写入,称为activeSegment,满足一定条件时,需要创建新的activeSe...转载 2020-01-13 16:35:47 · 1008 阅读 · 0 评论 -
Kafka概述(一)基础知识
1. 基本概念1.1 体系架构Producer:生产者 Consumer:消费者 Broker:服务代理节点(kafka实例)1.2 消息存储主题(Topic)kafka消息以topic为单位进行归类,逻辑概念分区(Partition)Topic-Partition为一对多 分区在存储层面可看做是一个可追加的日志文件 消息在追加到分区时会分配一个特定的偏移量(...转载 2020-01-13 15:33:33 · 687 阅读 · 0 评论 -
RabbitMQ详解(三)消息可靠性处理
1. 生产者消息可靠投递在使用RabbitMQ的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ为我们提供了两个选项用来控制消息的投递可靠性模式。RabbitMQ整个消息投递的路径为:producer->rabbitmq broker cluster->exchange->queue->consumermessage从pr...转载 2020-02-13 13:47:19 · 1943 阅读 · 0 评论 -
RabbitMQ详解(二)五种队列及其实现
1. 简单模式一个生产者P发送消息到队列Q,一个消费者C接收。1.1 代码示例pom文件<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.6.0&...转载 2020-02-13 11:43:31 · 1505 阅读 · 0 评论 -
RabbitMQ详解(一)消息通信的概念
1. RabbitMQ消息通信架构说到消息通信,可能我们首先会想到的是邮箱,QQ,微信,短信等等这些通信方式,这些通信方式都有发送者,接收者,还有一个中间存储离线消息的容器。但是这些通信方式和我们要讲的 RabbitMQ 的通信模型是不一样的,比如和邮件的通信方式相比,邮件服务器基于 POP3/SMTP 协议,通信双方需要明确指定,并且发送的邮件内容有固定的结构。而 RabbitMQ 服务器基...转载 2020-02-13 10:38:12 · 734 阅读 · 3 评论