文章目录
1、Kafka中的节点是如何服役和退役的
服役:
1、假如新增了一个接节点,新节点的broker.id需要不同于其他节点
2、创建一个json文件,文件里面写上要新建的主题
3、执行这个json文件,会生成一个执行计划
4、将这个执行计划写入到另一个json文件中运行即可
而退役和服役大致流程是一样的:
都是先生成一个执行计划,将这个计划写入json文件中执行即可
2、ISR、OSR、AR是什么?(面试重点)
- kafka分区中所有副本被称为AR
- kafka分区中所有存活着的副本被称为ISR
- kafka分区中所有故障或者延迟过多的副本被称为OSR
AR = ISR + OSR
3、Kafka中Leader挂了,Follower挂了,然后再启动,数据如何同步?(Leader和Follower故障处理细节)(面试重点)
这里需要先说两个概念:
1、LEO:每个副本最后的偏移量加一
2、HW:最高水位线,就是所有副本中最小的LEO
如果Leader故障
,会在ISR中选出一个新的Leaders,为了保证多个副本之间数据的一致性,其余的Follower会将各自的log文件高于HW的部分截掉,然后再从新的Leader同步数据
如果Follower故障
,会将该Follower踢出ISR队列,这个期间,Leader和其余的Follower会继续接收数据,等待该Follower恢复之后,会从磁盘中读取上次的HW,并将其log文件高于HW的部分截掉,从HW开始向Leader同步数据,直到该Follower的LEO大于该分区的HW,即Follower追上Leader之后,就可以重新加入ISR了。
4、kafka中初始化的时候Leader选举有一定的规律,如何打破这个规律呢?
可以手动调整分区副本的存储:
创建对应的副本存储计划,写入到一个json文件中,并执行该json文件即可
5、kafka是如何做到高效读写(Kafka高效读写机制)
1)Kafka 本身是分布式集群,可以采用分区技术,并行度高
2)采用稀疏索引,可以快速定位要消费的数据
3)顺序写磁盘,写的过程是将数据一直追加到文件末端,省去了大量磁头寻址的时间,所以快
4)页缓存 + 零拷贝技术
零拷贝
:Kafka的数据加工处理操作交由Kafka生产者和Kafka消费者处理。Kafka Broker应用层不关心存储的数据,所以就不用 走应用层,传输效率高
PageCache页缓存
:读取数据时,先从PageCache中查找,如果找不到,再去磁盘中读取。实际上PageCache是把尽可能多的空闲内存都当做了磁盘缓存来使用
6、Kafka集群中数据的存储是按照什么方式存储的?(数据存储策略)
Topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是Producer生产的数据。Producer生产的数据会被不断追加到该log文件末端,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制,将每个partition分为多个segment。每个segment包括:“.index”文件、“.log”文件和.timeindex等文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic名称+分区序号,例如:first-0。
7、kafka中是如何快速定位到一个offset的
通过二分查找法
,快速找到一个相对的offset
通过索引文件
:每个日志文件中都会有一个索引文件,通过相对的offset和索引文件名可以快速得到一个绝对的offset