rocketmq 踩坑和吐槽 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
bigpigeon
V2EX    Linux

rocketmq 踩坑和吐槽

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

    是不是 go 在阿里是五等公民,没人用,没人做?
    bigpigeon
        12
    bigpigeon  
    OP
       2021-01-15 14:08:17 +08:00
    @yzbythesea 恰好有些耗时长的任务丢到某个队列,导致堆积的很长这种情况
    我们这边需求是想要一些竞争去取任务方法
    no1xsyzy
        13
    no1xsyzy  
       2021-01-15 14:10:46 +08:00
    @young1lin 你触发了我的眼 parse,觉得是用 ons 包管理器安装一个叫做 client 的包,并具有参数 [doge] ……
    bigpigeon
        14
    bigpigeon  
    OP
       2021-01-15 14:11:53 +08:00
    @duwan 而且创建 topic 只能发送方创建,我开发环境订阅一个不存在的 topic 直接报错
    再说非要运维手动管理也不方便吧,比如调整个 topic queue 的操作都没法自动化
    rainfd
        15
    rainfd  
       2021-01-15 14:34:46 +08:00
    @bigpigeon 你订阅一个不存在的 topic 报错这逻辑没啥不对的吧
    bigpigeon
        16
    bigpigeon  
    OP
       2021-01-15 14:38:29 +08:00
    @rainfd 所以要 api 啊,在开发的时候方便创建 topic
    shuangchengsun
        17
    shuangchengsun  
       2021-01-15 14:40:45 +08:00
    关于第一个点,consumer 只要指定 group 了貌似就没有这个烦恼了吧,再就是 create topic 的事儿,我记得是可以通过配置来实现是否允许自己创建 Topic,只不过一般都是关闭的,一般来说部署的时候都是不允许自己创建 Topic,无论是在什么环境都会是关闭的,不然管理起来会很混乱。在阿里里面,有一个运维平台去创建 Topic,只不过在开发环境做的配置,会随着开发流程的推进,同步到测试环境,集成环境直到生产环境。不过我倒是没有用过 go 的 sdk 。
    yukong
        18
    yukong  
       2021-01-15 14:55:14 +08:00
    1. 用过 kafka 都知道 消费者跟消费者组的区别
    2.生成产者的路由规则可以根据 key 与 tag 设置 消费者跟消费者组设置
    3. 从运维层面来看 api 创建 topic 跟删除 topic 都是很危险的行为
    4. go 的 sdk 没有用过 你可以检查一下是不是官方的 反正 java 可以设置
    5. 日志配置 java 配置还是很灵活的 go 不清楚
    yukong
        19
    yukong  
       2021-01-15 14:56:31 +08:00
    关于配置或者日志设置这一方面 可能 go 的 sdk 支持的不是很到位,比较 go 的生态才刚刚起来 要理解一下
    TypeError
        20
    TypeError  
       2021-01-15 15:00:37 +08:00
    MQ 选用的人多的,
    传统金融业务小吞吐选 RabbitMQ 、大吞吐高性能的选 Kafka
    bigpigeon
        21
    bigpigeon  
    OP
       2021-01-15 15:01:46 +08:00
    @shuangchengsun 不同的 group 消息是互相独立的,也就是说一条消息在 2 个组会分别被消费一次,相当于 redis 的 pub sub,我们的需求是消费消息的负载均衡
    bigpigeon
        22
    bigpigeon  
    OP
       2021-01-15 15:11:46 +08:00
    @yukong 特别是文档方面的,rocketmq 的文档写的感觉也很简单,特别是 go sdk 的文档,基本等于没有,全靠阅读源码找用法
    还有就是 rocketmq 的容器化部署也不方便
    日志还是默认打到文件里面而不是 stdout
    而且 dashboard 是第三方的,还得自己想办法构造 Docker image
    相比之下 nsq 这方面就做的好很多
    YouLMAO
        23
    YouLMAO  
       2021-01-18 16:15:42 +08:00
    kpi 3.25
    cominghome
        24
    cominghome  
       2021-01-22 17:28:28 +08:00
    凑合用吧,毕竟 KPI 产物,文档写得鬼一样
    bthulu
        25
    bthulu  
       2021-07-03 10:29:07 +08:00
    @hun2008hun pulsar 的 java client 太大了, 加上它自身的依赖, 高达 36.1M. 我本身项目其余所有依赖加起来都没这家伙大, 不知道 pulsar 在搞什么
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2489 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 10:43 PVG 18:43 LAX 03:43 JFK 06:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86