zoukankan      html  css  js  c++  java
  • Kafka学习笔记(四、Kafka存储机制和日志)

    目录:

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

    Kafka存储机制

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

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

    如何设置副本数量:

    • 最低一个,最大不超过broker的数量(不在范围内的首先会报错;其次没有意义,超过broker数量时,首先broker宕机时不管你有多少个副本都是一起挂掉,拿不到数据)。
    • 就经验来说,参考Hadoop副本数量分配(Hadoop默认3个)。

    ——————————————————————————————————————————————————————

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

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

    每一个partition就相当于一个巨大的文件,它被segment拆分成多个小文件,这边是分而治之的思想。

    你也可以理解成是公司,每个老板都是topic;为了提高管理效率增加了部门领导(partition),领导又管理职工(segment)。

    .index存储元数据.log存储大量的消息。如果我们要找获取消息,首先会通过二分法找到对应的index文件,再从index文件的偏移量找到对应的log文件。

    如果是找偏移量为348的数据(上图左侧黄色编号为3),即对应log文件170410+3=170413,也就是消息为message170413的。

    Kafka分区规则

    假如我们有3个分区,3个副本(L代表leader,F代表follow)。

    故机器配置如下:

    T1L  T2L  T3L
    T1F1 T2F1 T3F1
    T1F2 T2F2 T3F2

    1、先从所有broker选一个存储第一个leader分区(选出broker1为T1L)。

    2、按照broker顺序分配第二、第三个leader分区(所以T2L、T3L分别被分在broker2、broker3上)。

    3、依次分配follow分区(如:第T1L被分配到broker1上,那么T1F1、T1F2就会被分配到broker2和broker3上;依次类推,T2L的两个follow会被依次分在broker3、broker0上)。

    Kafka分区策略

    • 轮询策略:若键值为null,并使用默认分区器,Kafka会根据轮询策略将消息均匀的分到各个分区上。
    • 散列策略:若键值不为null,并使用了默认分区器,Kafka会对键进行散列,然后根据散列值将消息映射到对应的分区上。
    • 自定义策略:用户可根据需要对数据使用不一样的分区策略。

    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

  • 相关阅读:
    (7)常量和变量
    (6)python基础数据类型
    PEP8规范
    (5)原码反码补码
    (4)二八十六进制转换
    (3)你的第一个python程序
    (2)python开发环境搭建
    几种常见的开发语言对比
    (1)python的基础认知
    (25)线程---local数据隔离
  • 原文地址:https://www.cnblogs.com/bzfsdr/p/12217648.html
Copyright © 2011-2022 走看看