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是每一条消息都保存的偏移的

posted on 2021-04-09 19:24  MaXianZhe  阅读(126)  评论(0)    收藏  举报

导航