kafka监控 ChaperoneServiceWorker

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内发送的消息标记。

猜你喜欢

转载自blog.csdn.net/sweatott/article/details/78011890
今日推荐