1、Kafka 术语

Record(消息)

Kafka 处理的主要对象。

Topic(主题)

主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。

你可以为每个业务、每个应用甚至是每类数据都创建专属的主题。

Partition(分区)

一个有序不变的消息序列。每个主题下可以有多个分区。

Offset(消息位移)

分区中每条消息的位置信息,是一个单调递增且不变的值。

Producer(生产者)

向主题发布新消息的应用程序。

Consumer(消费者)

从主题订阅新消息的应用程序。

Consumer Offset(消费者位移)

消费者消费进度,每个消费者都有自己的消费者位移。

Consumer Group(消费者组)

多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。

Rebalance (重平衡)

消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。

Rebalance 是 Kafka 消费者端实现高可用的重要手段。

概念图

2、Kafka 三层消息架构

  1. 第一层是主题层,每个主题可以配置 M 个分区,而每个分区又可以配置 N 个副本。
  2. 第二层是分区层,每个分区的 N 个副本中只能有一个充当领导者角色,对外提供服务;其他 N-1 个副本是追随者副本,只是提供数据冗余之用。
  3. 第三层是消息层,分区中包含若干条消息,每条消息的位移从 0 开始,依次递增。
  4. 最后,客户端程序只能与分区的领导者副本进行交互。

3、Kafka 持久化数据

Kafka 使用消息日志(Log)来保存数据,消息日志只能追加写入,所以避免了随机 I/O 操作,改为性能较好的顺序 I/O 写操作。

在 Kafka 底层,一个日志会细分成多个日志段,消息被追加写到当前最新的日志段中,当写满了一个日志段后,Kafka 会自动切分出一个新的日志段,并将老的日志段封存起来。Kafka 在后台还有定时任务会定期地检查老的日志段是否能够被删除,从而实现回收磁盘空间的目的。

0%