kafka的存储层主要包含 分区,副本,日志,日志分段这些概念,以问答的形式来描述
1.为什么kafka的每一个主题会有多个分区?
如果一个分区,会造成日志文件集中在一个节点上,需要解决文件切分的问题,多分区可以从源头上保证日志文件分散在各分区节点上;而且,多分区情况下,生产者可以将一批消息写入不同分区节点,不分区的话,写操作只能串行。读操作同理,总结就是可以提高读写性能。
2.为什么分区需要副本?
可用性的保证,主副本挂掉,备份副本可以顶上
3.消息写入最终是写到哪里?
写入到日志文件, 为防止随着追加,日志文件不断增大,采用日志分段的形式。每一个日志分段包含一个索引文件和一个数据文件
正常情况下,kafka的读写都是顺序读写,性能很高。如果需要读取指定offset的消息。那么索引文件就可以起到作用了。
4.索引文件的特点?
1)稀疏索引,不会为每一条消息都建立索引
2)索引存储的是相对偏移量和物理位置
3)偏移量是有序的,可以使用2分查找快速定位
4)索引可以通过内存映射的方式放入内存,加快查询。
5.消息什么时候写入到日志文件
日志管理器会定时调度flushDirtyLogs()方法将page cache中的消息真正刷写到磁盘日志文件上。刷写日志有两种策略:时间策略与大小策略。
6.kafka的日志清除策略
1)删除策略:直接删除日志分段,确保磁盘空间不会一直膨胀
2)压缩策略:只删除相同的键但是偏移量比较旧的消息,保留最新的消息
网友评论