0


kafka夺命三十问——16-22问

16、kafka是如何做到高效读写

    1、kafka本身是分布式集群,且采用分区技术,并行度高

    2、读取数据使用的是稀疏索引,可以很快定位到需要的数据

    3、数据是顺序写入磁盘的,减少大量的寻址时间。

    4、页缓存和零拷贝技术

            页缓存:类似mysql的缓冲池,kafka是根据底层操作系统中PageCache,尽可能多的将空闲内存当作磁盘的缓冲区,当内存中找不到时,才会去磁盘寻找

            零拷贝技术:在传统的数据拷贝技术中,将数据发送到网络上的时,通常需要多次数据拷贝步骤。Kafka 使用零拷贝技术,通过操作系统支持的 
sendfile

系统调用,将数据直接从磁盘读取并发送到网络,绕过了用户空间,降低了 CPU 使用率和内存开销。

17、Kafka集群中数据的存储是按照什么方式存储的?

    首先每个topic中的每一个分区会占用一个文件夹,用于存放数据,kafka中的数据是以segment为单位进行存储的,每个segment最大占用1G,其中segment又分为index(索引)和log(数据)文件。

    但是上面只是逻辑上的存储方式,实质上是没有segment相关的文件夹的,而是含有编号的index和log文件,当其存放的数据在1G左右时,会生成新的index和log文件。

18、kafka中是如何快速定位到一个offset的。

    kafka会在index文件中存放一个相对的offset,用文件名来表示该文件从哪个offset开始,

因此,若想找到一个offset,先找到相对应的index文件,然后在该文件中找到相对的offset,其中也同样记录了数据的position值,去log文件中进行对比,即可定位到offset

19、简述kafka中的数据清理策略。

1、删除

    kafka中的数据删除时,是以segment为单位的,当其过期时间达到,即会删除该segment

2、压缩

    并不是真正的压缩,若有两条数据的key值相等,但是value不同,只会保留一个版本。

    类似不同阶段的一条信息,只会保留最新的版本。

20、消费者组和分区数之间的关系是怎样的?

    每个消费者组中消费者的数量必须小于等于分区数,同一个消费者组中的不同消费者是不能消费同一个分区的。

21、kafka如何知道哪个消费者消费哪个分区?

每个broker中都会有一个coordonator,用于辅助消费者组中每一个消费者的分配。

首先,会根据group_id为每一个消费者组分配一个coordonator,然后在消费者组中会出现一个leader,将分配的计划发送给对应的coordonator,最后,coordonator根据该计划制作方案,然后发送给所有的消费者,消费者执行即可。

22、kafka消费者的消费分区策略有哪些,默认是什么?

1、range

2、RoundRobin(轮询)

3、Sticky(粘性)

4、CooperativeSticky(合作的粘性)

默认是range+CooperativeSticky


本文转载自: https://blog.csdn.net/weixin_52642840/article/details/143694189
版权归原作者 zmd-zk 所有, 如有侵权,请联系我们删除。

“kafka夺命三十问——16-22问”的评论:

还没有评论