深入了解Kafka底层原理
一、Kafka基础
1.kafka的基本运行原理?kafka的架构部署?
(1)Kafka通过多副本机制实现故障自动转移;
2.kafka的文件存储机制?
3.kafka如何确保消息的精确传输?如何确保消息的准确存储?如何确保消息的正确消费?
4.kafka的常用名词?
(1)LEO(LogEndOffset):表示每个partititon中最后一条message的位置;
(2)HW(HighWatermark):是指consumer能够看到的此partition的位置,和多副本有关;
(3)replicafator:复制因子;
(4)ISR (In-Sync Replicas):指副本同步队列,ISR中包括:leader和follower;
(5)OSR(Outof-Sync Replicas)列表;
(5)Assigned Replicas,即AR:表示所有的副本(replicas),AR=ISR+OSR;
二、kafka消息
1.kafka消息的物理结构?
2.那么如何从partition中通过offset查找message呢?
3.那么怎么知道何时读完一条消息,否则就读到下一条消息的内容了?
4.消息被发送到broker中,如何判断一个消息被发送到哪个partition?
5.kafka消息如何去重?
6.什么时候kafka的消息会重复?
acks=-1时,数据发送到leader后 ,部分ISR的副本同步,leader此时挂掉。重新进行leader选举时,比如follower1和follower2都有可能变成新的leader。producer端会得到返回异常,producer端会重新发送数据,数据可能会重复。
6.当producer生产消息至broker后,ISR以及HW和LEO的流转过程?
三、kafka的高可靠性保证
1.kafka如何确保高可靠性?
(1)为了提高可靠性,Kafka每个topic的partition有N个副本(replicas),Kafka通过多副本机制实现故障自动转移;
(2)提供了数据复制算法保证,如果leader发生故障或挂掉,一个新leader被选举并可以接受消息写入;
2.为了数据的可靠性和持久性,可以设置数据可靠性的级别?
(1)request.required.acks参数:1、0、-1
(2)min.insync.replicas最小副本数为1,如果ISR中的副本数少于min.insync.replicas配置的数量时,客户端会报错;
(3)什么情况下kafka的数据最为可靠:request.required.acks=-1+replication.factor>=2且min.insync.replicas>=2
四、kafka的复制原理和复制方式
1.复制原理
(1)当producer发送一条消息到broker后,leader写入消息并复制到所有follower,其中leader负责维护和跟踪ISR中所有follower滞后的状态,如果follower“落后”太多或者失效,leader将会把它从ISR中删除。(存在消息复制延迟)
(2)Kafka发生复制时会确保partition的日志能有序地写到其他节点上,N个replicas中,其中一个replica为leader,其他都为follower, leader处理partition的所有读写请求。
2.kafka的复制方式(同步方式)?(ISR复制方式保证了数据不丢失及吞吐率)
(1)同步复制要求所有能工作的follower都复制完,这条消息才会被commit,这种复制方式极大的影响了吞吐率;
(2)异步复制方式:数据只要被leader写入log就被认为已经commit,这种情况下如果follower都还没有复制完,落后于leader时,突然leader宕机,则会丢失数据。
(3)kafka采用ISR复制方式;
五、kafka和zookeeper的关系
1.kafka哪两个地方会对zookeeper节点进行维护?
controller和leader
7.kafka同步数据有哪些延迟?
延迟时间,延迟条数(为什么新版本已经移除?)