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

mq 选型

  •  2
     
  •   fxjson · 2021-03-27 11:04:28 +08:00 via Android · 6441 次点击
    这是一个创建于 548 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主流 mq 是不是也就 rabbit 和 kafka 了,不过感觉 kafka 貌似集群场景多一点,单机不多吧,rabbit 是 Erlang 开发的,电脑又要安装 Erlang; beanstalk 轻量级队列,挺好用的,但是招聘网站几乎没有企业提到. 唉,对我这种爱给自己设定边界的人来说,真心累……
    61 条回复    2021-03-29 19:35:37 +08:00
    hronro
        1
    hronro  
       2021-03-27 11:11:53 +08:00 via iPhone
    一般不需要再对 mq 做二次开发的话,用 docker 直接跑起来就行了吧,并不需要装 Erlang 环境
    liche123
        2
    liche123  
       2021-03-27 11:25:10 +08:00
    rabbit + 1
    srx1982
        3
    srx1982  
       2021-03-27 11:32:08 +08:00
    我们用 rabbit 主要是因为有延迟队列,要不就用 kafka 了
    halk
        4
    halk  
       2021-03-27 11:36:08 +08:00
    kafka 一般用来做大数据处理的,和 rabbit 定位不同
    国内的 RocketMq 挺不错的
    fxjson
        5
    fxjson  
    OP
       2021-03-27 11:39:34 +08:00 via Android
    @srx1982 beanstalk 也可以延迟,并且可以设置优先级
    fxjson
        6
    fxjson  
    OP
       2021-03-27 11:40:08 +08:00 via Android
    @halk rocket 只有 java 客户端,没有别的语言的客户端
    jzmws
        7
    jzmws  
       2021-03-27 11:49:05 +08:00
    选 mq 关键看自己的场景, 没有好坏之说! 只有合适与否一言!
    fyooo
        8
    fyooo  
       2021-03-27 11:53:08 +08:00 via Android
    考虑一下云端的?比如 SQS
    BBCCBB
        9
    BBCCBB  
       2021-03-27 11:55:08 +08:00
    kafka 单机没有任何毛病!

    无脑 kafka. 或者 pulsar.

    我感觉 pulsar 比较好. 功能特性迭代比较快
    simonlu9
        10
    simonlu9  
       2021-03-27 11:56:53 +08:00
    redis stream,比较轻快,缺点就是 pending 消息不好处理
    halk
        11
    halk  
       2021-03-27 12:00:05 +08:00
    hantsy
        12
    hantsy  
       2021-03-27 12:00:35 +08:00
    RabbitMQ
    hantsy
        13
    hantsy  
       2021-03-27 12:02:41 +08:00
    @halk Rocket 用来吹牛逼还行吧。
    生态什么时候能够有 RabbitMQ 1/10 就考虑用。
    fxjson
        14
    fxjson  
    OP
       2021-03-27 12:05:18 +08:00 via Android
    @hantsy rabbit 有啥生态,不就是一个 mq 吗
    hantsy
        15
    hantsy  
       2021-03-27 12:09:54 +08:00
    @fxjson 只表达个人使用经历。
    你随意。
    dzdh
        16
    dzdh  
       2021-03-27 12:09:59 +08:00
    @fxjson
    beanstalkd 不支持集群部署

    其他推荐:NSQ 、Redis(LUA,参考 Laravel 实现)
    dzdh
        17
    dzdh  
       2021-03-27 12:11:59 +08:00
    @halk 这个 HTTP 是阿里额外的一层封装,社区开源的 Rocket 是没有 REST 接口的(可能阿里云的是『商业版』?)

    阿里另外还有一个产品是 MNS
    zyy314680012
        18
    zyy314680012  
       2021-03-27 12:22:50 +08:00
    rabbitmq
    ufan0
        19
    ufan0  
       2021-03-27 12:25:24 +08:00 via Android   ❤️ 1
    怎么会把 rocket 看的那么低呢,无论是对于业务还是对于中文母语的人来说,非常好上手,性能也很棒。
    leonme
        20
    leonme  
       2021-03-27 13:13:59 +08:00
    @fxjson 多语言支持,论坛活跃,spring 几行配置直接使用......哪个 mq 可以做到?
    privapps
        21
    privapps  
       2021-03-27 13:17:03 +08:00
    墙内 不流行 用 docker 吗?
    leeg810312
        22
    leeg810312  
       2021-03-27 13:55:31 +08:00 via Android   ❤️ 1
    性能优先选 Kafka,有事务需求选 rabbitmq 。除非用 Spring Alibaba 那一套,否则不会考虑 rocketmq,http 协议才有多语言 sdk,生态差太多了
    S2Line
        23
    S2Line  
       2021-03-27 14:14:33 +08:00
    Kafka+Redis 即可
    liveej
        24
    liveej  
       2021-03-27 15:07:06 +08:00
    nats 如何?很轻量,可以集群。配合 go 做了物联网消息的分发处理决定挺好用
    knowckx
        25
    knowckx  
       2021-03-27 15:18:04 +08:00   ❤️ 2
    redis stream+1
    只要不是高负载大流量,redis 多香,可以减少一个架构中的组件
    linnana
        26
    linnana  
       2021-03-27 15:22:15 +08:00
    看完评论我觉得不少人对 RocketMQ 有很多误解。

    选型的时候不要过度高估自己对陌生技术的理解不了解 Erlang 是学不到 rabbit 的精髓的,学习 MQ 不要只学搭个环境调个接口,对不同架构意图和 MQ 的公共实现原理做深入了解才是关键。

    如果你读过 Kafaka 和 RocketMQ 的源码,就明白 RocketMQ 某种程度上就是 Kafka 的子实现,只是两者的技术实现手段不同,甚至我个人认为如果只是从消息队列来看 RocketMQ 的实现是要优于 Kafka 的。
    fxjson
        27
    fxjson  
    OP
       2021-03-27 15:27:12 +08:00 via Android
    @knowckx 同意你说的,如果运维人员有限,多个组件就是一个维护负担
    fox0001
        28
    fox0001  
       2021-03-27 15:54:54 +08:00 via Android
    最近也在考虑 MQ,本来选 RabbitMQ,但是老项目用 Spring3,不能直接用 Spring AMQP 。可能会考虑 Apache ActiveMQ Artemis 。迷惘 ing…
    falcon05
        29
    falcon05  
       2021-03-27 16:18:19 +08:00 via iPhone
    beanstalk 我也觉得挺好用的,好奇为什么国内没什么公司用
    leafre
        30
    leafre  
       2021-03-27 16:58:59 +08:00
    rocketmq 用的比较多
    xuanbg
        31
    xuanbg  
       2021-03-27 17:09:46 +08:00
    事务型:Rabbit
    流量型:Kafaka
    wangyanrui
        32
    wangyanrui  
       2021-03-27 17:32:57 +08:00 via iPhone
    楼上加 1,另外如果小项目直接 redis 也可以,尽量能少一个依赖项就少一个
    ilylx2008
        33
    ilylx2008  
       2021-03-27 18:11:39 +08:00
    @knowckx @fxjson @wangyanrui
    面向 offer 开发,能多用一个组件都比少用强,哈哈。
    jimmyismagic
        34
    jimmyismagic  
       2021-03-27 18:19:22 +08:00
    以前用 rabbit,现在用 kafka,不过经常有人喷 kafka 就只是做日志的
    mywaiting
        35
    mywaiting  
       2021-03-27 18:58:06 +08:00 via iPhone
    我说用 postgres 做的队列会被喷死么?
    maemual
        36
    maemual  
       2021-03-27 19:04:52 +08:00
    @falcon05 #29 知乎有在用,用了好多年了。但是大流量下,性能实在是不行。为了给老项目减少迁移成本,搞了一个 beanstalk on puslar,降低迁移成本,提升性能。
    janxin
        37
    janxin  
       2021-03-27 19:18:05 +08:00
    需求都没有我直接推荐 https://en.wikipedia.org/wiki/Message_queue
    NUT
        38
    NUT  
       2021-03-27 19:29:45 +08:00
    我们在用 RMQ 商业版,感觉没啥大问题。
    我读过 RMQ 的源码,感觉代码挺不错的。其实大吞吐就是硬盘的 mmap 玩法。其实都差不多。
    我们是 java 团队,用了挺久的 RMQ.
    TypeError
        39
    TypeError  
       2021-03-27 19:50:11 +08:00 via Android
    只用主流和支持多语言的

    低吞吐,部署简单的,用 rabbitmq,装个 erlang 而已,有什么麻烦的

    大流量大吞吐的,用 kafka
    fxjson
        40
    fxjson  
    OP
       2021-03-27 19:53:08 +08:00 via Android
    @NUT rmq 是 rabbit 还是 rocket
    guanhui07
        41
    guanhui07  
       2021-03-27 20:14:48 +08:00 via Android
    Rabbitmq
    waising
        42
    waising  
       2021-03-27 21:06:24 +08:00 via iPhone
    公司和个人都是 pulsar
    k9982874
        43
    k9982874  
       2021-03-27 21:12:22 +08:00 via iPhone
    我们用的 nsq,目前足够用。
    如果项目再上一个量级就要考虑迁移到 kafka 。
    wupher
        44
    wupher  
       2021-03-27 21:15:16 +08:00   ❤️ 2
    两者碰巧在工作中都用过,说的错漏之处,还请指正。

    * RabbitMQ 是基于 ERlang 的 Socket Queue 封装。即使是跨互联网传输,单机可轻松支持上万连接。一对一,多对多,RPC,广播都支持。RabbitMQ 使用二进制直接传输你发送的内容,client 本身并不支持诸如加密,压缩。需要发送和接收端自己完成。支持集群和证书加密,但是前者压测性能损失很大,据说在最新的几个版本中有相当优化。

    * Kafka 在我的理解,其实更像一个日志系统。broker 发送过来的信息,按分组等相关设置进行记录并根据设置定时或定量丢弃。Consumer 按 group-id 进行读取。Kafka Client 本身即支持多种压缩算法,连接时修改设置即可。Kafka 消息读取会受 group-id 及分区设置影响。如果用于任务分发队列,RabbitMQ 与 Kafka 的行为很多地方会有差异,在具体的使用场景时需要注意。

    浅见,错漏之处,恳请指正。
    cubecube
        45
    cubecube  
       2021-03-28 01:08:19 +08:00
    @knowckx redis stream 高流量,大负载会有啥问题么?最近选型
    overwatch
        46
    overwatch  
       2021-03-28 01:21:03 +08:00
    我司使用的是 Beanstalkd,优点是轻量级,上手简单。缺点也很明显,不支持集群
    不过我还是比较推荐 Beanstalkd 的,性能非常出色
    sampeng
        47
    sampeng  
       2021-03-28 10:09:19 +08:00 via iPhone
    业务量不大,只是要一个稳定不出问题的消息队列。rabitmq 最少这个选择不会错。因为太成熟了。
    securityCoding
        48
    securityCoding  
       2021-03-28 10:33:09 +08:00
    rocketmq 和 kafka 用的比较多,很多时候根本没有选型的机会啊,更多的是有什么用什么
    BQsummer
        49
    BQsummer  
       2021-03-28 11:07:35 +08:00 via Android   ❤️ 1
    公司 rabbitmq 集群稍微堆点消息就蹦了,扛不住,后来上了阿里云 amqp ; rocketmq 也在用,底层更像 kafka,使用起来更像 rabbitmq
    knowckx
        50
    knowckx  
       2021-03-28 12:38:35 +08:00
    @cubecube 抱歉帮不了你,我们的项目比较小
    waytodelay
        51
    waytodelay  
       2021-03-28 23:12:24 +08:00
    用 kafka 怎么解决事务问题呢?
    NUT
        52
    NUT  
       2021-03-29 09:21:15 +08:00
    @fxjson #40 rocket
    xiangbudaomingzi
        53
    xiangbudaomingzi  
       2021-03-29 09:51:44 +08:00
    @wangyanrui 不建议 redis 业务稍微上来点就要重构
    wangyanrui
        54
    wangyanrui  
       2021-03-29 12:50:42 +08:00 via iPhone
    @xiangbudaomingzi 回答里面带前提了,小项目
    doublleft
        55
    doublleft  
       2021-03-29 13:03:43 +08:00
    确实 redis 足以,或者 zmq
    xiangbudaomingzi
        56
    xiangbudaomingzi  
       2021-03-29 15:32:35 +08:00
    @wangyanrui 除非自己玩的项目
    bugmakerxs
        57
    bugmakerxs  
       2021-03-29 16:29:55 +08:00   ❤️ 1
    两个前互联网中型公司业务上用的都是 rocketmq,好用的很。。
    wangyanrui
        58
    wangyanrui  
       2021-03-29 16:45:29 +08:00
    @xiangbudaomingzi 非要杠这个有意义么兄弟~

    😂😂😂
    lazyfighter
        59
    lazyfighter  
       2021-03-29 18:24:28 +08:00   ❤️ 2
    都什么年代了, 还 rocketmq 不支持多语言客户端,
    https://github.com/search?q=org%3Aapache+rocketmq-client
    interim
        60
    interim  
       2021-03-29 18:58:23 +08:00
    @privapps 喜欢用技术跟人有关,跟墙无关。
    MeteorCat
        61
    MeteorCat  
       2021-03-29 19:35:37 +08:00 via Android
    我也推荐 redis,减少其他引入
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4446 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 01:50 · PVG 09:50 · LAX 18:50 · JFK 21:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.