kafka监控 ChaperoneServiceWorker

来源:互联网 发布:拆分盘源码 编辑:程序博客网 时间:2024/06/05 01:56

ChaperoneServiceWorker里面又将ChaperoneClientscala实现了一遍。增加了将数据存到kafkahsqldb功能。

ChaperoneServiceWorker项目入口是MirrorMakerWorkermain方法。main方法会创建用户设置的个数的MessageAudit实例,并调用这些实例的start方法,start方法内会不断发送TriggerMsg,这些message最后并不会被发送到Topic内,只是用来触发当前时间是否应该是需要发送的时间点。

main方法内部还创建了一个MirrorMakerThread线程,该thread内会建立一个kafkaStream,不断的从kafka拉取数据。并在Disruptor的帮助下,将这个数据发送给MessageAuditorauditMessage方法处理。MessageAuditorauditMessage方法和ChaperoneClinetMessageTrackertrack方法类似,只是在这里会调用verificationStore.store

verificationStore.store会把数据给真正用来处理的doStore方法,该方法如下

  private def doStore(topicName: String, offsets: util.HashMap[Int, Long], buckets: util.HashMap[Double, TimeBucketMetadata]) {    //buckets [Double, TimeBucketMetadata] key表示bucket beginTimestamp    val auditMsgs = convertToLocalAuditMsg(topicName, buckets)    debug("Converted into LocalAuditMsg=" + auditMsgs)    if (requireExactlyOnce) {      zkOffsetStoreTimer.time {        zkOffsetStore.store(topicName, offsets, auditMsgs)      }      auditMsgStoreTimer.time {        auditMsgStore.store(topicName, auditMsgs)      }    }    auditMsgReporter.reportAuditMsg(async = true, auditMsgs, this)  }

这个方法里会将数据保存到kafkahsqldb,并将数据发送到审计的Topic。最后会调用AuditMsgStoremarkAuditMsg方法把hsqldb内发送的消息标记。