V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
bigpigeon
V2EX  ›  Linux

rocketmq 踩坑和吐槽

  •  
  •   bigpigeon · Jan 15, 2021 · 5580 views
    This topic created in 1930 days ago, the information mentioned may be changed or developed.
    • 1 个 queue 只能被一个消费者订阅,也就是说如果你消费者增加时必须手动调整 topic 的队列数
    • round robin 只在 queue 层面,可以理解为就是生产者吧消息平均分配到多个 queue 上,但 queue 只能被单消费者消费,在慢任务做负载均衡不好做
    • 没有 create topic 的 api,必须通过 mqadmin 来创建 topic,极其麻烦
    • go sdk 的 consumer 连 ConsumeTimeout,ConsumeConcurrentlyMaxSpan,PullThresholdForQueue 这几个这么重要的参数都没有暴露出来,并发控制都不好做
    • go 的 sdk 日志乱打,1 秒几十行的无用日志,压根没法正常阅读,必须通过环境变量控制日志级别

    这 2 个月用下来的体验就是 go 开发者建议还是使用 nsq,没有入坑的别踩这个坑了

    阿里的组件还是别碰的好

    25 replies    2021-07-03 10:29:07 +08:00
    fantastM
        1
    fantastM  
       Jan 15, 2021
    对于第一点,据我了解,Kafka 中的分区和消费者也是这种设计。这样做的原因估计是在实现上会简单很多吧
    hun2008hun
        2
    hun2008hun  
       Jan 15, 2021
    推荐下 pulsar 吧,前三个问题都可以解决。go sdk 不了解,我只用过 java client
    ylsc633
        3
    ylsc633  
       Jan 15, 2021
    go rmq sdk 问题挺多的 当然了,也可能是我菜, 不会用..
    ddxx200
        4
    ddxx200  
       Jan 15, 2021
    我一直用 RocketMQ,不过是 Java 的,没什么问题哈
    bigpigeon
        5
    bigpigeon  
    OP
       Jan 15, 2021
    @ylsc633 是啊
    go sdk 我还遇到 一个 go 进程的 producer 关了,consumer 也不可用
    一个进程无法创建多个 consumer 对象,等等问题,如果不是老大拍板,我肯定换回 nsq 了
    rnicrosoft
        6
    rnicrosoft  
       Jan 15, 2021 via Android
    关于第一个,我觉得没啥问题,1 个 topic 下面多个 queue 本身就是实现一种负载均衡了。多个消费者可以扔进一个消费 group 里,不需要去做每个消费者和 queue 之间的绑定,可以按负载随时启动新的消费者实例
    young1lin
        7
    young1lin  
       Jan 15, 2021 via Android
    ons client[doge],用过加 tag 的 topic,不好用。
    yzbythesea
        8
    yzbythesea  
       Jan 15, 2021
    @bigpigeon 慢任务下为什么不好做负载均衡?
    joesonw
        9
    joesonw  
       Jan 15, 2021
    对数据有保障性要求的话还是 rabbitmq 吧. nsq 没 persistence, 每次都落盘的话性能就爆炸了.
    duwan
        10
    duwan  
       Jan 15, 2021
    前两点在 kafka 中不也是一样的嘛?
    第三点为了生产环境的资源考虑的吧,只有运维人员可以操作,不允许开发人员随意创建 topic,开发环境可以配置自动创建不存在的 topic
    后两点不了解
    cassyfar
        11
    cassyfar  
       Jan 15, 2021
    貌似整个 topic management 都不支持。。。阉割版 go client

    是不是 go 在阿里是五等公民,没人用,没人做?
    bigpigeon
        12
    bigpigeon  
    OP
       Jan 15, 2021
    @yzbythesea 恰好有些耗时长的任务丢到某个队列,导致堆积的很长这种情况
    我们这边需求是想要一些竞争去取任务方法
    no1xsyzy
        13
    no1xsyzy  
       Jan 15, 2021
    @young1lin 你触发了我的眼 parse,觉得是用 ons 包管理器安装一个叫做 client 的包,并具有参数 [doge] ……
    bigpigeon
        14
    bigpigeon  
    OP
       Jan 15, 2021
    @duwan 而且创建 topic 只能发送方创建,我开发环境订阅一个不存在的 topic 直接报错
    再说非要运维手动管理也不方便吧,比如调整个 topic queue 的操作都没法自动化
    rainfd
        15
    rainfd  
       Jan 15, 2021
    @bigpigeon 你订阅一个不存在的 topic 报错这逻辑没啥不对的吧
    bigpigeon
        16
    bigpigeon  
    OP
       Jan 15, 2021
    @rainfd 所以要 api 啊,在开发的时候方便创建 topic
    shuangchengsun
        17
    shuangchengsun  
       Jan 15, 2021
    关于第一个点,consumer 只要指定 group 了貌似就没有这个烦恼了吧,再就是 create topic 的事儿,我记得是可以通过配置来实现是否允许自己创建 Topic,只不过一般都是关闭的,一般来说部署的时候都是不允许自己创建 Topic,无论是在什么环境都会是关闭的,不然管理起来会很混乱。在阿里里面,有一个运维平台去创建 Topic,只不过在开发环境做的配置,会随着开发流程的推进,同步到测试环境,集成环境直到生产环境。不过我倒是没有用过 go 的 sdk 。
    yukong
        18
    yukong  
       Jan 15, 2021
    1. 用过 kafka 都知道 消费者跟消费者组的区别
    2.生成产者的路由规则可以根据 key 与 tag 设置 消费者跟消费者组设置
    3. 从运维层面来看 api 创建 topic 跟删除 topic 都是很危险的行为
    4. go 的 sdk 没有用过 你可以检查一下是不是官方的 反正 java 可以设置
    5. 日志配置 java 配置还是很灵活的 go 不清楚
    yukong
        19
    yukong  
       Jan 15, 2021
    关于配置或者日志设置这一方面 可能 go 的 sdk 支持的不是很到位,比较 go 的生态才刚刚起来 要理解一下
    TypeError
        20
    TypeError  
       Jan 15, 2021
    MQ 选用的人多的,
    传统金融业务小吞吐选 RabbitMQ 、大吞吐高性能的选 Kafka
    bigpigeon
        21
    bigpigeon  
    OP
       Jan 15, 2021
    @shuangchengsun 不同的 group 消息是互相独立的,也就是说一条消息在 2 个组会分别被消费一次,相当于 redis 的 pub sub,我们的需求是消费消息的负载均衡
    bigpigeon
        22
    bigpigeon  
    OP
       Jan 15, 2021
    @yukong 特别是文档方面的,rocketmq 的文档写的感觉也很简单,特别是 go sdk 的文档,基本等于没有,全靠阅读源码找用法
    还有就是 rocketmq 的容器化部署也不方便
    日志还是默认打到文件里面而不是 stdout
    而且 dashboard 是第三方的,还得自己想办法构造 Docker image
    相比之下 nsq 这方面就做的好很多
    YouLMAO
        23
    YouLMAO  
       Jan 18, 2021
    kpi 3.25
    cominghome
        24
    cominghome  
       Jan 22, 2021
    凑合用吧,毕竟 KPI 产物,文档写得鬼一样
    bthulu
        25
    bthulu  
       Jul 3, 2021
    @hun2008hun pulsar 的 java client 太大了, 加上它自身的依赖, 高达 36.1M. 我本身项目其余所有依赖加起来都没这家伙大, 不知道 pulsar 在搞什么
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3786 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 64ms · UTC 10:31 · PVG 18:31 · LAX 03:31 · JFK 06:31
    ♥ Do have faith in what you're doing.