lytofb/CAT_source_analyze

CAT之Server端源码分析(3)

Opened this issue · 0 comments

DumpAnalyzer介绍

CatServer中,可以定时把消息存储到hdfs中,dumpAnalyzer就是用来支持这种功能的

cat_dump_analyzer

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