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

问题描述:
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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值