Loading

Kafka 学习笔记一:基本概念

  1. zookeeper: 负责集群元数据管理、控制器的选举等操作
  2. producer: 将消息发送到 broker
  3. broker: 将收到的消息存储到磁盘中
  4. consumer: 负责从 broker 订阅并消费消息
  5. topic: 消息主题(逻辑概念),生产者和消费者都以 topic 为单位进行生产和消费
  6. partition: 分区(也称作 topic-partition 主题分区,topic 的物理概念),同一个 topic 可以分为多个 partition,一个 partition 只属于单个 topic。分区在存储层面可以看做一个可追加的日志文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。offset 是消息在分区中的唯一标识,kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,kafka 保证的是分区有序而不是主题有序。

分区的副本机制

一个分区可以有多个副本,一主多从,leader 副本负责处理读写请求,follower 副本只负责与 leader 副本的消息同步。多个副本处于不同的 broker 中,当某个 broker 失效后仍能保证服务可用。

不同分区的同步速度不一致,kafka 把同步程度不同的副本做了区分:

  1. AR (Assigned Replicas): 所有副本的统称。AR = ISR + OSR。
  2. ISR (In-Sync Replicas): 与 leader 保持一定程度同步的副本。当 leader 故障时,只有在 ISR 集合中的副本才有资格被选举为新的 leader
  3. OSR (Out-of-Sync Replicas): 与 leader 同步滞后过多的副本。

偏移量的一些概念与 ISR 的关系:

  1. HW (High Watermark) 高水位:一个特定的 offset,消费者只能拉取到这个 offset 之前的消息(消息可见性)。
  2. LEO (Log End Offset): 当前日志文件中下一条待写入消息的 offset。
  3. 三者之间的关系:ISR 集合中最小的 LEO 即为分区的 HW。

举个例子:

  1. 假设有一个分区 leader 副本为 L1,有两个 follower 副本为 F1, F2
  2. 此时,L1, F1, F2 的同步进度一致,都有三条消息m0,m1,m2
  3. 2个 follower 副本都处于 ISR 集合,LEO都为 2,所以 HW 为 2
  4. 这时生产者写入两条消息 m3,m4
  5. F1 同步速度快,同步了两条消息,F2同步速度慢,只同步了 m3
  6. 此时,F1 的 LEO 为 4,F2 的 LEO 为3,当前分区的 HW 取最小值为 3
  7. 之后 F2 也同步了 m4,LEO 变为 4
  8. F1 和 F2 的 LEO 都为 4,HW 也为4

(详细可以见书中的流程图,这里就不贴图了)

posted @ 2021-06-25 08:48  超超不会飞  阅读(100)  评论(0编辑  收藏  举报