为什么Kafka这么快(Kafka高吞吐、高性能)

2024-03-01 05:28
文章标签 高性能 kafka 吞吐

本文主要是介绍为什么Kafka这么快(Kafka高吞吐、高性能),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 问什么 Kafka 可以这么快?
    • 消息发送端
    • 消息存储
      • 1.零拷贝机制
      • 2.磁盘顺序读写
      • 3.稀疏索引
      • 4.页缓存
      • 5.分区和副本
      • 6.分段存储的好处
    • 消息消费

Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上,使用硬盘并没有带来过多的性能损失。kafka主要使用了以下几个方式实现了超高的吞吐率,Kafka是一个号称能用普通的PC机也能处理超千万亿的消息吞吐量的实时消息流处理平台。

问什么 Kafka 可以这么快?

发送端、存储端、消费端
发送端:异步发送+多分区并行+消息批量发送
存储端:零拷贝技术+磁盘顺序写入+稀疏索引+分区和副本+页缓存
消费端:消费者群组+并行消费+批量拉取

消息发送端

异步发送+多分区并行+消息批量发送
1.异步发送:生产者可以异步发送消息,不必等待每个消息的确认,这大大提高了消息发送的效率。
2.多分区并行:通过将数据分布在不同的分区(partitions)中,生产者可以并行发送消息,从而提高吞吐量。
3.数据压缩+消息批量发送,节省网络IO开销

消息存储

零拷贝技术+磁盘顺序写入+稀疏索引+分区和副本+页缓存

1.零拷贝机制

零拷贝技术:karka使用零拷贝技术来避免了数据的拷贝操作,降低了内存和cpu的使用率,提高了系统的性能。
零烤贝,首先要了解操作系统的o流程,因为有内核态和用户态的区别,为了保证安全性和缓存。
操作系统的虚拟内存分成两部分,一部分是内核空间,一部分是用户空间。这样就可以避免用户进程直接操作内核,保证内核安全。如图所示:
在这里插入图片描述

正常情况下,如果用户要从磁盘读取数据,必须先把数据从磁盘拷贝到内核缓冲区,然后在从内核缓冲区到用户缓冲区,最后才能返回给用户。
在Linux操作系统里面提供了一个sendfile函数,可以实现“零拷贝”。意思就是不需要经过用户缓冲区,可以直接把数据拷贝到网卡。
而Kafka中文件传输最终调用的是Java NIO 库里的 transferTo 方法,实际上最后就会使用到Linux sendfile() 系统调用函数。零拷贝技术可以大大地提升文件传输的性能。

2.磁盘顺序读写

磁盘顺序写入:kark把消息存储在磁盘上,且以顺序的方式写入数据。顶序写入比随机写入速度快很多,因
为它减少了磁头寻道时间,避免了随机读写带来的性能损耗,提高了磁盘的使用效率。

在这里插入图片描述

3.稀疏索引

Kafka的索引并不是每一条消息都会建立索引,而是一种稀疏索引
也就是说,Kafka插入一批消息才会产生一条索引记录。后续利用二分查找,可以大大提高检索效率。
稀疏索引:kafka存储消息是通过分段的日志文件,每个分段都有自己的索引文件,这些索引文件中的条目不
是对分段中的每条消息都建立索引,而是每隔一定数量的消息建立一个索引点,这就构成了稀疏索引,稀疏索
引减少了索引大小,使得加载到内存中的索引更小,提高了查找特定消息的效率
4.批量文件压缩
Kafka默认不会删除数据,它会把所有的消息都变成一个批量的文件。如图所示,它会把相同的Key合并为最后一个Value。这样对消息进行合理的批量压缩,可以减少网络IO损耗。

4.页缓存

kak将其数据存储在磁盘中,但在访问数据时,它会先将数据加载到操作系统的页缓存中,并在页缓存中保留一份副本,从而实现快速的数据访问。
页缓存:kaka将其数据存储在磁盘中,但在访问数据时,它会先将数据加载到操作系统的页缓存中,并在页缓存中保留一份副本,从而实现快速的数据访问。
这个是磁盘的构造。磁盘的盘片不停地旋转,磁头会在磁盘表面画出一个圆形轨迹,这个就叫磁道。从内到位半径不同有很多磁道。然后又用半径线,把磁道分割成了扇区(两根射线之内的扇区组成扇面)。如果要读写数据,必须找到数据对应的扇区,这个过程就叫寻址。
如果读写的多条数据在磁盘上是分散的,寻址会很耗时,这叫随机I/O。
如果读写的数据在磁盘上是集中的,不需要重复寻址的过程,这叫顺序I/O。
而Kafka的Message是不断追加到本地磁盘文件末尾的,而不是随机的写入,这使得Kafka写入吞吐量得到了显著提升。
在一定条件下测试,磁盘的顺序读写可以达到53.2M每秒,比内存的随机读写还要快。

5.分区和副本

kaka采用分区和副本的机制,可以将数据分散到多个节点上进行处理,从而实现了分布式的但
高可用性和负载均衡。

6.分段存储的好处

1、读取效率高
2、方便消息清理,仅删除,无修改

消息消费

1,消费者群组:通过消费者群组可以实现消息的负载均衡和容错处理。
2,并行消费:不同的消费者可以独立地消费不同的分区,实现消费的并行处理。
3,批量拉取:kak支持批量拉取消息,可以一次性拉取多个消息进行消费。减少网络消耗,提升性能

这篇关于为什么Kafka这么快(Kafka高吞吐、高性能)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761340

相关文章

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

构建高性能WEB之HTTP首部优化

0x00 前言 在讨论浏览器优化之前,首先我们先分析下从客户端发起一个HTTP请求到用户接收到响应之间,都发生了什么?知己知彼,才能百战不殆。这也是作为一个WEB开发者,为什么一定要深入学习TCP/IP等网络知识。 0x01 到底发生什么了? 当用户发起一个HTTP请求时,首先客户端将与服务端之间建立TCP连接,成功建立连接后,服务端将对请求进行处理,并对客户端做出响应,响应内容一般包括响应

Nginx高性能分析

Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。本文从底层原理分析 Nginx 为什么这么快! Nginx 的进程模型 Nginx 服务器,正常运行过程中: 多进程:一个 Master 进程、多个 Worker 进程。Master 进程:管理 Work

云原生之高性能web服务器学习(持续更新中)

高性能web服务器 1 Web服务器的基础介绍1.1 Web服务介绍1.1.1 Apache介绍1.1.2 Nginx-高性能的 Web 服务端 2 Nginx架构与安装2.1 Nginx概述2.1.1 Nginx 功能介绍2.1.2 基础特性2.1.3 Web 服务相关的功能 2.2 Nginx 架构和进程2.2.1 架构2.2.2 Ngnix进程结构 2.3 Nginx 模块介绍2.4

Java消息队列:RabbitMQ与Kafka的集成与应用

Java消息队列:RabbitMQ与Kafka的集成与应用 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的分布式系统中,消息队列是实现系统间通信、解耦和提高可扩展性的重要组件。RabbitMQ和Kafka是两个广泛使用的消息队列系统,它们各有特点和优势。本文将介绍如何在Java应用中集成RabbitMQ和Kafka,并展示它们的应用场景。 消息队

Kafka (快速)安装部署

文章目录 1、软件下载&配置环境1_JDK安装2_Zookeeper安装3_Kafka安装 2、单机安装1_配置主机名和IP映射2_单机Kafka配置 3、集群安装1_配置主机名和IP的映射关系2_时钟同步3_Zookeeper配置信息4_集群Kafka配置 4、kafka的其他脚本命令 1、软件下载&配置环境 下面的操作无论是单机部署还是分布式集群环境下都是通用的。 准

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改zookeep