kafka与rocketmq优劣势_kafka rocketmq rabbitmq

kafka与rocketmq优劣势_kafka rocketmq rabbitmq前言:公司采用了两种消息队列,一种是阿里云的rocketMQ,一种是kafka.分别用在了两种不同的场景.这里做个记录.rocketMQ使用场景:1.异步解耦:拿我们的项目举例,有一个场景,是需要pc端触发派单接口,然后发送给app端消息通知.此时要求能够做到每个app都能收到消息,但是又希望这个发送的过程尽量的短,也就是派单接口尽量快.那么这个派送的过程可以采用rocketM…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言:

公司采用了两种消息队列,一种是阿里云的rocketMQ,一种是kafka.分别用在了两种不同的场景.这里做个记录.

rocketMQ

使用场景:

1.异步解耦:

拿我们的项目举例,有一个场景,是需要pc端触发派单接口,然后发送给app端消息通知.此时要求能够做到每个app都能收到消息,但是又希望这个发送的过程尽量的短,也就是派单接口尽量快.那么这个派送的过程可以采用rocketMQ去进行异步处理这个过程.使这个接口能够尽快的给pc端的用户响应,已经派工成功的通知.这个场景就是异步解耦.派工的过程在消息系统中去通过rocketMQ去异步处理.这样起到解耦的作用.并且rocketMQ的广播模式能够保证每个app都能够消费到消息.

2.事务消息:

拿公司支付举例,微信支付的时候想要快速的回应微信的回调.以便让微信知道我们已经收到回调了.尽快改变支付状态就可以了.而我们这边需要再回调中做大量的逻辑处理,如修改订单状态,发送短信等操作.那么这些操作可能耗时很久,使用rocketMQ可以解决耗时久的问题.但是同时又产生一个问题,就是需要保证rocketMQ去修改订单状态的过程是事务性的.不然微信那边已经通知支付成功.但是我们这里状态却没变.这就会让客户认为我钱白付了,又会重复支付的问题.所以rocketMQ的事务消息能够做到事务性.也就是消息的回调处理,我们可以在消费者端去处理完修改订单状态逻辑之后,收到rocketMQ的一个回调通知,报告是否可以提交消息的事务.如果回调中说明修改订单状态有误.我就可以在回调中做消息的补偿处理(修改订单状态.)直到我们的状态更改成功.

3.削峰填谷

拿派单来说,一旦用户群体过多.比如我们公司会在年底某一天搞活动,派单越多,奖励越多,那么使用量上来之后,一定会产生高并发的问题,造成崩溃,影响用户体验的问题.此时我们可以采用mq去解决这种问题.mq最大的好处就是可以让消息不丢失.只要消息发出去了.就能保证消费者一定能够收到.

4.顺序收发

我们没用到,场景如一些游戏平台需要保证优先注册的五百名可以收到5000元奖励,那么要保证消息处理时的五百名一定是实际的顺序.才能做到公平公正.

5.定时消息和延时消息

顾名思义,rocketmq支持一种场景,就是你的某些逻辑需要在特定时间执行.比如我想三十分钟后执行我的逻辑(微信支付三十分钟后如果没有支付,我就停掉该订单的锁定).或者我想在每天早上9点发送短息给客户.都可以采用这种消息类型.

…..可以结合自身场景进行对比使用.

 

kafka

kafka不支持事务消息,支持消息顺序,但是一台代理宕机后,就会产生消息乱序.而rocketMQ不会出现消息乱序,不支持定时消息

使用场景:

1.收集日志.

我们公司系统的分布式日志收集系统,采用的是elk+kafka设计,可参考(六) elasticsearch手把手搭建生产环境ELK加kafka实现终极版日志收集系统.因为kafka每秒可以处理百万条10字节的消息,并且可以持久化数据都磁盘.kafka可以横向扩展,当你需要进行大量数据的持久化存储时,kafka是你的不二之选.可将Kafka视为一种专用于高性能,低延迟提交日志存储,复制和传播的专用分布式文件系统。

2.异步解耦.

同rocketMQ.解耦和生产者和消费者、缓存消息等

3.跟踪用户动作

对于我们的网站,我们想要知道网站哪些模块被用户点击浏览的的最多,进而分析用户的操作习惯.定位哪些模块的点击,浏览等.都可以进行消息的发布和订阅做到实时的监控.

4.分布式流平台

It is possible to do simple processing directly using the producer and consumer APIs. However for more complex transformations Kafka provides a fully integrated Streams API. This allows building applications that do non-trivial processing that compute aggregations off of streams or join streams together.

This facility helps solve the hard problems this type of application faces: handling out-of-order data, reprocessing input as code changes, performing stateful computations, etc.

Kafka中,流处理器是指从输入主题中获取连续数据流,对该输入进行一些处理并生成连续数据流以输出主题的任何东西

可以直接使用生产者和消费者API进行简单处理。但是,对于更复杂的转换,Kafka提供了完全集成的Streams API。这允许构建执行非重要处理的应用程序,这些应用程序计算流的聚合或将流连接在一起。

该功能有助于解决此类应用程序所面临的难题:处理无序数据,在代码更改时重新处理输入,执行状态计算等。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183765.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号