RocketMQ TAG原理和导致数据没有被消费的原因

it2025-11-13  15

问题描述: 2个消费者,订阅了同一个TOPIC,设置不同的TAG,但是有一个消费者没有消费出数据;

问题原因: 后启动的消费者的TAG覆盖了前一个启动的消费者的TAG,因为在同一个组中

解决方案: 各个消费者分组

原理解析: (1) 首先TAG的作用是在消费者中作过滤 (2) 在processCallBack方法中,判断消费者的tag的hash值,是否存在一个集合中;如果集合存在这个tag的hash值,则消费,否则不处理 (3) 消息存储在commitLog中,还有消息的索引信息存储在consumerQueue这个文件中,索引信息包括:Offset、长度、tag的hash值; (4) 在消费者启动时,在RebalanceImpl类中有一个Map,这个Map记录K是Topic v是tag,这个类是consumer group区分 的 (5) 所以消费者组中的第二个消费者启动后,覆盖前一个消费者的 TAG记录;这样就导致如果一个组内的消费者的TAG不同的话,前一个消费者就不生效了就无法获取消息;

问:其他还有消费者过滤方式吗? 答:SQL Filter

最新回复(0)