Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题,而消费者负责订阅主题进行消费。主题可以分为多个分区,一个分区只属于某一个主题。下面为列举了主题和分区的关系:
- 同一主题下的不同分区包含的消息不同。生产者发送给主题的消息都是具体发送到某一个分区中。
- 消息被追加到分区日志文件的时候,Broker会为消息分配一个特定的偏移量地址(offset)。该地址是消息在分区中的唯一标识,Kafka通过它来保证消息在分区的顺序性,
- offset不能跨越分区,也就是说Kafka保证的是分区有序而不是主题有序;
视频讲解如下:
下图展示了主题与分区之间的关系。
在这个例子中,Topic A有3个分区。消息由生产者顺序追加到每个分区日志文件的尾部。Kafka中的分区可以分布在不同的Kafka Broker上,从而支持负载均衡和容错的功能。也就是说,Topic是一个逻辑单位,它可以横跨在多个Broker上。