再说Kafka存储机制之前我们先了解下分区和副本的作用:
副本数量如何定义:
Kafka分为索引数据和数据,xxx.index、xxx.log。
存储机制同样采用分而治之的方式,首先消息根据topic分区,每个topic又有多个partition,每个partition下又有多个segment。
每一个partition就相当于一个巨大的文件,它被segment拆分成多个小文件,这边是分而治之的思想。你也可以理解成一个公司,老板是partition,他下面有多个中层领导。
.index存储元数据,.log存储大量的消息。以index中348的偏移量,对应log文件中的第3个消息,即log文件170410+3=170413。
假如我们有3个分区,3个副本。
L:leader,F:follow。
T1L T2L T3L
T1F1 T2F1 T3F1
T1F2 T2F2 T3F2
1、先从所有broker选一个存储第一个leader分区。
2、按照broker顺序分配第二、第三个leader分区。
3、一次分配follow分区(如:第一个leader分区被分配到broker1上,那么其它两个follow分区就会被分配到broker2和broker3上)。
ISR、HW、LEO同步流程:
假如有3个副本。
一开始消息的状态是这样的:
L F1 F2
1 1 1
2 2 2
HW & LEO 3 3 3
现发送一条消息,此时消息会先到leader副本,然后再通知其它两个follow副本复制。若此时仅有F1复制成功,此时便是这样的。
L F1 F2
1 1 1
2 2 2
HW 3 3 3
LEO 4 4
那么HW便是在4之上的3的位置,LEO是4的位置,LSR是L、F1。
当所有副本都同步完之后,HW与LEO便回到一个位置上。
L F1 F2 1 1 1 2 2 2 HW & LEO 3 3 3
4 4 4
查看日志命令:./kafka-dumplog.sh --files --file /home/hadoop/kafka/broker-0/xxxx.index
原文:https://www.cnblogs.com/bzfsdr/p/12217648.html