【Kafka】Kafka高性能之道(六)

news2024/10/7 18:30:45

Kafka高性能之道

Kafka高性能原因

高效使用磁盘
1)顺序写磁盘,顺序写磁盘性能高于随机写内存。
2)Append Only 数据不更新,无记录级的数据删除(只会整个segment删s除)。读操作可直接在page cache内进行。如果进程重启,JVM内的cache会失效,但page cache仍然可用。
3)充分利用Page Cache:I/O Scheduler将连续的小块写组装成大块的物理写从而提高性能。I/O Scheduler会尝试将一些写操作重新按顺序排好,从而减少磁盘头的移动时间。
4)充分利用所有空闲内存(非JVM内存):应用层cache也会有对应的page cache与之对应,直接使用pagecache可增大可用cache,如使用heap内的cache,会增加GC负担
5)可通过如下参数强制flush,但并不建议这么做。

log.flush.interval.messages=10000
log.flush.interval.ms=1000

6)支持多Directory(目录)。
零拷贝
传统方式实现:
先读取、再发送,实际经过 1~4 四次 copy。
分别是:
第一次:将磁盘文件,读取到操作系统内核缓冲区;
第二次:将内核缓冲区的数据,copy 到 application 应用程序的 buffer;
第三步:将 application 应用程序 buffer 中的数据,copy 到 socket 网络发送缓冲区(属于操作系统内核的缓冲区);
第四次:将 socket buffer 的数据,copy 到网卡,由网卡进行网络传输。
kafka 作为 MQ 也好,作为存储层也好,无非是两个重要功能,一是 Producer 生产的数据存到 broker,二是 Consumer 从 broker 读取数据;我们把它简化成如下两个过程:
网络数据持久化到磁盘 (Producer 到 Broker)
磁盘文件通过网络发送(Broker 到 Consumer)
批处理和压缩
1)Producer和Consumer均支持批量处理数据,从而减少了网络传输的开销。
2)Producer可将数据压缩后发送给broker,从而减少网络传输代价。目前支持Snappy,Gzip和LZ4压缩。
Partition
1)通过Partition实现了并行处理和水平扩展。
2)Partition是Kafka(包括kafka Stream)并行处理的最小单位。
3)不同Partition可处于不同的Broker,充分利用多机资源。
4)同一Broker上的不同Partition可置于不同的Directory。
ISR
1)ISR(in-sync-replica)实现了可用性和一致性的动态平衡。
//如果这个时间内follower没有发起fetch请求,被认为dead,从ISR移除
replica.log.time.max.ms=10000
//如果follower相比leader落后这么多以上消息条数,会被从ISR移除
replica.log.max.messages=4000
2)ISR可容忍更多的节点失败:Majority Quorum如果要容忍f个节点失败,至少需要2f+1个节点(zookeeper,journalnode)。ISR如果要容忍f个节点失败,至少需要f+1个节点。
3)如何处理Replica Crach:Leader crash后,ISR中的任何replica皆可竞选成为Leader。如果所有replica都crash,可选择让第一个recover的replica或者第一个在ISR中的replica成为leader。unclean.leader.election.enable=true
Kafka性能影响因子
性能影响因子
1)Producer:
在这里插入图片描述

图-1 性能影响因子之producer
如图-1所示,producer个数和吞吐量成正比。
2)Consumer:
在这里插入图片描述

图-2 性能影响因子之consumer
如图-2所示,consumer个数在没有达到partition个数之前,和消费的吞吐量成正比。
3)Partition:
在这里插入图片描述

图-3 性能影响因子之partition
如图-3所示,分区个数和生产的吞吐量,在一定范围内,先增长,当达到某一个值之后趋于稳定,在上下浮动。
4)Message-size:
在这里插入图片描述

图-4 性能影响因子之message
如图-4所示,随着message size的增大,生产者对应的每秒生成的记录数在成下降趋势,生产的数据体积成上升趋势。
5)Replication:
在这里插入图片描述

图-5 性能影响因子之replication
如图-5所示,副本越大,自然需要同步数据的量就越多,自然kafka的生成的吞吐量就越低。
性能检测方式
可以借助kafka脚本来查看kafka集群性能。
1)kafka-producer-perf-test.sh:通过该脚本查看kafka生产者的性能,如图-5 所示。
在这里插入图片描述

图-45生产性能评估

bin/kafka-producer-perf-test.sh --topic hadoop
–num-records 100000 \ -->测试生成多少条记录
–throughput 10000 \ —>生产者的吞吐量,约等于messages/sec
–record-size 10 \ -->每条消息的大小
–producer.config config/producer.properties

2)kafka-consumer-perf-test.sh:通过该脚本查看kafka消费者的性能,如图-6所示。
在这里插入图片描述

图-6 生产性能评估
读取到的结果:

start.time=2019-08-06 02:31:23:738 —>开始时间 end.time=2019-08-06
02:31:24:735 —>结束时间 data.consumed.in.MB=0.9534 —>总共消费的数据体积
MB.sec=0.9562 —>每秒钟消费数据体积
data.consumed.in.nMsg=100000 —>总共消费的数据记录数
nMsg.sec=100300.9027 —>每秒钟消费记录数
rebalance.time.ms=47 —>进行rebalance的时间
fetch.time.ms=950 —>抓取这10w条数据总共花费多长时间
fetch.MB.sec=1.0035 —>每秒钟抓取数据体积
fetch.nMsg.sec=105263.1579 —>每秒钟抓取数据记录数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1632222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pandas dataframe 中显示包含NaN值的单元格

大部分教程只讲如何打印含有NA的列或行。这个函数可以直接定位到单元格,当dataframe的行和列都很多的时候更加直观。 # Finding NaN locations for df.loc def locate_na(df):nan_indices set()nan_columns set()for col, vals in df_descriptors.items():for in…

grafana监控模板 regex截取ip地址

查看prometheus的node服务启动指标up,也可以查看其他的服务 配置监控模板 配置正则截取ip regex截取ip地址 /.*instance"([^"]*):9100*/ #提取(instance")开头,(:9001)结束字段

Qt Creator中变量与函数的注释 - 鼠标悬浮可显示

Qt Creator中变量与函数的注释 - 鼠标悬浮可显示 引言一、变量注释二、函数注释三、参考链接 引言 代码注释在软件开发中起着至关重要的作用。它们不仅有助于开发者理解和维护代码,还能促进团队协作,提高代码的可读性和可维护性。适当的注释应该是简洁明…

头脑风暴式会议设计6步法

头脑风暴是一种常用的会议讨论工具,可以释放参与者的思想,让参与者更加有创意地思考,产生新的想法和见解。引导者在设计会议时,遵循一定的步骤和流程,便能高效激发创新思维,共创出有效的问题解决方案。下图…

百度竞价开户详解:步骤、优势与注意事项

随着互联网的普及,网络营销已成为企业不可或缺的一部分。其中,百度竞价作为一种高效的网络推广方式,受到了越来越多企业的青睐。本文将详细介绍百度竞价开户的流程、优势以及注意事项,帮助企业更好地利用这一工具提升品牌知名度和…

linux运行python怎么结束

假如你已经进入到【>>>】,那么输入【quit()】,然后按一下回车键即可退出了。 如果是想要关闭窗口的,那么直接在这个窗口上按【ctrld】。

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.5

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

stm32单片机开发四、USART

串口的空闲状态时高电平,起始位是低电平,来打破空闲状态的高电平 必须要有停止位,停止位一般为一位高电平 串口常说的数据为8N1,其实就是8个数据位(固定的),N就是none,也就是0个校验…

用socat验证multicase(组播)和broadcast(广播) with k8s容器环境

安装socat 网络允许的话,可以使用yum install -y socat进行安装。 如果是在容器里面运行,建议使用静态链接的socat: 可以从此处下载: Release socat-v1.7.4.4 ernw/static-toolbox GitHub 确定网络接口地址和组播地址 #kubectl exec -i…

低GPU利用率的实证研究;可解决数学问题的数据合成新范式;大规模合成数学推理的指令微调数据;大模型改进推荐系统

编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 本期内容速览 …

KT-0911兔气管插管

简单介绍: 在医学和生物学常用兔进行实验,实验中经常需要给兔气管插管以进行机械通气或气管给药等操作。 详情介绍: 技术参数: 1.材质:PVC注塑一体成型 2.插管外径尺寸:5mm 3.适用动物:兔…

10分钟了解数据质量管理-奥斯汀格里芬 Apache Griffin

在不重视数据质量的大数据发展时期,Griffin并不能引起重视,但是随着数据治理在很多企业的全面开展与落地,数据质量的问题开始引起重视。 1.Griffin简介 Griffin是一个开源的大数据数据质量解决方案,由eBay开源,它支持…

FPlan Part1 EP1(MySQL)

今天完成了MySQL的第一部分,计划分为三部分,预计将在五一假期前完成,以及一个Java小游戏。 重点如下

【数据结构与算法】力扣 225. 用队列实现栈

题目描述 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元…

AI图书推荐:AI驱动的图书写作工作流—从想法构思到变现

《AI驱动的图书写作工作流—从想法到变现》(AI-Driven Book Creation: From Concept to Cash)是Martynas Zaloga倾力打造的一本实用指南,它巧妙地将写作艺术与人工智能前沿技术相结合。此书不仅揭示了AI在图书出版领域的无限潜力,…

网盘—上传文件

本文主要讲解网盘里面关于文件操作部分的上传文件,具体步骤如下 目录 1、实施步骤: 2、代码实现 2.1、添加上传文件协议 2.2、添加上传文件槽函数 2.3、添加槽函数定义 2.4、关联上传槽函数 2.5、服务器端 2.6、在服务器端添加上传文件请求的ca…

17.IIC原理及应用

IIC总线的一些特征 • 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL • 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地 址 主机可以作为主机发送器或主机接收器 • 它是一个真正的多主机总线 如果两个或更多主机同时初始…

sql今天学习总结

排序order by(默认升序) order by id desc(降序排序) order by id,number(先按id排再按name排序) in,not in and or 通配符 where name like "Aa%";选取所有以Aa开头的名字 like "%r" 以r结…

CANoe如何实现TLS协议

TLS,Transport Layer Security,传输层安全协议。是在传输层和应用层之间,为了保证应用层数据能够安全可靠地通过传输层传输且不会泄露的安全防护。 TLS安全协议的实现逻辑,在作者本人看来,大致分为三个部分&#xff1…

Shell脚本入门:编写自动化任务的利器

一、Shell概述 Shell最早产生于20世纪70年代早期的Unix操作系统中。作为一种命令解释器,它位于操作系统的最外层,负责直接与用户进行交互。Shell把用户的输入解释给操作系统,并处理操作系统的输出结果,然后将其反馈给用户。这种交…