面试官问:kafka为什么如此之快?

这篇具有很好参考价值的文章主要介绍了面试官问:kafka为什么如此之快?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

天下武功,唯快不破。同样的,kafka在消息队列领域,也是非常快的,这里的块指的是kafka在单位时间搬运的数据量大小,也就是吞吐量,下图是搬运网上的一个性能测试结果,在同步发送场景下,单机Kafka的吞吐量高达17.3w/s,不愧是高吞吐量消息中间件的行业老大。

面试官问:kafka为什么如此之快?

那究竟是什么原因让kafka如此之快呢?这也是面试官非常喜欢问的问题。

四个原因

原因一:磁盘顺序读写

生产者发送数据到kafka集群中,最终会写入到磁盘中,会采用顺序写入的方式。消费者从kafka集群中获取数据时,也是采用顺序读的方式。

无论是机械磁盘还是固态硬盘SSD,顺序读写的速度都是远大于随机读写的。因为对于机械磁盘顺序读写省去了磁头频繁寻址和旋转盘片的开销。而固态硬盘就更加复杂,这里不展开阐述。

下图是网上关于读写方式的性能比较。

面试官问:kafka为什么如此之快?

  • 机械磁盘顺序读写 53M/s,随读写 316k/s
  • 固态硬盘顺序读写 42M/s, 随机读写 1000k/s

因而,由于kafka一般使用机械磁盘存储消息,因为机械磁盘的价格远小于固态硬盘SSD。

原因二:PageCache页缓存技术

前面提到了kafka采用顺序读写写入到磁盘中,难道是直接kafka到磁盘吗,实际上不是的,中间多了一道操作系统的PageCache页缓存,可以理解为内存。

面试官问:kafka为什么如此之快?

  • 当kafka有写操作时,先将数据写入PageCache中,然后在定时方式顺序写入到磁盘中。
  • 当读操作发生时,先从PageCache中查找,如果找不到,再去磁盘中读取。

通过页缓存技术,更近一步的提高了读写的性能。

原因三:零拷贝技术

kafka之所以快的另外一个原因是采用了零拷贝技术。

首先我们来看下从磁盘读取数据到网卡场景下,传统IO的整个过程,如下图所示:

面试官问:kafka为什么如此之快?

传统IO模型下,从磁盘读取数据,写到网卡设备中,经历了4次用户态和内核态之间的切换,以及4次数据的拷贝,包括CPU拷贝和DMA拷贝。这些操作都是十分损耗性能。

DMA, Direct Memory Access, 直接内存访问是一些计算机总线架构提供的功能,它能使数据从附加设备(如磁盘驱动器)直接发送到计算机主板的内存上。

那能否减少这样的切换和拷贝呢? 答案是肯定的,不知道大家发下没有,kafka的消息在应用层做任何转换,怎么存就怎么取,你看连序列化、反序列化都是在生产者和消费者做的。所以kafka采用了sendfile的零拷贝技术

面试官问:kafka为什么如此之快?

sendfile零拷贝技术在内核态将数据从PageCache拷贝到了Socket缓冲区,这样就大大减少了不同形态的切换以及拷贝。

所谓的零拷贝技术不是指不发生拷贝,而是在用户态没有进行拷贝。

原因四:kafka分区架构和批量操作

一方面kafka的集群架构采用了多分区技术,并行度高。另外一方面,kafka采用了批量操作。生产者发送的消息先发送到一个队列,然后有sender线程批量发送给kafka集群。

面试官问:kafka为什么如此之快?

如何提高生产者的吞吐量?

kafka生产者提供的一些配置参数可以有助于提高生产者的吞吐量。

参数名称 描述
buffer.memory RecordAccumulator 缓冲区总大小,默认 32m。适当增加该值,可以提高吞吐量。
batch.size 缓冲区一批数据最大值,默认 16k。适当增加该值,可以提高吞吐量,但是如果该值设置太大,会导致数据传输延迟增加。
linger.ms 如果数据迟迟未达到 batch.sizesender线程等待 linger.time之后就会发送数据。单位 ms,默认值是 0ms,表示没有延迟。生产环境建议该值大小为 5-100ms 之间。
compression.type 指定消息的压缩方式,默认值为“none ",即默认情况下,消息不会被压缩。该参数还可以配置为 "gzip","snappy" 和 "lz4"。对消息进行压缩可以极大地减少网络传输、降低网络 I/O,从而提高整体的性能 。

如何提高消费者的吞吐量?

  1. 如果是Kafka消费能力不足,则可以考虑增加Topic的分区数,并且同时提升消费组的消费者数量,消费者数 = 分区数,并发度最高
  2. 如果是下游的数据处理不及时:提高每批次拉取的数量。批次拉取数据过少,使处理的数据小于生产的数据,也会造成数据积压。
  • fetch.max.bytes:默认 Default: 52428800(50 m)。消费者获取服务器端一批消息最大的字节数。如果服务器端一批次的数据大于该值(50m)仍然可以拉取回来这批数据,因此,这不是一个绝、对最大值。一批次的大小受 message.max.bytes (broker config)or max.message.bytes (topic config)影响。
  • max.poll.records:一次 poll 拉取数据返回消息的最大条数,默认是 500
  1. 优化消费者代码处理的逻辑。

总结

本文总结了Kafka为什么快的原因,4个关键字,磁盘顺序读写,页缓存技术,零拷贝技术,Kafka本身分区机制和批量操作。我们抓住这4个关键字,有点到面地和面试官娓娓道来。

Kafka 在性能上确实是一骑绝尘,但在消息选型过程中,我们不仅仅要参考其性能,还有从功能性上来考虑,例如 RocketMQ 提供了丰富的消息检索功能、事务消息、消息消费重试、定时消息等。

通常在大数据、流式处理场景基本选用 Kafka,业务处理相关选择 RocketMQ更佳。

欢迎关注个人公众号【JAVA旭阳】交流学习文章来源地址https://www.toymoban.com/news/detail-472086.html

到了这里,关于面试官问:kafka为什么如此之快?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试题:Kafka 为什么那么快?

    有人说:他曾在一台配置较好的机子上对 Kafka 进行性能压测,压测结果是 Kafka 单个节点的极限处理能力接近每秒 2000万 条消息,吞吐量达到每秒 600MB。 那 Kafka 为什么这么快?如何做到这个高的性能? 本篇文章主要从这 3 个角度来分析: 生产端 服务端 Broker 消费端 先来看下

    2024年01月22日
    浏览(54)
  • 什么是 sudo,为什么它如此重要?

    在当今的技术世界中,Linux 操作系统广泛应用于各种环境,包括个人计算机、服务器和嵌入式设备。作为一种强大的开源操作系统,Linux 提供了丰富的安全功能,以保护系统和用户的数据安全。在 Linux 安全领域中,sudo 是一项关键的安全工具,它在用户权限管理和系统保护方

    2024年02月06日
    浏览(43)
  • 大数据为什么如此重要?

    简单来说,大数据就是结构化的传统数据再加上非结构化的新数据。那么传统数据和新数据又是什么呢?传统数据就是IT业务系统里面的数据,如客户资料、财务数据等。这些数据是结构化的,量也不是特别大,一般只是TB级。对比传统数据,还有一种叫“新数据”,是来源于

    2024年02月08日
    浏览(48)
  • 什么是可视化编程?为什么它如此重要?

    可视化编程,又叫可视化程序设计,一直以来就是备受讨论的“热门技术”。一方面,程序员抵触它,觉得它不如用代码开发。另一方面,对于产品经理等稍微懂点开发的业余人员,它确实能提供价值。所以,它到底是什么呢?本文将从可视化编程的定义、应用、优势等三个

    2024年02月12日
    浏览(50)
  • Hadoop为什么如此流行——史上最详解

    作者:禅与计算机程序设计艺术 Hadoop是一个开源的分布式计算框架,其出现主要是为了解决海量数据的存储、计算、分析、和处理问题。随着互联网的数据量不断增加,分布式系统越来越普及,Hadoop也越来越受到青睐。它具备高容错性、高可靠性、弹性扩展等特性,能够适应

    2024年02月08日
    浏览(53)
  • 僵尸进程?孤儿进程?为什么他有如此惨烈的身世...

    🌸作者简介: 花想云 ,在读本科生一枚,C/C++领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人…致力于 C/C++、Linux 学习。 🌸 专栏简介:本文收录于 Linux从入门到精通 ,本专栏主要内容为本专栏主要内容为Linux的系统性学习,专为小白打造的文章专栏。

    2024年02月05日
    浏览(65)
  • 为什么如此安全的https协议却仍然可以被抓包呢?(1)

    好了,阅读到了这里,说明你对https已经非常熟悉了,那么你一定知道,https协议是结合了非对称加密和对称加密一起工作,从而保证数据传输的安全性的。 非对称加密用于确保客户端可以安全地获取到服务器的真实公钥。对称加密用于确保客户端和服务器之间的数据传输不

    2024年04月26日
    浏览(41)
  • 拆解Spring boot:Springboot为什么如此丝滑而简单?源码剖析解读自动装配

    🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏 《Spring 狂野之旅:从入门到入魔》 🚀 本专栏带你从Spring入门到入魔   这是苏泽的个人主页可以看到我其他的内容哦👇👇 努力的苏泽 http://suzee.blog.csdn

    2024年03月23日
    浏览(44)
  • 『Linux从入门到精通』第 ⑭ 期 - 僵尸进程?孤儿进程?为什么他有如此惨烈的身世...

    🌸作者简介: 花想云 ,在读本科生一枚,C/C++领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人…致力于 C/C++、Linux 学习。 🌸 专栏简介:本文收录于 Linux从入门到精通 ,本专栏主要内容为本专栏主要内容为Linux的系统性学习,专为小白打造的文章专栏。

    2024年02月16日
    浏览(67)
  • kafka为什么快

    消息发送 1、批量发送: Kafka 通过将多个消息打包成一个批次,减少了网络传输和磁盘写入的次数,从而提高了消息的吞吐量和传输效率。 2、异步发送: 生产者可以异步发送消息,不必等待每个消息的确认,这大大提高了消息发送的效2.率 3、消息压缩: 支持对消息进行压缩,

    2024年02月02日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包