分布式消息服务-RocketMQ

消费者

2024-07-02 09:16:14

应用进程、消费组、消费者实例的关系

消费组可以有多个消费者实例。

同一进程,同一个消费组不允许有相同的消费者实例。

不同进程,不能创建相同消费者实例,可能产生两个实例分配到相同的队列,部分队列却没有消费的情况。

不同进程,不能创建相同消费者实例,如实例A,两个实例均连到Q1跟Q2,但Q3与Q4并无消费。

应用在创建消费者实例时,指定消费者实例名,应用需要保证不同的进程间,同一消费组不能有相同的实例名。或者应用在创建消费者实例时,不指定实例名,RocketMQ会创建唯一的实例名(JAVA SDK),规则是:groupName|ip|pid|线程id|uuid。

同组Consumer订阅关系一致

RocketMQ 里的一个 Consumer Group 代表一个 Consumer 群组。对于大多数分布式应用来说,一个 Consumer Group 下通常会有多个 Consumer 实例。订阅关系一致指的是同一个 Consumer Group 下所有 Consumer 实例的处理逻辑必须完全一致,一旦订阅关系不一致,消息消费的逻辑就会混乱,甚至导致消息丢失。

由于 RocketMQ 的订阅关系主要由 Topic+Tag 共同组成,因此,保持订阅关系一致意味着同一个 Consumer group 下所有的实例需在以下两方面均保持一致:

1)订阅的 Topic 必须一致;

2)订阅的 Topic 中的 Tag 必须一致。

实例的创建和销毁

1)使用CTGFactory进行创建实例【强制规范】。

2)Consumer是重量级的实例,每次创建、销毁都会消耗系统资源,建议系统       启动的时候创建,系统退出的时候关闭,禁止每次消费消息都创建新的实例【强制规范】。

多消费组消费

一个Topic,可以使用多个消费组消费消息,每个消费组将在服务端独立保存进度。

集群消费意味着多个消费者均衡消费Topic的消息,由于经常不同的程序由多个开发者进行研发和调试,如果使用同一个消费组,在调试过程中存在被其他程序消费者消费的可能,因此应该尽量避免多种类型的应用程序使用同一个消费组。

消费位置设置

消费位置重置可通过控制台进行按时间重置,客户端必须离线。

堆积量

不建议高堆积量的消费,为了预防出现高堆积的情况,建议:

1)边生产边消费,如果消费速度跟不上,增加消费者。

2)消费者一直在线,不要等生产了一段时间再开启消费者,这样会造成消费    的堆积。


uph2ouwGztrN