人生第一份工作■Kafka架构原理,也就这么回事( 二 )

  • Offset:消费者消费的位置信息 , 监控数据消费到什么位置 , 当消费者挂掉再重新恢复的时候 , 可以从消费位置继续消费 。
  • Zookeeper:Kafka 集群能够正常工作 , 需要依赖于 Zookeeper , Zookeeper 帮助 Kafka 存储和管理集群信息 。
  • 工作流程
    Kafka集群将 Record 流存储在称为 Topic 的类别中 , 每个记录由一个键、一个值和一个时间戳组成 。
    人生第一份工作■Kafka架构原理,也就这么回事
    本文插图
    Kafka 是一个分布式流平台 , 这到底是什么意思?
    • 发布和订阅记录流 , 类似于消息队列或企业消息传递系统 。
    • 以容错的持久方式存储记录流 。
    • 处理记录流 。
    Kafka 中消息是以 Topic 进行分类的 , 生产者生产消息 , 消费者消费消息 , 面向的都是同一个 Topic 。
    Topic 是逻辑上的概念 , 而 Partition 是物理上的概念 , 每个 Partition 对应于一个 log 文件 , 该 log 文件中存储的就是 Producer 生产的数据 。
    Producer 生产的数据会不断追加到该 log 文件末端 , 且每条数据都有自己的 Offset 。
    消费者组中的每个消费者 , 都会实时记录自己消费到了哪个 Offset , 以便出错恢复时 , 从上次的位置继续消费 。
    存储机制
    人生第一份工作■Kafka架构原理,也就这么回事
    本文插图
    由于生产者生产的消息会不断追加到 log 文件末尾 , 为防止 log 文件过大导致数据定位效率低下 , Kafka 采取了分片和索引机制 。
    它将每个 Partition 分为多个 Segment , 每个 Segment 对应两个文件:“.index” 索引文件和 “.log” 数据文件 。
    这些文件位于同一文件下 , 该文件夹的命名规则为:topic 名-分区号 。 例如 , first 这个 topic 有三分分区 , 则其对应的文件夹为 first-0 , first-1 , first-2 。
    # ls /root/data/kafka/first-000000000000000009014.index00000000000000009014.log 00000000000000009014.timeindex 00000000000000009014.snapshotleader-epoch-checkpoint index 和 log 文件以当前 Segment 的第一条消息的 Offset 命名 。 下图为 index 文件和 log 文件的结构示意图:
    人生第一份工作■Kafka架构原理,也就这么回事
    本文插图
    “.index” 文件存储大量的索引信息 , “.log” 文件存储大量的数据 , 索引文件中的元数据指向对应数据文件中 Message 的物理偏移量 。
    生产者
    分区策略
    分区原因:
    • 方便在集群中扩展 , 每个 Partition 可以通过调整以适应它所在的机器 , 而一个 Topic 又可以有多个 Partition 组成 , 因此可以以 Partition 为单位读写了 。
    • 可以提高并发 , 因此可以以 Partition 为单位读写了 。
    分区原则:我们需要将 Producer 发送的数据封装成一个 ProducerRecord 对象 。
    该对象需要指定一些参数:
    • topic:string 类型 , NotNull 。
    • partition:int 类型 , 可选 。
    • timestamp:long 类型 , 可选 。
    • key:string 类型 , 可选 。
    • value:string 类型 , 可选 。
    • headers:array 类型 , Nullable 。
    ①指明 Partition 的情况下 , 直接将给定的 Value 作为 Partition 的值 。
    ②没有指明 Partition 但有 Key 的情况下 , 将 Key 的 Hash 值与分区数取余得到 Partition 值 。
    ③既没有 Partition 有没有 Key 的情况下 , 第一次调用时随机生成一个整数(后面每次调用都在这个整数上自增) , 将这个值与可用的分区数取余 , 得到 Partition 值 , 也就是常说的 Round-Robin 轮询算法 。


    推荐阅读