Kafka具备很强的消息可靠性,它的一大保障就是分区备份机制。
上图描绘了一个Kafka集群分区备份的情况。每一个broker就是一个节点服务,底下含有若干个分区(上图是part 1\2\3\4),分区在kafka被定义成消息的物理实体。
在发布\订阅的系统中,消息被按照topic的形式区分,每一个发往kafka的消息被贴上了topic标签,在实际的节点服务上,某个特定topic下的所有消息都存储在特定的分区中,表现为一个文件目录的形式,所以说分区中承载着topic包含的消息,是消息的物理实体。具体的,从图中看在broker1中,topic1消息存储在分区1、2、3中,topic2存储在分区1中,topic3存储在1、2、3、4中,看到这里也许会很奇怪,为什么同一个topic消息会同时存在多个分区中?仔细观察还会发现,同一个topic消息不仅存在于一个broker节点的不同分区,在不同broker的分区中都有它的身影!看起来很让人头晕,这其实就是kafka集群消息备份之后的情况了。
我们以一个实际的例子作说明。在一台ubuntu上,我们起了3个broker,分别叫broker0、broker1、broker2