kafka的数据存储
分片和副本机制
解决单台服务器内存有限的情况,将数据分成多个partition存放在多个服务器上,每个服务器上的数据叫做一个分片
kafka中的消息以topic进行分类,生产者和消费者都是面向topic的。
topic是逻辑上的概念,partition是物理上的概念,每个partition对应一个log文件,log文件中存储的是producer生产的数据,producer生产的数据不断地追加到log文件的末尾,每条数据有自己的offset。消费者会记录消费到了哪个offset
副本机制解决了数据存储的高可用的问题
当数据只存储一份时,有丢失的风险,为了容错,将数据拷贝积分,保存到不同的机器上
文件存储机制
一个topic可以分成多个partition
一个partition可以分成多个segment
一个segment对应.log和.index两个文件 当log文件达到1G后,形成一个新的文件 index是log文件的索引文件,为了提升log文件的效率 文件名为存储的消息的起始偏移量
kafka进行多文件存储的原因
- 保证每个文件不过大,使读取效率提高
- kafka只是临时存储文件,会定期删除定期文件。如果数据放置在一个文件中,需要对整个文件进行遍历,效率低下。分成多个文件之后,只需要看文件最后修改的时间即可