《RocketMq》六、Client-Consumer消费者详解

本文深入探讨RocketMQ的消费者(Consumer)工作原理,重点关注集群Push模式下的消费、重复消费问题及解决方案、消费失败处理、异常处理等。介绍了Consumer的术语、总体框架、数据结构、主要类管理以及消费流程,阐述了MessageQueue的分配策略和消费位置管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Consumer-集群Push模式-简介:

0、背景介绍

         Consumer主要用于向Broker请求Producer产生的消息,对其进行消费;对于RocketMQ,我们一定很好奇,如何实现分布式的Consumer消费,如何保证Consumer的顺序性,不重复性呢?

 

存在的问题:

1. 如果在集群模式中新增/减少 组(group) 消费者,可能会导致重复消费;原因是:

假设新增消费者前,ConsumerA正在消费MessageQueue-M,消费到第3个offset,

这个时候新增了ConsumerB,那么根据集群模式的AllocateMessageQueue的策略,可能MessageQueue-M被分配给了ConsumerB,这个时候ConsumerA由于消费的offset没有实时更新回去,会导致ConsumerB和ConsumerA之前的消费有重叠;

2. 消费失败怎么办?

3. 异常处理

4. 线程,Auto变量的使用


一、术语介绍

topic: 最细粒度的订阅单位,一个group可以订阅多个topic的消息

group: 组,一个组可以订阅多个topic

clientId: 一个服务(IP/机器)的标识,一个机器可以有多个group;同时,多个相同group的clientId组成一个集群,一起消费消息

messageQueue:消息队列,一个broker的一个topic有多个messageQueue

offset: 每一个消息队列里面还有偏移(commitOffset, offset)的区别,为什么有2offset??

集群消费:

广播消费:

立即消费:

顺序消费:

消费位置:

 

offsetStore---------commitOffset:消费到的offset

PullRequest ------ offset的区别:拉取的位置

 

二、总体框架


三、数据结构

数据结构主要分为2个部分来讲解:

一部分是在MQClientInstance中进行统一管理的,不管是Consumer还是Producer,能够统一管理的部分都放在了这个区域;

还有一部分是在Consumer或Producer中区分管理的,比如各自订阅的MessageQueue,下面对这两个部分分别介绍;

 

-----------------------------------------------PartI:MQClientInstance---------------------------

1. TopicRouteData:

用于保存了所有的Queue信息,不管是consumer还是producer的

private String orderTopicConf;//brokerName:num count
private List<QueueData> queueDatas;
private List<BrokerData> brokerDatas;
private HashMap<String/* brokerAddr */, List<String>/* Filter Server */> filterServerTable;
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值