CAT之Server端源码分析(3)
Opened this issue · 0 comments
DumpAnalyzer介绍
CatServer中,可以定时把消息存储到hdfs中,dumpAnalyzer就是用来支持这种功能的
LocalMessageBucketManager
ConcurrentHashMap <String, LocalMessageBucket > m_buckets主要根据持久化的日志路径保存LocalMessageBucket对象
BlockingQueue < MessageBlock > m_messageBlocks 保存MessageItem经过gzip压缩的block
ConcurrentHashMap < Integer, LinkedBlockingQueue < MessageItem > > m_messageQueues 在内存中持有各个gzip执行线程压缩队列对象,根据线程的index作为索引
BlockDumper负责将gzip压缩过的block持久化到本地文件
MessageGzip负责定时压缩MessageItem
LogviewUploader负责上传logview到hdfs
- archive 把传入时间范围内的,将bucket已经压缩到block,但是没有flush的MessageBlock放入m_messageBlocks消费队列中,供BlockDumper,LogviewUploader消费
- initialize 启动blockDumper线程,启动LogviewUploader线程,启动若干个MessageGzip线程,各自干活
- loadMessage 从文件中将消息加载出来
- storeMessage 根据domain,ip等的hash将MessageItem放入MessageGzip线程的消费队列,供其压缩生成MessageBlock
LocalMessageBucket
对Message进行读写,压缩,解压缩的处理单元,LocalMessageBucket使用basePath/{date,yyyyMMdd}/{date,HH}/{name}的路径生成压缩文件,对消息的各种读写压缩操作大多都与该文件有关。
- storeMessage 通过传入的MessageItem的ByteBuf生成压缩过的MessageBlock对象
- findById 根据MessageId加载该Bucket对应文件中的MessageTree对象
MessageBlock
压缩后的消息信息的持有者,index是Message的id,size是对应message的size
MessageGzip
MessageItem的消费者,消费存储在ConcurrentHashMap <Integer, LinkedBlockingQueue > m_messageQueues中的MessageItem,将MessageItem压缩成MessageBlock,每个MessageGzip线程都有一个自己的Queue,Integer是每个线程对应queue的索引
BlockDumper
MessageBlock的消费者,消费存储在BlockingQueue m_messageBlocks中的MessageBlock,将其通过LocalMessageBucket持久化到本地
##LogViewUploader
上传logView到hdfs