关于kafka是否可以替代rabbitmq的一些猜想?

众所周知,kafka为了快速的读写,进行了零拷贝、mmap、单个partition中只能被一个consumer读取等等操作,由此牺牲了全局有序性和事务性等保证。

于是我就有一个猜想,如果手动去维护kafka的100%投递、幂等性等特性是否就可以使得kafka的读写速度高于rabbitmq,而且又同时具有rabbitmq的良好事务性呢?

知道我想到RocketMQ的设计,我感觉这就是对我的猜想的印证:

下面是关于阿里云中间件对RocketMQ的介绍:
RocketMQ是阿里开源的消息中间件,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是Kafka的一个Copy,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。
博客地址:http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/

RocketMQ对kafka的优化:除了常规的全局有序行、幂等性、分布式一致性等操作。并解决了kafka多topic卡顿情况。

博客:http://jm.taobao.org/2017/03/03/RocketMQ-future-idea/

RocketMQ还对kafka的延迟(jvm卡顿和Page Cache)、降流保护(降流算法+Hystix的熔断思想)、高可用(故障转移和故障恢复等措施)

博客:http://jm.taobao.org/2017/01/26/20170126/

毕竟RabbitMQ是一个重量级框架,慢主要是其对事务性的支持考虑得过于全面,使得其性能损失很大。我个人感觉RocketMQ就是对kafka和RobitMQ得一个折中的实现。

就好像什么东西都会有它的缺陷一样,关于RabiitMQ和Kafka还有RocketMQ应对crash的能力:RocketMQ在一定层度上可以保证正常执行的时候的处理数据的不丢失等,但是面对crush的场景,也会出现数据丢失等情况。下面是断电的情况下,Kafka和RocketMQ都存在数据丢失。

博客原文:http://jm.taobao.org/2016/04/28/kafka-vs-rocktemq-4/
在这里插入图片描述

引用某位大牛的博客:为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exchange和Message都持久化。

该文章说明了RabbitMQ如何应对crush的数据不丢失:https://blog.csdn.net/u013256816/article/details/60875666

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值