ConsumeQueue存储结构
转载自 https://blog.csdn.net/songzehao/article/details/82924656

import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class TestCQ { public static void main(String[] args) throws IOException { decodeCQ(new File("D:\\consumeQueue\\0\\00000000000000000000")); } static void decodeCQ(File consumeQueue) throws IOException { FileInputStream fis = new FileInputStream(consumeQueue); DataInputStream dis = new DataInputStream(fis); long preTag = 0; long count = 1; while (true) { long offset = dis.readLong(); int size = dis.readInt(); long tag = dis.readLong(); if (size == 0) { break; } if ((tag - preTag) != 1) { // System.err.printf("%d: %d %d %d\n", count++, tag, size, // offset); System.out.printf("[ERROR]%d: %d %d %d\n", count++, tag, size, offset); } preTag = tag; System.out.printf("%d: %d %d %d\n", count++, tag, size, offset); } fis.close(); } }

注意上面图片的顺序,第一列是tag,可以看得出来tag是有序的
第二列是一条消息的size,字节数
第三列才是物理offset,可以看得出来consumeQueue是每一条消息都保存的偏移的
浙公网安备 33010602011771号