赞
踩
众所周知,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卡顿情况。
RocketMQ还对kafka的延迟(jvm卡顿和Page Cache)、降流保护(降流算法+Hystix的熔断思想)、高可用(故障转移和故障恢复等措施)
毕竟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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。