IT评测·应用市场-qidao123.com技术社区

标题: Kafka 性能为什么比RocketMQ 高 [打印本页]

作者: 一给    时间: 2025-3-28 11:01
标题: Kafka 性能为什么比RocketMQ 高
一、引言

在消息队列范畴,Kafka 和 RocketMQ 都是备受关注的产品。RocketMQ 参考了 Kafka 的设计思绪,在简化架构的同时丰富了功能。然而,尽管 RocketMQ 看起来功能强盛,但 Kafka 始终在市场中占据重要地位且未被镌汰。此中一个关键因素便是性能,本文将深入探究 Kafka 性能为何高于 RocketMQ,以及背后涉及的关键技能 —— 零拷贝技能。
二、性能数据对比

性能指标中的吞吐量数据体现,RocketMQ 每秒能处理 10 万量级的数据,而 Kafka 则能达到 17 万量级。这表明在吞吐量方面,Kafka 的性能更为强劲。
三、零拷贝技能详解

3.1 传统数据传输过程


在消息队列场景中,消息通常存储在磁盘以防止历程瓦解时丢失。当消息从消息队列磁盘发送到消耗者时,传统的数据传输过程如下:


3.传统传输的弊端
整个过程在本机内发生了两次系统调用,对应 4 次用户空间和内核空间的切换,以及 4 次数据拷贝。这种多次的数据拷贝导致效率低下。

3.2 mmap 零拷贝技能

3.2.1 mmap 原理

mmap 是操作系统内核提供的一个方法,它可以将内核空间的缓冲区映射到用户空间。使用 mmap 后,数据发送流程发生如下变化:


3.2.2 mmap 优势与不敷


整个过程发生了两次系统调用,对应 4 次用户空间和内核空间的切换以及 3 次数据拷贝,相比传统方式省下了一次内核空间到用户空间的拷贝。但需要注意的是,mmap 所说的 “零拷贝” 是指用户空间到内核空间这个过程不需要拷贝,并非数据从磁盘发送到网卡的整个过程没有拷贝。

3.3 sendfile 零拷贝技能

3.3.1 sendfile 原理


sendfile 同样是内核提供的方法,从名字可看出是用于发送文件数据。其数据传输过程如下:

上图红色字体的过程为改进点。它把数据描述信息读到socket的缓冲区中,DMA Gather Copy根据socket缓冲的数据描述信息批量的从pageCache中读取到网卡设备上。至此剩余的一次pageCache到socket缓冲的cpu拷贝也被节省掉了。
3.3.2 sendfile 优势

整个过程仅发生了一次系统调用,对应两次用户空间和内核空间的切换,以及两次数据拷贝。这里所说的 “零拷贝” 指的是 0 CPU 拷贝,在 sendfile 场景下需要的两次拷贝都是由 DMA 控制器完成,不占用 CPU 资源,不耽误 CPU 运行其他步伐。

四、Kafka 与 RocketMQ 性能差别原因

RocketMQ 使用的是 MMAP 技能,而 Kafka 使用的是 sendfile 技能。由于 sendfile 技能在系统调用次数以及系统内核切换次数上的优势,使得 Kafka 得到了更高的性能。
4.1 RocketMQ 不使用 sendfile 的原因


五、Kafka 高性能的其他因素


除了零拷贝技能,Kafka 高性能还得益于其他一些优化本领,比方数据压缩等。这些优化本领 RocketMQ 也可以或许借鉴。但在零拷贝技能的选择上,由于各自功能特性的差别,RocketMQ 无法采用 Kafka 所使用的 sendfile 技能。
六、Kafka 和 RocketMQ 的选择建议


经常有人询问 Kafka 和 RocketMQ 该怎样选择。从实际应用场景出发,假如是大数据场景,频繁涉及到如 Spark、Flink 等关键词时,建议使用 Kafka。而在其他场景下,优先选择 RocketMQ。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4