前篇提过一个主题可以有多个分区,分布在多个broker上,但如果某个broker挂了,这个borker上的数据不就丢了吗?
为了解决这个问题,就有了副本的概念。
副本其实就是备份,我们可以在创建主题时指定副本数量。假设我们有三个broker,我们创建一个2分区,3副本的主题:
./kafka-topics.sh --bootstrap-server 10.211.55.3:9092 --create --topic test2 \
--partitions 2 \
--replication-factor 3
查看主题详情:
首先我们先看partition-0
分区,replicas
的值为2,1,0
,意味着这个分区的数据分布在broker-2
,broker-1
,broker-0
上,而Leader
等于2,表示broker-2
上的这一块数据是主数据,其他borker上的数据都是副本:
此时,无论是生产者还是消费者来读写消息时,都是从Leader上读写,Leader会将数据同步到其他两个Broker上作为来备份,且仅仅是备份(与Leader对应,副本被称为Follower)。
当Leader挂了之后,会经过选举重新为分区选一个Leader。
分区1也是同理: