kafka工作原理

架构

  • kafka工作原理

元数据

  • broker集群成员列表。维护在zk的 /brokers/ids下的临时节点
  • 控制器。
    • broker之一,通过成功创建/controller节点判定。
    • 监听各broker zk节点状态,维护分区首领和追随者列表,并通知各个broker。

复制

  • 每个分区多个副本。

首领副本

  • 所有生产者和消费者请求经过首领副本,追求一致性。

追随者副本

  • 从首领复制消息,保持一致。
    • 主动从首领pull消息。
    • 未满足条件降级为不同步副本
      • 与zk之间有活跃会话,默认6s超时。
      • 默认10s没有从首领pull。
      • 从首领获取消息延时默认10s之内。
  • 首领崩溃时其中一个升级为首领。

副本在同步和非同步之间快速切换,极有可能是GC导致。

处理请求

元数据请求

  • 元数据请求时机:
    • 客户端向任意broker定时刷新。
    • 客户端收到非首领错误,Pull 任意broker。
      kafka工作原理

生产请求

获取请求

  • 获取请求。消费者、追随者副本读broker。
  • broker根据客户端请求的数量上限下限、最大等待时间,选择时机将消息从文件系统缓存零复制发送到客户端。
  • 所有同步副本复制消息之后,才允许消费者读取。

分区存储

  • 分区分为n个片段(包括1个正在写入的活跃片段)。
  • 片段分为两部分:
    • 干净部分:清理过,每个键只有一个值。
    • 污浊部分:清理之后写入。
  • 清理:相同key保留最新的值。