zoukankan      html  css  js  c++  java
  • 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,根据这两个字段,可以确保同一个分区的同一个数据的唯一性

  • 相关阅读:
    【做题】agc003E
    步态识别问题简介
    win10 +Kinect V1 1414环境配置
    生物特征识别数据泄露事件
    人脸识别应用领域
    爱自然
    wxid 转微信号
    Blahut-Arimoto algorithm Matlab源码
    Theorem、Proposition、Lemma和Corollary等的解释与区别
    PokerNet-poker recognition: 扑克识别 (6)
  • 原文地址:https://www.cnblogs.com/txqx/p/14090107.html
Copyright © 2011-2022 走看看