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

mq 选型

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

    无脑 kafka. 或者 pulsar.

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

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

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

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

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

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

    大流量大吞吐的,用 kafka
    fxjson
        40
    fxjson  
    OP
       253 天前 via Android
    @NUT rmq 是 rabbit 还是 rocket
    guanhui07
        41
    guanhui07  
       253 天前 via Android
    Rabbitmq
    waising
        42
    waising  
       253 天前 via iPhone
    公司和个人都是 pulsar
    k9982874
        43
    k9982874  
       253 天前 via iPhone
    我们用的 nsq,目前足够用。
    如果项目再上一个量级就要考虑迁移到 kafka 。
    wupher
        44
    wupher  
       253 天前   ❤️ 2
    两者碰巧在工作中都用过,说的错漏之处,还请指正。

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

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

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

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