关于 Kafka 高性能架构,这篇说得最全面,建议收藏!

简介: Kafka 是一个高吞吐量、高性能的消息中间件,关于 Kafka 高性能背后的实现,是大厂面试高频问题。本篇全面详解 Kafka 高性能背后的实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。

关注△mikechen的互联网架构△,10年+BAT架构经验倾囊相授


image.png

大家好,我是 mikechen | 陈睿

Kafka 是一个高吞吐量、高性能的消息中间件,关于 Kafka 高性能背后的实现,是大厂面试高频问题。

本篇,我们全面详解 Kafka 高性能背后的实现。@mikechen

高性能顺序写

首先,Kafka采用顺序写入,可以极大的提升性能。

什么是“顺序写入”?指的是将数据按照顺序写入磁盘,而不是随机写入。

顺序写入的操作方式,可以优化磁盘的 I/O 性能,因为磁盘连续写入的数据更快。

为什么更快呢?你需要深入了解磁盘IO的运行机制。

如下图所示:

image.png

如果你要写入数据,首先需要磁盘“寻道”,“寻道”就是磁盘磁头移动到目标轨道。

如果采用“随机写”,需要磁头在磁盘上来回移动,增加了寻道时间,降低了性能。

而采用顺序写入,通常不需要频繁移动磁头,磁头可以沿着相同的轨道顺序写入数据,减少了寻道时间。

所以,Kafka 在磁盘上,通过追加写入日志文件,这样每次写入操作都在文件末尾进行,而不是更新文件的任意位置。

如下图所示:

image.png

顺序写入将数据,写入到相邻的磁盘块中,保持数据的物理连续性,减少磁头移动。

顺序写入,使得数据在磁盘上的物理位置连续,从而减少了磁头移动、和等待时间,提高了写入性能。

零拷贝

Kafka 使用零拷贝技术,来优化数据从磁盘到网络的传输过程。

这减少了数据在内存、和磁盘之间的复制次数,从而减少了 CPU 使用率和延迟。

先来看看非零拷贝的情况,如下图所示:

image.png

采用非零拷贝,大致流程如下:

  1. 数据读取:首先,数据从磁盘读取,到内核缓冲区(内核空间);
  2. 数据复制:其次,数据从内核缓冲区,复制到用户空间的缓冲区;
  3. 网络传输:如果数据需要通过网络传输,数据再次从用户空间复制到网络缓冲区。

数据在传输、和处理过程中,会经历多次内存复制操作。

每次复制都会消耗 CPU 资源、和内存带宽,增加了系统开销。

所以,如果想体系性能,就可以考虑使用零拷贝技术,如下图所示:

比如:使用 sendfile 技术,可以将文件数据,从磁盘直接传输到网络套接字,而无需将数据复制到用户空间。

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

大致工作过程,如下:

首先,传输请求

应用程序发起 sendfile 调用,请求将文件描述符中的数据发送到网络套接字;

然后,内核处理

操作系统内核,接收到 sendfile 请求后,直接在内核空间中处理数据传输。

数据从文件描述符中读取到内核缓存中,再从内核缓存中写入到网络套接字,而无需将数据拷贝到用户空间。

最后,数据传输

数据在内核空间中完成读取和写入操作,从而避免了用户空间到内核空间的多次内存复制。

页缓存技术

Kafka 的高性能,与操作系统的页缓存(Page Cache)密切相关,理解这一点可以帮助更深入地认识 Kafka 。

我们一起来看Kafka的写入过程,如下图所示:

image.png

当 Kafka 生产者将数据写入主题时,这些数据首先被写入页缓存,而不是直接写入磁盘。

操作系统会将数据缓存到内存中,随后再将其异步地写入磁盘,比如:采用定期的策略等。

为什么要这样来实现呢?原因很简单:就是内存的访问速度,远快于磁盘。

通过这种机制,Kafka 利用内存的高速特性来优化数据写入,同时减少了对磁盘的直接 I/O 操作。

Kafka 通过批量操作将数据合并写入页缓存,减少了磁盘写入的次数,从而,进一步提升了系统吞吐量。

高效的网络设计

Kafka 使用了高效的网络协议,来减少网络开销。

比如:

Kafka 的协议使用了高效的序列化和反序列化机制,减少了网络传输的数据量和处理延迟。

Kafka 支持对消息进行压缩(如 :GZIP、Snappy、LZ4....... 等),通过压缩减少存储空间的占用、和网络传输的开销。

这减少了磁盘 I/O 和网络带宽的消耗,提高了总体性能。

以上,是 Kafka 高性能架构的详细解析,欢迎评论区留言交流或拓展。

我是 mikechen | 陈睿 ,关注【mikechen的互联网架构】,10年+BAT架构技术倾囊相授。

新的架构专题内容,第一时间更新至:阿里架构师进阶全部合集

本文已同步我的技术博客 www.mikechen.cc,更新至我原创的《30W+字阿里架构技术合集》中。

相关文章
|
2月前
|
存储 缓存 安全
某鱼电商接口架构深度剖析:从稳定性到高性能的技术密码
某鱼电商接口架构揭秘:分层解耦、安全加固、性能优化三维设计,实现200ms内响应、故障率低于0.1%。详解三层架构、多引擎存储、异步发布、WebSocket通信与全链路防护,助力开发者突破电商接口“三难”困境。
|
4月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
264 7
|
5月前
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
596 0
|
2月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
3月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
5月前
|
缓存 监控 数据安全/隐私保护
京东平台商品详情接口技术解密:高性能架构与实战经验
本文深入解析京东商品详情接口技术架构,涵盖微服务设计、多级缓存、异步加载及数据一致性保障等关键策略,分享高并发场景下的性能优化实践,助力电商系统稳定高效运行。
|
6月前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
7月前
|
消息中间件 数据可视化 Kafka
docker arm架构部署kafka要点
本内容介绍了基于 Docker 的容器化解决方案,包含以下部分: 1. **Docker 容器管理**:通过 Portainer 可视化管理工具实现对主节点和代理节点的统一管理。 2. **Kafka 可视化工具**:部署 Kafka-UI 以图形化方式监控和管理 Kafka 集群,支持动态配置功能, 3. **Kafka 安装与配置**:基于 Bitnami Kafka 镜像,提供完整的 Kafka 集群配置示例,涵盖 KRaft 模式、性能调优参数及数据持久化设置,适用于高可用生产环境。 以上方案适合 ARM64 架构,为用户提供了一站式的容器化管理和消息队列解决方案。
634 10
|
6月前
|
消息中间件 存储 大数据
阿里云消息队列 Kafka 架构及典型应用场景
阿里云消息队列 Kafka 是一款基于 Apache Kafka 的分布式消息中间件,支持消息发布与订阅模型,满足微服务解耦、大数据处理及实时流数据分析需求。其通过存算分离架构优化成本与性能,提供基础版、标准版和专业版三种 Serverless 版本,分别适用于不同业务场景,最高 SLA 达 99.99%。阿里云 Kafka 还具备弹性扩容、多可用区部署、冷热数据缓存隔离等特性,并支持与 Flink、MaxCompute 等生态工具无缝集成,广泛应用于用户行为分析、数据入库等场景,显著提升数据处理效率与实时性。

热门文章

最新文章