Kafka 核心设计原理

文章目录

  • Kafka 核心设计原理
    • Kafka 设计架构
    • Kafka Rebalance 机制:
    • Kafka 高可用原理
    • Kafka Consumer Exactly Once

Kafka 核心设计原理

Kafka 设计架构

  1. Message System -> Streaming Platform (但业界现在仍以Message 为主 )
  2. 特点
    1. 低延迟
    2. 高吞吐
    3. 水平扩展 (支持在线扩展)
    4. 顺序性
    5. 多场景 (离线,实时)
  3. 架构:
    1. Producer
    2. Broker
    3. Consumer
    4. Zookeeper (严格上说,不属于Kafka架构,但是为了支持分布式集群,必须使用ZK)
    5. Kafka 核心设计原理_第1张图片
    6. 在架构设计时,应该保证Consumer的消费能力大于Producer。
    7. Producer在发送数据时,会有一个待发送队列(在内存中),达到一定数据量后,批量向Broker推送。
  4. Topic & Parition & Segment
    1. Record
      1. Key - Value
      2. Timestamp(流处理中使用)
    2. Topic
      1. 逻辑概念
      2. 发布 - 订阅 均基于Topic
    3. Partition
      1. 一个Topic 包含一个或多个Partition
      2. 每个Partition 物理上对应一个文件夹
      3. 均匀分布在各个Broker上
        注: 数据写入是Append-Only的。有Paper表明,磁盘的顺序访问速度甚至大于内存的随机访问速度。
    4. Segment
      1. Partition可以认为是文件夹,Segment就可以认为是文件。
      2. 删除时,删除Segment,速度较快。
  5. Producer
    1. 消息发送
      1. 同步
      2. 异步
    2. 消息顺序性
      1. Queue
      2. Retry
    3. 消息路由 - Partition
      1. 同一用户采用同一Key,对Key取Hash,就可保证同一用户的数据都进同一Partition
  6. Consumer API
    1. Low Level API / Assign (存在种种问题)
      1. 指定Partition
      2. 指定起始消费Offset
      3. 指定消息长度
    2. High Level API / Subscribe
      1. 引入了Consumer Group,解决问题
  7. Consumer Group
    1. 以Partition划分,任何一个Partition只会被一个Consumer消费
    2. Rebalance

Kafka Rebalance 机制:

  1. 每加入/删除一个Consumer,就会触发Revoke
  2. 自治式 Rebalance
  3. 集中式 Rebalance:基于Coordinate

Kafka 高可用原理

  1. CAP 理论:分布式系统中,一致性、可用性、分区容忍性最多只可同时满足两个
  2. 一般分区容忍性都要求有保障,因此很多时候是在可用性与一致性之间做权衡
  3. Kafka 核心设计原理_第2张图片
  4. ISR (In-Sync Replicas):
    1. 数据被所有Follower同步后,才Commit
    2. Follower一定时间不同步数据,会被踢除ISR。
    3. 当Follower同步速度提升到一定程度,又会被加入ISR中。
  5. Failover
    1. 旧主挂掉,随机选新主。
    2. 旧主恢复,不会变成Leader。会将自己最后一次Commit之后的数据全部删除,再同步。

Kafka Consumer Exactly Once

  1. 两阶段提交
  2. At least once + 下游幂等处理
  3. Offset 更新与数据处理放在同一事务中

你可能感兴趣的:(中间件)