kafka工作流程
kafka中消息以topic进行分类,生产者生产消息,消费者消费消息,都是面向topic的。
topic是逻辑上的概念,而partition是物理上的概念,每个partition对应一个log文件,该log文件中存储的就是producer生产的数据,producer生产的数据会被不断的追加到该文件末端,且每条数据都有自己的offset,消费者组中的每个消费者,都会实时记录自己消费到哪个offset,以便出错恢复时从上次的位置上继续消费。
producer发送数据和消费者消费数据的对象都是partition中的leader,其他follower会实时从leader中同步数据,和leader中的数据保持一致。
kafka文件存储机制
每个topic可以分为多个partition;
kafka采取了分片和索引机制,将每个partition分为多个segment;
每个partition可以分为多个segment;
每个segment大小是相同的,且对应.log和.index文件;
.log和.index文件成对存在,.log文件记录的是producer生产者生产的数据,.index文件记录的是.log文件中每条数据的物理偏移量;
每个partition的数据都位于同一个目录下,并且以“topic名称+partition序号”的格式;
partition数据的全局存放路径可以在kafka下bin/conf/server.properties中配置
index文件和log文件
log文件默认存储七天,默认大小为1G,当大于1G时,会重新创建一个新的.log文件
index文件和log文件都以该segment的第一个消息的offset命名。数值最大为64位long大小,19位数据字符长度,没有数字用0填充。
index文件存储大量的索引信息,log文件存储大量的数据,索引文件中的元数据指向对应数据文件中的message的物理偏移地址。