• Kafka 与 RabbitMQ 如何选择使用哪个?


    前言

    我们在工作中经常会用到异步消息,主要使用两种消息模式:

    • 消息队列
    • 发布/订阅

    消息队列:多个生产者可以向同一个消息队列发送消息,但是一个消息只能被一个消费者消费。

    发布/订阅:一个消息可以被多个订阅者并发的获取和处理。

    Kafka 和 RabbitMQ 都能满足如上的特性,那么我们应该如何选择使用哪一个?这两个 MQ 有什么差异性?在什么样的场景下适合使用 Kafka,什么场景下适合使用 RabbitMQ ?你是否有这样的疑惑?希望这篇文章能够帮助到你。

    如何选择?

    开发语言

    Kafka:Scala,支持自定义的协议。

    RabbitMQ:Erlang,支持 AMQP、MQTT、STOMP 等协议。

    延迟队列

    如果你有以下这样的需求场景:

    • 生成订单 60 秒后,给用户发短信。
    • 用户 7 天未登录给用户做召回推送。
    • 下单 15 分钟后,未进行付款就关闭订单。

    请选择 RabbitMQ,官方已提供延迟队列插件(x-delayed-message),开箱即用。

    消息顺序性

    如果你的需求场景是需要保证消息是有序的,例如:传递的消息是 MySQL binlog,这种消息不允许是错乱的。

    请选择 Kafka,它能够保证发送到相同主题分区的所有消息都能够按照顺序处理。

    优先级队列

    如果你的需求场景是需要保证消息执行的优先级,例如:首先需要处理 VIP 客户的问题,然后再处理普通客户的问题。

    请选择 RabbitMQ,创建队列时可设置 x-max-priority。

    消息留存

    如果你的需求场景是消费后的消息不马上删除而是希望能够多保留一段时间。

    请选择 Kafka,它能够给每个主题配置超时时间,只要没有达到超时时间的消息都会保留下来,请放心 Kafka 的性能不依赖于存储大小,理论上它存储消息几乎不会影响性能。

    消息过滤

    如果你的需求场景是对接收的消息采取一定的过滤规则进行过滤。

    请选择 RabbitMQ,因为它支持消息路由。不过对于 Kafka 而言,也可以通过其他方式实现。

    可伸缩行

    如果你的需求场景是对伸缩方面、吞吐量方面有极大的要求。

    请选择 Kafka

  • 相关阅读:
    (四十九)android解决同一个界面上ScrollView和 ListView等可滚动控件滚动冲突问题
    (四十八)Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
    (四十七)属性动画Demo
    (四十六)一个属性动画的经典例子(让TextView中的数值从某一个值变成0再变到另一个值)
    (四十五)百度地图在android中的应用
    iOS 检查更新
    iOS Apple Pay
    iOS 获取emoji表情和拦截emoji表情
    iOS拨打电话的三种方式
    Swift
  • 原文地址:https://www.cnblogs.com/netlock/p/15432058.html
Copyright © 2020-2023  润新知