02 | 该如何选择消息队列?
02 | 该如何选择消息队列?
讲述:李玥
时长14:00大小12.81M
选择消息队列产品的基本标准
可供选择的消息队列产品
第二梯队的消息队列
总结
思考题
赞 68
提建议
精选留言(154)
- TANMIYOO2019-07-25仔细阅读了三遍,每一字都是精华 选择中间件的考量维度:可靠性,性能,功能,可运维行,可拓展性,是否开源及社区活跃度 rabbitmq: 优点:轻量,迅捷,容易部署和使用,拥有灵活的路由配置 缺点:性能和吞吐量较差,不易进行二次开发 rocketmq: 优点:性能好,稳定可靠,有活跃的中文社区,特点响应快 缺点:兼容性较差,但随意影响力的扩大,该问题会有改善 kafka: 优点:拥有强大的性能及吞吐量,兼容性很好 缺点:由于“攒一波再处理”导致延迟比较高 pulsar: 采用存储和计算分离的设计,是消息队里产品中黑马,值得持续关注展开共 12 条评论241
- WL2019-07-25请问一下老师rocketMQ是怎么做到低延时的?
作者回复: 主要是设计上的选择问题,Kafka中到处都是“批量和异步”设计,它更关注的是整体的吞吐量,而RocketMQ的设计选择更多的是尽量及时处理请求。 比如发消息,同样是用户调用了send()方法,RockMQ它会直接把这个消息发出去,而Kafka会把这个消息放到本地缓存里面,然后择机异步批量发送。 所以,RocketMQ它的时延更小一些,而Kafka的吞吐量更高。
共 7 条评论106 - Coding小先2019-08-07期待ing,没用过消息队列,没玩过多线程。但我不想成为一个只会CRUD的45
- leslie2019-07-25一套架构中是否可能存在多套中间件?在线的生产业务使用rockmq,运维/监控方面使用kafka。
作者回复: 当然可以,架构无所谓好坏,关键是适合。用多套MQ好处是发挥各自的长处,代价是维护成本比较高。具体是不是适合,还是要架构师根据各种实际情况来权衡。
共 6 条评论42 - Goal2019-07-30听得我激动的喊了一句:“湖人总冠军”
作者回复: 你咋知道我是詹密呢?
共 8 条评论31 - Mark Yao2019-07-27我们就是那种对消息队列功能和性能都没有很高的要求,所以选择RabbitMQ。不管选择哪种消息队列其中还有个很关键的因素,团队里面有人能hold它,最起码熟悉掌握其详细配置。选择不熟悉的MQ会变成不定时炸弹,在生产遇到问题无法快速解决。26
- 猿人谷2019-07-25我所在公司用rabbitmq也遇到消息的有序性无法保证的问题,通过在业务层面去弥补,终究不是种好方案。 请问老师在保证有序性消费上有什么好的方案?
作者回复: 正确的使用RabbitMQ是可以保证严格有序的,你在学习完“03 消息模型:主题和队列有什么区别?”之后,再看一下RabbitMQ的配置应该就会知道该如何解决你的问题了。
共 2 条评论24 - wmg2019-07-26“因为当客户端发送一条消息的时候,Kafka 并不会立即发送出去,而是要等一会儿攒一批再发送,在它的 Broker 中,很多地方都会使用这种“先攒一波再一起处理”的设计。当你的业务场景中,每秒钟消息数量没有那么多的时候,Kafka 的时延反而会比较高。所以,Kafka 不太适合在线业务场景。”,老师,批次的大小是可配置的,在我们的使用场景中,如果消息没有积压的情况下,延迟基本上小于10ms,我想问一下rocketmq的延迟一般是多少?展开
作者回复: 配置得当的情况下,可以做到2-3ms。
共 2 条评论17 - 吴青2019-07-28老师 exchange是rabbitmq独有的么?exchange好像属于amqp协议,看了看amqp似乎说到了。
作者回复: exchange确实是AMQP协议中定义的,RabbitMQ是AMQP的一个实现。
14 - Geek_d6623f2020-03-06想问下老师,关于MQ丢消息是怎么看的。我在用MQ的时候一直没有办法放心,如果在每个发MQ的场景都加一个补偿任务来保证最终一致性,又觉得MQ本身解耦的特性就浪费了。 消息丢失主要有这么几个场景: 1.客户端在发MQ消息的时候,网络抖动timeout导致没有发出去。 2.客户端发MQ消息成功后,MQ本身有可能会丢消息。(虽然我看RocketMQ官方说不会丢,有持久化) 3.业务处理完后,准备发MQ消息的时候,系统崩溃或者重启,导致消息没有发出去。展开
作者回复: 2 这种情况你不用担心,无论从理论上,还是很多生产系统的实际验证,都不会丢消息的。 1、3 二种情况是一样的,就是没发消息或者发失败了,这种情况其实和你把数据往数据库里写失败了是类似的,具体怎么处理还是得看业务。 比如说,重要的业务可以用一主一备二个主题。
13 - angel😇txy🤓2019-08-20老师好,rocket mq为何号称金融级的稳定性呢
作者回复: 金融级只是一种说法,并没有什么标准。但确实有很多涉及金融类的系统选择使用RocketMQ。
11 - 👻 小二2019-08-17老师, 能稍微讲下emq跟nsq 的优缺点跟性能吗?
作者回复: emq是专注于MQTT场景的一个消息队列,如果你的使用场景是连接海量的IoT设备,可以考虑。 nsq使用Go语言开发,如果团队的技术栈是基于Go语言搭建的,nsq是一个很好的选择。 这两个消息队列我都没有深入的使用和测试过,所以没办法跟你分享它们的优缺点和性能。
共 4 条评论10 - yan2019-09-25kafka如果凑不够一批,那等什么时候发送?
作者回复: 建议看一下batch.size和linger.ms这两个参数的含义
9 - zwh2019-07-28正如老师所说,性能优秀rocketmq在国外的知名度真的挺低的。国外除了rabbitmq kafka还有还多公司使用Amazon的simple queue service9
- 业余草2019-07-25rockmq + kafka。业务 + 日志,都需要!9
- InfoQ_686548eeb0d82019-07-25流处理中消息延迟不能避免回溯处理,kafka如果消息已经不在内存里,访问性能会有影响,pulsar 可以很好解决这个问题吗?
作者回复: 挖坟的问题,受内存大小的限制,不太好解决。这和采用那种消息队列关系不太大。有条件的话,可以使用SSD结合Raid,消费速度基本上是可以打满万兆网卡的。
共 2 条评论7 - David Mao2019-07-25我们的云平台有多个项目,每个项目用的消息中间件不同,有的用RabbitMQ, 有的用Kafka, 请教老师,这些消息中间件可以建设成一个统一的,集中式的架构吗?也就是建设成一个消息中间件平台,所有的项目来共用。
作者回复: 当然可以,在京东就是这样的集中式大集群,为所有业务提供消息服务。
共 5 条评论7 - 编程界的小学生2020-07-02我们是用户充值+积分业务。采取的RocketMQ。但是我想吐槽:Rocket MQ捐给apache后,apache把中文注释删的干干净净,问题来了:英文注释一个字没有。好难受呀。6
- 我已经设置了昵称2019-07-27一直不明白一个问题,每秒处理几万~几十万数据,这不应该是按照下游业务的消费能力来讲的吗,比如我们现在的服务tps就只能打到几百。还是说老师和网上讲的都是发送到消息队列的能力?又或是几万几十万只针下游业务只打个日志专门用来做性能测试的情况?希望解答下
作者回复: 我们提到的都是消息队列本身的性能,不包括生产者和消费者处理各自业务逻辑的时间。一般测试消息队列性能的时候,生产者和消费者是没有任何业务逻辑的。
共 7 条评论6 - 137616421692019-07-26Kafka 不太适合在线业务场景。这个我不同意,这些完全可以立即发送
作者回复: 技术有好坏,但架构设计上,特别是技术选择都没有绝对的对错,适合就好。 Kafka的时延虽然稍大一些,但也只是ms基本的差异,也不是完全不能用于在线业务。
共 2 条评论6