1、kafka是如何做到高效读写
1)Kafka 本身是分布式集群,可以采用分区技术,并行度高
2)读数据采用稀疏索引,可以快速定位要消费的数据。
3)顺序写磁盘
Kafka 的 producer 生产数据,要写入到 log 文件中,写的过程是一直追加到文件末端, 为顺序写。官网有数据表明,同样的磁盘,顺序写的速度远大于随机写。这与磁盘的机械结构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。
4)页缓存 + 零拷贝技术
零拷贝:Kafka的数据加工处理操作交由Kafka生产者和Kafka消费者处理。Kafka Broker应用层不关心存储的数据,所以就不用 走应用层,传输效率高
PageCache页缓存:Kafka重度依赖底层操作系统提供的PageCache功 能。当上层有写操作时,操作系统只是将数据写入 PageCache。当读操作发生时,先从PageCache中查找,如果找不到,再去磁盘中读取。实际上PageCache是把尽可能多的空闲内存都当做了磁盘缓存来使用
2、Kafka集群中数据的存储是按照什么方式存储的?
每个partition对应于一个log文件,该log文件中存储的就是Producer生产的数据。Producer生产的数据会被不断追加到该log文件末端。每个partition分为多个segment。每个segment包括:".index"文件、".log"文件和"**.timeindex"**等文件。
log:日志文件
index:记录偏移量索引的文件
timeindex:记录时间戳索引的文件
3、简述kafka中的数据清理策略。
1)delete 日志删除:将过期数据删除
log.cleanup.policy = delete 所有数据启用删除策略
(1)基于时间:默认打开。以 segment 中所有记录中的最大时间戳作为该文件时间戳。
(2)基于大小:默认关闭。超过设置的所有日志总大小,删除最早的 segment。
如果一个 segment 中有一部分数据过期,一部分没有过期的情况下:
2)compact 日志压缩(合并的意思,不是真的压缩)
compact日志压缩:对于相同key的不同value值,只保留最后一个版本。
4、消费者组和分区数之间的关系是怎样的?
消费者组,由多个consumer组成。形成一个消费者组的条件,使所有消费者的groupid相同。
• 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费。
• 消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者
5、kafka如何知道哪个消费者消费哪个分区?
groupId对50取模,看最后的结果是哪个分区节点,假如是1分区,那么1分区的协调器就是本次消费者组的老大,消费者纷纷向该协调器进行注册,协调器从中随机选择一个消费者作为本次消费的Leader,然后把本次消费的具体情况发送给Leader,让其制定一个消费计划(就是哪个消费者消费哪个分区),然后Leader发送给协调器,协调器再进行群发,将计划公布,各个消费者按照这个计划进行消费。
6、kafka消费者的消费分区策略有哪些,默认是个?
1)Range 以及再平衡 (默认)
2)RoundRobin(轮询) 以及再平衡
3)Sticky 以及再平衡
4)CooperativeSticky 的解释【新的kafka中刚添加的策略】
版权归原作者 Aly_ 所有, 如有侵权,请联系我们删除。