V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yesterdaysun
V2EX  ›  Java

RocketMQ 拉取消费过滤条件的问题

  •  
  •   yesterdaysun · 43 天前 · 1441 次点击
    这是一个创建于 43 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本地搭了一个 RocketMQ 研究一下, 版本 5.0, 然后本地起了一个 SimpleCondumer 做拉取 pull, 一开始都挺正常的, 消息能正常推送, 然后客户端正常能拉取到

    然后当我设置了 filter 之后就不对了, 我给客户端设置了一个特定的 tag 条件, 当这个 tag 值的消息生产后, 能正常消费, 但是如果是其他 tag 值的消息生产后, 奇怪的来了, 客户端日志显示没有接收到任何消息, 但是在 mq 那里显示消息已经被消费掉了

    可以确定不是其他什么消费者把消息处理了, 因为如果这个客户端不启动, mq 可以看到消息一直是未处理状态, 客户端一启动, 未处理就是 0 了, 但是客户端接受消息也是 0 条, 那条消息到底怎么被消费掉了完全不知道

    各位大佬有知道这是什么问题的吗?

    9 条回复    2024-08-12 00:15:31 +08:00
    onepunch
        1
    onepunch  
       43 天前
    yesterdaysun
        2
    yesterdaysun  
    OP
       43 天前
    @onepunch 我就是按文档写的呀, 按我的理解, 我生产了一条 tag=t1 的消息, 然后我订阅 tag=t2 的消息, 这个消息不应该被消费者收到, 我也确实没有收到, 但是这条消息同时也应该留在队列里面, 不应该是被消费的状态, 但是我这里确实显示被消费了, 所以百思不得其解
    GooMS
        3
    GooMS  
       43 天前 via Android
    咱俩头像风格挺像的
    Scarb
        4
    Scarb  
       43 天前
    你这个现象就是正常的啊,过滤不是说这个消息还会在未消费消息那里,而是拉取了之后不处理。
    yesterdaysun
        5
    yesterdaysun  
    OP
       43 天前
    @Scarb 好像有点理解了, 所有的消息会广播给所有的消费组, 但是组内会直接拉取全部并过滤, 所以如果我想要的是一部分消费 t1, 一部分消费 t2, 搞两个消费组就行, 我之前以为消息只回传一次, 一边消费完了就没有了, 其实如果新建消费组订阅的话, 消费位点会从 0 开始, 这样理解对吧
    xiaofan2
        6
    xiaofan2  
       43 天前
    @yesterdaysun 你理解的不对 你可以理解为每个消费组都维护自己的消费进度 消费的过滤是在 broker 这里做的 而不是真正的到了你的消费者
    l970090853
        7
    l970090853  
       42 天前
    原因是 RocketMQ 的消费者是全额拉取 topic 的消息,然后在本地过滤的。(不是该消费者配置 tag 的消息会被过滤掉)
    比如只有 t1 ,t2 两条消息,则消费者拉取到[t1, t2]两条消息,过滤了后只剩 t1 一条消息,然后吐给你的 listener 处理。
    quan7u
        8
    quan7u  
       42 天前
    --“ 但是在 mq 那里显示消息已经被消费掉了”
    mq 应该显示「消费但过滤」(消费组各自维护消费进度)这个你设置不同消费组消费不同的 tag 就能看出区别
    lingalonely
        9
    lingalonely  
       27 天前
    对应你当前的消费者的确是消费了,过滤掉意味当前消费者不会再消费了,如果不是,那 offset 该怎么走
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1169 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:50 · PVG 07:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.