玩转Kafka—Kafka高性能原因分析

简介: 玩转Kafka—Kafka高性能原因分析

玩转Kafka—Kafka高性能原因分析

Kafka最大的特点:高吞吐,即使在普通的机械硬盘下也可以达到每秒几百万的处理量

对比RocketMQ:

那么Kafka为什么能实现如此高的吞吐量呢?

主要以下四个方面:

  • 磁盘的顺序读写
  • 页缓存
  • 零拷贝技术
  • 批量处理

下面我们来分别解释下

1 磁盘的顺序读写

图片来自《The Pathologies of Big Data》

由上到下三个橙色的进度条分别表示机械硬盘、固态硬盘和内容的随机访问速度

由上到下三个橙色的进度条分别表示机械硬盘、固态硬盘和内容的顺序访问速度

可见,在顺序读写下无论是固态硬盘还是机械硬盘都是和内存差不多的。

2 页缓存

操作系统本身的页缓存(Page Cache),存储紧凑的数据

想要了解页缓存,就必须先要了解什么是“页”,这个在操作系统课程中有比较多的涉及。

页是操作系统存储的一个基本单位,在分页式的存储中,分页存储管理将进程的逻辑地址空间分成若干个页,并为各页加以编号,从0开始。把内存的物理空间分成若干个块,同样加以编号从0开始。为进程分配内存时,以块为单位,将进程的若干个页分别装入到多个可以不相邻接的物理块中。由于进程最后一页通常装不满一块,则剩余页面叫做“页内碎片”。

页面大小: 页面大小应选择适中,并且应该是2的N次幂,通常为1KB~8KB

页缓存是一个相对独立的概念,其根本目的是为了加速对后端设备的IO效率,比如文件的读写。

3 零拷贝技术

借鉴了Linux操作系统下的零拷贝技术,在页缓存和Socket缓冲区之间进行切换,而避免了用户态到内核态之前的切换。

那么,什么是用户态和内核态

  • 用户态:指非特权状态。在此状态下,执行的代码被硬件限定,不能进行某些操作,比如写入其他进程的存储空间,以防止给操作系统带来安全隐患。
  • 内核态:操作系统内核所运行的模式,运行在该模式的代码,可以无限制地对系统存储、外部设备进行访问。

用户态与内核态之间的切换

  • 系统调用
  • 异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
  • 外围设备的中断:当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序

非零拷贝

零拷贝

零拷贝:避免用户态和内核态之间的拷贝

4 批量处理

高效利用网络带宽,批量压缩和处理

相关文章
|
3月前
|
消息中间件 缓存 架构师
关于 Kafka 高性能架构,这篇说得最全面,建议收藏!
Kafka 是一个高吞吐量、高性能的消息中间件,关于 Kafka 高性能背后的实现,是大厂面试高频问题。本篇全面详解 Kafka 高性能背后的实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
关于 Kafka 高性能架构,这篇说得最全面,建议收藏!
|
9月前
|
消息中间件 存储 负载均衡
kafka底层原理分析
kafka底层原理分析
132 2
|
4月前
|
存储 消息中间件 大数据
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
71 4
|
4月前
|
消息中间件 druid 大数据
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
65 2
|
4月前
|
消息中间件 分布式计算 druid
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
80 1
|
4月前
|
消息中间件 druid Kafka
从Apache Flink到Kafka再到Druid的实时数据传输,用于分析/决策
从Apache Flink到Kafka再到Druid的实时数据传输,用于分析/决策
116 0
|
5月前
|
数据采集 消息中间件 存储
实时数据处理的终极武器:Databricks与Confluent联手打造数据采集与分析的全新篇章!
【9月更文挑战第3天】本文介绍如何结合Databricks与Confluent实现高效实时数据处理。Databricks基于Apache Spark提供简便的大数据处理方式,Confluent则以Kafka为核心,助力实时数据传输。文章详细阐述了利用Kafka进行数据采集,通过Delta Lake存储并导入数据,最终在Databricks上完成数据分析的全流程,展示了一套完整的实时数据处理方案。
88 3
|
6月前
|
消息中间件 负载均衡 Kafka
Kafka 实现负载均衡与故障转移:深入分析 Kafka 的架构特点与实践
【8月更文挑战第24天】Apache Kafka是一款专为实时数据处理和流传输设计的高性能消息系统。其核心设计注重高吞吐量、低延迟与可扩展性,并具备出色的容错能力。Kafka采用分布式日志概念,通过数据分区及副本机制确保数据可靠性和持久性。系统包含Producer(消息生产者)、Consumer(消息消费者)和Broker(消息服务器)三大组件。Kafka利用独特的分区机制实现负载均衡,每个Topic可以被划分为多个分区,每个分区可以被复制到多个Broker上,确保数据的高可用性和可靠性。
199 2
|
6月前
|
消息中间件 安全 Kafka
"深入实践Kafka多线程Consumer:案例分析、实现方式、优缺点及高效数据处理策略"
【8月更文挑战第10天】Apache Kafka是一款高性能的分布式流处理平台,以高吞吐量和可扩展性著称。为提升数据处理效率,常采用多线程消费Kafka数据。本文通过电商订单系统的案例,探讨了多线程Consumer的实现方法及其利弊,并提供示例代码。案例展示了如何通过并行处理加快订单数据的处理速度,确保数据正确性和顺序性的同时最大化资源利用。多线程Consumer有两种主要模式:每线程一个实例和单实例多worker线程。前者简单易行但资源消耗较大;后者虽能解耦消息获取与处理,却增加了系统复杂度。通过合理设计,多线程Consumer能够有效支持高并发数据处理需求。
230 4
|
6月前
|
数据采集 消息中间件 存储
实时数据处理的终极武器:Databricks与Confluent联手打造数据采集与分析的全新篇章!
【8月更文挑战第9天】利用Databricks与Confluent打造实时数据处理方案。Confluent的Kafka负责数据采集,通过主题接收IoT及应用数据;Databricks运用Structured Streaming处理Kafka数据,并以Delta Lake存储,支持ACID事务。这套组合实现了从数据采集、存储到分析的全流程自动化,满足企业对大数据实时处理的需求。
61 3