Post

Kafka

Kafka

Kafka

消费模式

  • 点对点
  • 发布订阅

架构

  • Producer
  • Consumer
    • Consumer Group
  • Broker
    • 一个kafka节点就是一个Broker, 一个Cluster由多个Broker组成
  • Topic
  • Partition
    • 一个Topic可以分布到多个Broker上(这个Topic会被分成多个Partition)
    • Partition(物理概念)是一个队列, 内部有序(整体无序)
    • 一个Message由key和value组成, 根据key进行hash散列(相同key会被分到同一个Partition中)
  • Replica
    • 节点的Partition会产生多个副本(一个leader和多个follower)
    • leader中维护了动态ISR(in-sync replica set), 如果follower长时间没有进行同步, 就会被从ISR中删除
      • 当leader挂掉, 会在ISR中选一个新leader

工作流程

  • 每条数据有自己的offset(类似与在队列中的index)
  • 每个Consumer会实时记录自己消费到了哪个offset, 以便从这个位置(offset+1)继续消费
  • Producer -> Topic (Log with offset) -> Consumer

文件存储

  • 一个Partition分为多个Segment(基本单位)
  • 一个segment对应三个文件
    • .log文件
      • 存储数据
    • .index文件
      • 索引文件, 用类似二分法进行索引
    • .timeindex文件
      • 时间戳索引

高效读写

  • 顺序写磁盘
    • log文件采用追加写
  • zero-copy
    • 数据文件(.log)使用sendfile方式
    • 索引文件(.index)使用mmap+write方式

kraft和zookeeper

  • kafka旧版本使用zookeeper协调管理组件
    • Broker发现
    • 维护元数据信息(如offset)
    • 协调leader选举
  • 新版kafka放弃了zookeeper, 改用kraft
    • 基于raft的kraft模式
    • 一部分Broker会被指定成Controller
      • 主控制器为active controller
    • 将元数据写入__cluster_metadata内部主题
      • 这个主题只有一个partition
      • active controller为leader, 其他controller为follower
This post is licensed under CC BY 4.0 by the author.