consume queue
consume queue是消息的逻辑队列,相当于字典的目录,用来指定消息在物理文件commit log上的位置。
我们可以在配置中指定consumequeue与commitlog存储的目录 每个topic下的每个queue都有一个对应的consumequeue文件,比如:
${rocketmq.home}/store/consumequeue/${topicName}/${queueId}/${fileName}
每个文件大小6000000字节,大概5.7M左右,默认配置能够存储30W消息,每当消费满了的时候会从新建立一个新文件进行存储,每次都会取最后一个文件当作
consumeQueue存储,一旦最后一个文件满了,就会重新创建一个文件,添加到末尾。
那么问题来啦?这块涉及到了内存映射文件,刷盘的策略是怎么样的:
当前刷盘服务是FlushConsumeQueueService,采用的是1000ms的频率进行刷盘操作
ConsumeQueue的日志格式
消息格式如下:
- CommitLog Offset是指这条消息在Commit Log文件中的实际偏移量
- Size存储中消息的大小
- Message Tag HashCode存储消息的Tag的哈希值:主要用于订阅时消息过滤(订阅时如果指定了Tag,会根据HashCode来快速查找到订阅的消息)