关于后端:面试题百日百刷kafka篇四

2次阅读

共计 1038 个字符,预计需要花费 3 分钟才能阅读完成。

锁屏面试题百日百刷,每个工作日保持更新面试题。 请看到最初就能获取你想要的, 接下来的是今日的面试题:

1. 为什么 kafka 能够实现高吞吐?单节点 kafka 的吞吐量也比其余音讯队列大,为什么?

Kafka 是分布式音讯零碎,须要解决海量的音讯,Kafka 的设计是把所有的音讯都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上,应用硬盘并没有带来过多的性能损失。kafka 次要应用了以下几个形式实现了超高的吞吐率

程序读写

kafka 的音讯是一直追加到文件中的,这个个性使 kafka 能够充分利用磁盘的程序读写性能程序读写不须要硬盘磁头的寻道工夫,只需很少的扇区旋转工夫,所以速度远快于随机读写

零拷贝

先简略理解下文件系统的操作流程,例如一个程序要把文件内容发送到网络, 这个程序是工作在用户空间,文件和网络 socket 属于硬件资源,两者之间有一个内核空间在操作系统外部,整个过程为:

在 Linux kernel2.2 之后呈现了一种叫做”零拷贝 (zero-copy)”零碎调用机制,就是跳过“用户缓冲区”的拷贝,建设一个磁盘空间和内存的间接映射,数据不再复制到“用户态缓冲区”零碎上下文切换缩小为 2 次,能够晋升一倍的性能

文件分段

kafka 的队列 topic 被分为了多个区 partition,每个 partition 又分为多个段 segment,所以一个队列中的音讯实际上是保留在 N 多个片段文件中通过分段的形式,每次文件操作都是对一个小文件的操作,十分轻便,同时也减少了并行处理能力

批量发送

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 上, 理解更多请点我头像或到我的主页去取得,谢谢 **

正文完
 0