Kafka笔记5(内部工做原理)

集群成员关系:网络

  Kafka使用zookeeper维护集群成员信息,每一个broker拥有惟一标识符,这个标识符能够在配置文件里指定也能够自动生成,会注册到Zookeeper的/brokers/ids路径下架构

控制器:并发

  本质就是一个broker,可是还负责分区首领选举线程

  Kafka使用zookeeper的临时节点来选举控制器,并在节点加入集群或退出集群时通知控制器,控制器负责在节点加入或离开集群时进行分区首领的选举。控制器使用epoch来避免脑裂3d

复制:日志

  复制功能时Kafka架构核心blog

  Kafka使用主题来组织数据,每一个主题分为若干分区,每一个分区有多个副本,保存在broker上,每一个broker能够保存成千上百属于不一样主题和分区的副本索引

  副本有如下2个类型:队列

    首领副本: 每一个分区都有一个首领副本,全部的生产者请求和消费者请求都会通过这个副本kafka

    跟随者副本:首领之外的副本都是跟随者副本,跟随者副本惟一任务是从首领那里复制消息,保持与首领一致的状态

        只有持续请求获得消息的副本被称为同步的副本,首领失效时才有机会成为首领

           除了当前首领以外,每一个分区还有一个首选首领-------建立主题时选定的首领就是分区的首选首领

        auto.leader.rebalance.enable=true   会检查首选首领是否是当前首领,若是不是,而且该副本是同步的,就会触发首领选举,让首选首领成为首领

        分区的副本清单里第一个副本通常就是首选首领

处理请求:

  broker大部分工做就是处理客户端/分区副本/控制器发送给分区首领的请求。Kafka提供了一个基于TCP的二进制协议,指定请求消息的格式以及broker如何对请求作出响应

  客户端发起链接并发送请求,broker处理请求并作出响应,broker按照请求到达顺序处理他们----这种顺序保证让Kafka具备消息队列的特性,同时保证保存的消息也是有序的

  broker会在监听的每个端口上运行一个Acceptor线程,这个线程会建立一个链接,并交给Processor线程处理,processor线程也称为网络线程,负责从客户端获取请求消息,放进请求队列,而后从响应队列获取响应消息,发送给客户端

  

  

 

 索引:

  索引把偏移量映射到片断文件和偏移量在文件里的位置

  索引若出现损坏,Kafka会自动从新生成索引

每一个日志片断能够分为2个部分: 

  干净的部分    未清理过,每一个键只有一个对应的值

  污浊的部分   这些消息是上一次清理以后写入的

  log.clear.enabled=true  kafka启用清理功能

相关文章
相关标签/搜索