Kafka学习笔记(四、Kafka存储机制和日志)

目录:

  • Kafka存储机制
  • Kafka分区规则
  • Kafka日志

Kafka存储机制

再说Kafka存储机制之前我们先了解下分区和副本的作用

  • 分区:为了提高性能(也就是分而治之,它是高并发分布式中心思想)。
  • 副本:为了高可用(保证数据安全)。

副本数量如何定义:

  • 不要超过broker的数量,最低一个(首先会报错;其次没有意义,broker宕调时不管你有多少个副本都是没有意义的)。
  • 就经验来说,参考Hadoop副本数量分配(Hadoop默认3个)。

Kafka分为索引数据和数据,xxx.index、xxx.log。

存储机制同样采用分而治之的方式,首先消息根据topic分区,每个topic又有多个partition,每个partition下又有多个segment。

每一个partition就相当于一个巨大的文件,它被segment拆分成多个小文件,这边是分而治之的思想。你也可以理解成一个公司,老板是partition,他下面有多个中层领导。

.index存储元数据,.log存储大量的消息。以index中348的偏移量,对应log文件中的第3个消息,即log文件170410+3=170413。

Kafka分区规则

假如我们有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上)。

Kafka日志

ISR、HW、LEO同步流程:

  • ISR(In-sync replica): 副本同步队列,当有一条新的消息提交后,副本同步消息成功后才会出现在此队列中。若某个follow副本落后太多或宕机,leader会将它从ISR中删除。
  • HW(high watemark): 高水位,指ISR中所有节点都已经复制完的消息的offset,也是消费者能获取到的最大的offset。
  • LEO(LogEndOffset): 最后一条消息的偏移量。

假如有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

猜你喜欢

转载自www.cnblogs.com/bzfsdr/p/12217648.html