1. Producer / Consumer (PC)
Producer(生产者):
生产数据的终端,只要是往 kafka 集群中写数据的都是生产者,简称 P
Consumer(消费者):
消费 kafka 集群中的数据,只要是去拉取或读取kafka集群中数据的都为消费者,简称 C
注意:
无论是 Producer 还是 Consumer 都是 kafka 的客户端,他们状态是否正常都不影响 kafka 本身的工作。
2. Topic / Partition / Replica
Topic(主题):
是一个逻辑名称,类似于 elasticsearch 中的索引,实际工作中对应着业务名称。
partition(分区):
一个 topic 至少对应一个或多个 partition 分区,分区也是一个逻辑名称,不负责数据的存储
replica(副本):
副本数量,负责数据的存储
类似于 linux 系统目录 如 topic下面存放着 partition 下面存放着 replica 中存放着数据
如 linux系统中,/tmp/kafka/test.txt 对应着 /topic/partition/replica ,只有 replica 中存放着实际数据
注意:
消费者是根据 topic(主题)来消费数据,并不知道 partition 与 replica 的概念
3.leader / follower
leader:
负责数据的读写,也就是主节点
follower:
只负责从leader中同步数据,并不会被producer和consumer发现,也就是备节点
当 leader 挂掉后,follower可以成为leader,负责数据的读写。
4.ISR / OSR / AR
如图,
leader 节点:kafka191
follower节点:kafka192,kafka193
ISR:
是和leader副本数据相同的所有副本集合,该列表中所有副本的数据是一样的,包括leader
如上图中,193 节点的数据与leader 的数据不一致,则 ISR 表为 ISR:[ kafka191,kafka192 ]
OSR:
是和leader副本数据不相同的所有副本集合
如上图中,193 节点的数据与 leader 的数据不同,则 OSR 表为 OSR:[ kafka193 ]
AR:
是ISR+OSR=AR,代表的是所有副本,为 AR:[ kafka191,kafka192,kafka193 ]
注意:
(1)当一个副本数据和leader不同步时,其会从ISR列表中移除,并将其加入到OSR,当OSR列表的副本数据和leader相同时,又会重新加入到ISR列表中。
(2)ISR列表中的副本会优先被选举为leader。
5. offset / LEO / HW
offset:
用于表示数据的位置点,消费者可以记录offset来标识自己在某个分区中消费的位置点。
如上图,每个存储的数据,都会对应一个偏移量来记录位置,方便消费者消费
LEO:
Log End Offset,表示一个分区数最后一个位置的offset。
HW:
Hig Water,高水位线,表示ISR中最小的LEO。
6. Consumer
Consumer Group:
(1)消费者组,一个消费者组至少有一个消费者或多个消费者。
(2)同一个消费者组的消费者不能同时对同一个topic的partition的数据进行消费
(3)Consumer 如果在 Consumer Group 中的话,都会以 Consumer Group 的名义进行消费。
(4)当其中一个 Consumer 崩了之后,则会被其他的 Consumer 给接管,继续读取topic中的数据,因为他们在同一个 Consumer Group 中,且都是以 Consumer Group 的名义来消费的,会直接从 Consumer 故障之前读取的位置读取数据。