深入了解Kafka底层原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Michaeles/article/details/88652478

一、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同步数据有哪些延迟?

延迟时间,延迟条数(为什么新版本已经移除?


 

猜你喜欢

转载自blog.csdn.net/Michaeles/article/details/88652478