• Kafak探究之路- 内部结构小结


    1.框架与工作流

    2 内部结构

    kafka的每个主题分区的数据在 first-0(主题名-分区号)文件夹下,保存 n组xxx.log文件与xxx.index文件。log文件存发送消息的元数据,每个大小默认为1G,index为log的索引存这些消息的序号与起始地址。index每个索引大小一样,这样硬件寻址的时候,可以跳跃(n-1)*length个地址,找到第n条数据的信息,查起来很快!

     

     3 分区的接口方法与含义

     4  ACK与ISR

       ACK: 生产者给kakfa集群发送消息后,kafka会给生产者返回ack表明,已经成功接收到消息。如何解决以下问题

       

        引入ISR

           ISR 就是从10台foller机器中选5台进入ISR,这5台如果某在单位时间内不能与leader同步,则被踢出,或者某台与leader相差消息数量大于n,也会被踢出。

          0.9版本以后,将相差数量去除,因为如果相差数量是1000,而发送消息每个batch为1200,那每次一发消息,ISR中的节点将全部被踢出,稍后同步后,又进入,而且还得访问zk,这样无线循环浪费资源

        ack参数配置

        

     

     

    ack = 0,只发数据,啥都不管

    ack = 1,发数据,leader接收完成,再返回ack,继续发数据

    ack = -1 所有的ISR全部同步数据后,再返回ack,继续发数据

    ack = 0 的时候,在发数据后,不管leader活不活,都有可能丢数据(在网络中丢失),ack = 1时候 leader挂掉,follwer未同步就会丢数据。ack = -1的时候,若ISR里面只有leader,则与1情况一样

    ack等于 -1 的时候,若ISR的follwer已经同步,但是在返回ack过程中,leader挂掉,则会重复发送数据,造成数据重复

     

    5.HW与LEO

     

    HW:是在ISR中,所有的副本中,数据量最少的那个fowller的最后一个值,LEO是每个副本的最后一个值,如下图

    分析:HW之前的数据只对消费者可见,当leader挂掉后,ISR中会选举出新的leader,然后,把HW之后的数据全部都切掉,这样生产者发送消息的时候,kafka集群就只接收HW之后的数据。

    这样可以保证副本之间的数据一致性,消费者消费数据的一致性,并不能保证数据不丢失或不重复

     

     

     6.kafka集群数据去重复

     

         每个生产者在每次会话中,kafka集群都会给它分配一个producerID,发送的每条消息也会又个seqnum,根据这两个字段,可以确保同一个分区的同一个数据的唯一性

  • 相关阅读:
    Spring boot unable to determine jdbc url from datasouce
    Unable to create initial connections of pool. spring boot mysql
    spring boot MySQL Public Key Retrieval is not allowed
    spring boot no identifier specified for entity
    Establishing SSL connection without server's identity verification is not recommended
    eclipse unable to start within 45 seconds
    Oracle 数据库,远程访问 ora-12541:TNS:无监听程序
    macOS 下安装tomcat
    在macOS 上添加 JAVA_HOME 环境变量
    Maven2: Missing artifact but jars are in place
  • 原文地址:https://www.cnblogs.com/txqx/p/14090107.html
Copyright © 2020-2023  润新知