1、Kafka 术语
Record
(消息)
Kafka 处理的主要对象。
Topic
(主题)
主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。
你可以为每个业务、每个应用甚至是每类数据都创建专属的主题。
Partition
(分区)
一个有序不变的消息序列。每个主题下可以有多个分区。
Offset
(消息位移)
分区中每条消息的位置信息,是一个单调递增且不变的值。
Producer
(生产者)
向主题发布新消息的应用程序。
Consumer
(消费者)
从主题订阅新消息的应用程序。
Consumer Offset
(消费者位移)
消费者消费进度,每个消费者都有自己的消费者位移。
Consumer Group
(消费者组)
多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。
Rebalance
(重平衡)
消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。
Rebalance
是 Kafka 消费者端实现高可用的重要手段。
2、Kafka 三层消息架构
- 第一层是主题层,每个主题可以配置 M 个分区,而每个分区又可以配置 N 个副本。
- 第二层是分区层,每个分区的 N 个副本中只能有一个充当领导者角色,对外提供服务;其他 N-1 个副本是追随者副本,只是提供数据冗余之用。
- 第三层是消息层,分区中包含若干条消息,每条消息的位移从 0 开始,依次递增。
- 最后,客户端程序只能与分区的领导者副本进行交互。
3、Kafka 持久化数据
Kafka 使用消息日志(Log)来保存数据,消息日志只能追加写入,所以避免了随机 I/O 操作,改为性能较好的顺序 I/O 写操作。
在 Kafka 底层,一个日志会细分成多个日志段,消息被追加写到当前最新的日志段中,当写满了一个日志段后,Kafka 会自动切分出一个新的日志段,并将老的日志段封存起来。Kafka 在后台还有定时任务会定期地检查老的日志段是否能够被删除,从而实现回收磁盘空间的目的。