RocketMq学习-注意事项

147 阅读1分钟
  • 订阅关系不一致,同一组下的实例,topic与tag不一致

  • 同服务、同group,多个消费者订阅的topic要保持一致,不然会导致部分队列消息无法被消费

    举例:

    • 假设同服务、同group下,存在consumerA订阅topicA、consumerB订阅topicB
    • topicA、topicB各有4个消费队列

    rebalance操作:

    • consumerA,根据group获取到2个实例数,根据topicA获取队列数4个,那当前consumerA只能消费topicA的2个队列
    • consumerB,根据group获取到2个实例数,根据topicB获取队列数4个,那当前consumerB只能消费topicB的2个队列
    • 那么就会出现问题,topicA跟topicB各有2个队列未被订阅,消息无法被消费
  • 消费实例数最好是Topic队列的整数倍,不然会导致某个实例压力过大

  • consumer实例多的话,建议设置下消费线程数,默认是20个

  • 内存限制,设置拉取的消息条数限制pullThresholdForQueue(默认1000)、消息大小限制pullThresholdSizeForQueue(默认100M)

每个PullRequest对应一个MessageQueue,假如一个Topic有16个Queue,
就对应16个PullRequest,对应16个PullRequst.ProcessQueue,
一个ProcessQueue里最多存储pullThresholdForQueue条消息,
全部打满就是同时有 16 * 1000 条消息在内存中,有16000个Message对象;

同理如果消息大小不限制,全部打满就是 16 * 100M,就是1600M的内存