Topic 和 Log
对每个Topic,kafka集群维护如下图所示的partiton的log
一个topic可以分成多个partition,每个partition都是有序的,可以持续追加记录的不可变的序列,其中每个记录都被分配一个***,称为偏移量(offset),在每个partition中此偏移量都是唯一的。
发布到Kafka集群的消息,无论是否被消费,都会保留一段时间,保留的时间是可配置的。比如:保留的时间设置为两天,发布的消息在两天内,消息都是可以被消费的(也就是说你可以在两天内重复读取),但是两天后就会被删除并释放占用的空间。Kafka能够有效的使数据量保持一致,所有长时间的数据存储不成问题。
实际上,每个消费者只需要保存的元数据是消费者在log中的消费位置(偏移量),这个偏移量是由消费者控制:通常,消费者读取消息后,偏移量会线性递增,但是,消费者可以从任意位置顺序消费消息。比如:消费者可以重置偏移量到老版本。
这些特性的组合使得消费者资源耗费比较少,消费者的增加或减少对集群或其他消费者没有多大影响。例如,可以使用官方提供的命令行工具去获取任何topics的最新log,这不需要对现存的消费者做任何操作。
log分区的目的:第一:允许log规模超出一台服务器的文件大小限止。每个单独的分区都必须受限于主机的文件限止,但一个topic可有多个partition,因此可以处理无限数量的数据。