千千梦丶琪 发表于 2023-4-18 05:36:22

面试题百日百刷-kafka篇(四)

锁屏面试题百日百刷,每个工作日坚持更新面试题。****请看到最后就能获取你想要的, 接下来的是今日的面试题:
1.为什么kafka可以实现高吞吐?单节点kafka的吞吐量也比其他消息队列大,为什么?
Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上,使用硬盘并没有带来过多的性能损失。kafka主要使用了以下几个方式实现了超高的吞吐率
顺序读写
kafka的消息是不断追加到文件中的,这个特性使kafka可以充分利用磁盘的顺序读写性能顺序读写不需要硬盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写
零拷贝
先简单了解下文件系统的操作流程,例如一个程序要把文件内容发送到网络,这个程序是工作在用户空间,文件和网络socket属于硬件资源,两者之间有一个内核空间在操作系统内部,整个过程为:
https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/36f63f147c474ad9ba0d106ae84d30ec~tplv-k3u1fbpfcp-zoom-1.image
在Linux kernel2.2 之后出现了一种叫做”零拷贝(zero-copy)”系统调用机制,就是跳过“用户缓冲区”的拷贝,建立一个磁盘空间和内存的直接映射,数据不再复制到“用户态缓冲区”系统上下文切换减少为2次,可以提升一倍的性能
https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/50cd45b64c214130879bcfe31d56d212~tplv-k3u1fbpfcp-zoom-1.image
文件分段
kafka的队列topic被分为了多个区partition,每个partition又分为多个段segment,所以一个队列中的消息实际上是保存在N多个片段文件中通过分段的方式,每次文件操作都是对一个小文件的操作,非常轻便,同时也增加了并行处理能力
https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bae4dc7d57ae4eea896563a9f54b9d84~tplv-k3u1fbpfcp-zoom-1.image
批量发送
Kafka允许进行批量发送消息,先将消息缓存在内存中,然后一次请求批量发送出去比如可以指定缓存的消息达到某个量的时候就发出去,或者缓存了固定的时间后就发送出去如100条消息就发送,或者每5秒发送一次这种策略将大大减少服务端的I/O次数
数据压缩
Kafka还支持对消息集合进行压缩,Producer可以通过GZIP或Snappy格式对消息集合进行压缩压缩的好处就是减少传输的数据量,减轻对网络传输的压力Producer压缩之后,在Consumer需进行解压,虽然增加了CPU的工作,但在对大数据处理上,瓶颈在网络上而不是CPU,所以这个成本很值得
2.Kafka的ISR
ISR代表In-Sync Replicas,在Kafka里表示目前处于同步状态的那些副本(replica)。
Kafka规定一条消息只有当ISR中所有的副本都复制成功时,才能被消费。
全部内容在git上,了解更多请点我头像或到我的主页去获得,谢谢

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 面试题百日百刷-kafka篇(四)