Rocketmq常见问题!

前言

本文记录Rocketmq使用过程中的FAQ

1. 消费组必须保持订阅关系一致吗?
消费组必须保证消费关系和逻辑完全一致。业务服务集群更新时,订阅关系可能会出现不一致,这时候只有交集是可靠消费,差集是不可靠消费。假设A服务有a1,a2,a3三个节点,并且订阅了topic1,那么A在更新时,增加订阅topic2,发布时,可能会出现, a1订阅t1t2, a2a3依旧只订阅t1。这时候t1照常消费,t2时而能消费时而不能消费,不可靠。这种不一致关系必须快速修正。

2.我的消费组有很多节点,经常消费不到
同一个消息,消费组内有且只有1个节点会消费的,所以你消费不到,可能是另一个消费组消费掉了。值得注意的是,一定要确保消费组不要被其他应用给混进来了,这个问题很常见。比如机器人服务,意外地以订单服务消费组加入了集群消费中(可能是因为复制了别人的配置代码第一次上线。)。

3.rocketmq已经做到了同一个consumer group只会消费一次,那么还需要做业务消费幂等吗
要,生产中存在灰度服,服务版本大于正式服,二者因为可以处于不同的订阅关系,所以不能处于同一个消费组里(各自处于app_v1, app_v2)。那么这时候,他们的交集订阅的消息,就会因为不在同一个消费组而被消费两次。

所以,就算是rocket做到了同consumer group 只消费一次,我们也要给消费逻辑增加幂等。

4. 持续生产的消息,在没有消费组的情况下会积压吗,怎么解决?
会积压,一直没有消费组的话,会按照一定策略,比如48小时后清理。但是,依旧要警惕,万一48小时内积压了超级多,依然会有挂的风险。

如果消息很重要,那么就需要增加消费组的节点,来增加消费速度。
如果消息不重要,可以重置commitlog的offset。开源后台里的入口是: topic-reset consumer offset

如果消费组需要延迟(重新)上线,生产者生产速率很大,那么建议在消费组上线以前,.将rocketmq后台的已经登记的消费组删掉,防止一直积压。

5. 消费组不用了,需要显示注销吗
需要。当消费组的第一次消费建立以后,他就会在topic和消费组的绑定关系上,增加一条存根,并且给它匹配对应的commitlog。所以当你消费组不使用了,也要显式去后台清理,不然该消费组的commitlog的积压就会一直计数,这个计数会影响消息的存储周期的。

6. 消费组,topic需要预先去rocketm创建好,才可以用吗
如果你保持这样的习惯,是极好的,但是第一次生产topic是可以不预先创建的,可以自动创建,当然(据说)也可以设置成不静默创建。
消费组在不存在生产者的情况提前消费,会收到无topic handler警告,这个警告可以忽略(前提是明确后期会上线生产者,帮助你们调错的)。

猜你喜欢

转载自blog.csdn.net/fwhezfwhez/article/details/113649770