Kafka进阶
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.2 主题、分区与副本

Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题,而消费者负责订阅主题进行消费;主题可以分为多个分区,一个分区只属于单个主题。下面列举一下主题和分区的关系。

(1)同一主题下的不同分区包含的消息不同(发送给主题的消息具体是发送到某一个分区的)。

(2)消息被追加到分区日志文件的时候,会分配一个特定的偏移量(offset),offset是消息在分区中的唯一标识,Kafka通过它来保证消息在分区的顺序性。

(3)offset不跨分区,也就是说Kafka保证的是分区有序而不是主题有序。

图1.7展示了主题与分区的关系。

图1.7 主题与分区的关系

图1.7中的Topic A有3个分区。消息由生产者顺序追加到每个分区日志文件的尾部。Kafka中的分区可以分布在不同的Kafka Broker上,从而支持负载均衡和容错的功能。也就是说,Topic是一个逻辑单位,它可以横跨在多个Broker上。

了解了主题和分区后,再来了解副本。在Kafka中,每个主题可以有多个分区,每个分区又可以有多个副本。在这些副本中,只有一个是Leader副本,其他都是Follower副本。仅有Leader副本可以对外提供服务。多个Follower副本通常存放在和Leader副本不同的Broker中。通过这样的机制实现了高可用,当某台机器挂掉后,其他Follower副本也能迅速“转正”,开始对外提供服务,这就是Kafka的容错功能。

图1.8展示了Kafka分区的副本机制。

图1.8 Kafka分区的副本机制

在图1.8中,我们创建一个Topic,这个Topic由两个分区组成:P1和P2。可以看出,每个分区有三个副本,由前面的介绍可知,每个分区都将由Leader副本负责对外提供服务。