commitLog 删除文件的策略
指定时间到了,磁盘不足,人工删除,满足任一条件,判断文件是否过期或者磁盘严重不足(超过 85%),是则删除,一批次最多删除 10 个文件。
有个地方需要注意,mmap 写文件,windows 观察,发现文件的修改时间戳一直不变,linux 还未验证。
commitLog,consumeQueue,indexFile 的删除策略如下图:
commitLog 尾部是有空洞的,当一个消息在当前文件放不下时,rocketmq 认为下一个文件一定能放下该消息,消息不会分隔保存。
commitLog 文件尾部存在至少 8 字节的空洞。
一般情况的尾部组成:maxBlank,BLANK_MAGIC_CODE,随机的内容
// org.apache.rocketmq.store.CommitLog.DefaultAppendMessageCallback#doAppend
if ((msgLen + END_FILE_MIN_BLANK_LENGTH) > maxBlank) {
this.resetByteBuffer(this.msgStoreItemMemory, maxBlank);
// 1 TOTALSIZE
this.msgStoreItemMemory.putInt(maxBlank);
// 2 MAGICCODE
this.msgStoreItemMemory.putInt(CommitLog.BLANK_MAGIC_CODE);
// 3 The remaining space may be any value
// Here the length of the specially set maxBlank
final long beginTimeMills = CommitLog.this.defaultMessageStore.now();
byteBuffer.put(this.msgStoreItemMemory.array(), 0, maxBlank);
return new AppendMessageResult(AppendMessageStatus.END_OF_FILE, wroteOffset, maxBlank, msgId, msgInner.getStoreTimestamp(),
queueOffset, CommitLog.this.defaultMessageStore.now() - beginTimeMills);
}
rocketmq的store目录下面可以删除的东西
以下转载自https://blog.csdn.net/fangletian1981/article/details/46709741
/data1/search/store
/data1/search/store/commitlog 下的文件可以全部删除,如
-rw-rw-r– 1 search search 1073741824 Jul 1 14:11 00000000000000000000
-rw-rw-r– 1 search search 1073741824 Jul 1 11:48 00000000001073741824
/data1/search/store/config下的这四个文件可以全部删除,如:
-rw-rw-r– 1 search search 636 Jul 1 14:12 consumerOffset.json
-rw-rw-r– 1 search search 636 Jul 1 14:12 consumerOffset.json.bak
-rw-rw-r– 1 search search 21 Jul 1 14:12 delayOffset.json
-rw-rw-r– 1 search search 21 Jul 1 14:12 delayOffset.json.bak
/data1/search/store/consumequeue下的子目录都可以删除,如:
[search@QT-Q-0082 consumequeue]$ ll
total 4
drwxrwxr-x 5 search search 4096 Jul 1 11:58 DataChangeLog
/data1/search/store/index下的子目录可以全部删除,如:
-rw-rw-r– 1 search search 420000040 Jul 1 14:13 20150701114823005