apache kafka 定位

  • Apache Kafka 是消息引擎系统
  • 也是一个分布式流处理平台(Distributed Streaming Platform)

消费模型

  • 点对点
  • 订阅发布
    • 使用 consumer group

名称

示意图

image.png

结构

  • broker: kafka 集群的一个实例
  • topic: 一个主题,可以跨多个 broker
  • partition: 分区,一个 topic 可以有多个 partition
    • 可以拓展 topic 大小和更多写入和消费
  • replication: 一个 分区有 n 个 replication,replication 可以放在不同的 broker 上,即一个分区可以跨多个 broker,也就是一个 topic 可以跨多个 broker(分布式)
    • leader replication: 一个分区只有一个领导者 replication
      • 负责客户端的写请求
    • follower replication: 一个分区有 n - 1 个 replication
      • 负责被动异步同步 leader replication 的数据,不处理请求
  • offset

    • 分区 offset,每个 分区的 offset 都是从 0 开始,一直递增
      • 即一旦一条消息进入分区, 它的 offset 就固定了
      • 所以每个 leader partition 的消息 offset 不会都从 0 开始
    • 消费者 offset,标记 consumer 对 partition 的消费 offset
      • 和 分区 offset 无关

        外部

  • producer: 消息生产者,只会生成消息到一个 topic 的一个 partition 的 leader replication 上

  • consumer: 消息消费者,只会消费一个 topic 的某一个 partition 的消息
    • consumer group: 消费者组。一个 topic 中的每个分组只会被组内的一个 consumer 实例消费
      • Rebalance : 重平衡。consumer group 内的各个 consumer 可以互相协调,某个 consumer 挂掉,kafka 会检测到,将该 consumer 之前负责的分区转义给其他活着的 consumer

概念

In-sync Replicas(ISR)

  • 表示和 leader replication 处于同步状态的 replication 集合
  • 判断依据
    1. leader replication 天然处于 ISR 中
    2. replica.lag.time.max.ms 决定 follower replication 最少不能落后于 leader replication 的时间,默认 10s
      1. 只要不落后于该时间,就算不落后

Unclean 领导者选举(Unclean Leader Election)

  • unclean leader,就是非 ISR 的 follower replication
  • Broker 端参数unclean.leader.election.enable 控制是否允许 Unclean 领导者选举
    • 开启会导致数据一致性无法满足

消息存储

日志.png

  • 消息保存在 Log,即日志中
    • Log 内部是分为多个 Log Segemtns,即日志段
  • 消息顺序写,实际上是写入最新的 Log Segments
  • 当磁盘空间不足,或者触发某些配置的条件时,会删除日志
    • kafka 有定时任务,定时删除旧的 Log Segments