package com.neverwinterdp.scribengin.dataflow.test; import java.io.IOException; import com.neverwinterdp.kafka.tool.KafkaMessageCheckTool; import com.neverwinterdp.kafka.tool.KafkaTopicReport; import com.neverwinterdp.scribengin.ScribenginClient; import com.neverwinterdp.scribengin.dataflow.test.DataflowTestReport.DataflowSinkValidatorReport; import com.neverwinterdp.scribengin.storage.StorageDescriptor; public class DataflowKafkaSinkValidator extends DataflowSinkValidator { private KafkaMessageCheckTool kafkaMessageCheckTool; private String zkConnect ; @Override public StorageDescriptor getSinkDescriptor() { StorageDescriptor sink = new StorageDescriptor("KAFKA"); sink.attribute("name", "DataflowKafkaSinkValidator"); sink.attribute("topic", sinkName); sink.attribute("zk.connect", zkConnect); return sink; } @Override public void init(ScribenginClient scribenginClient) { zkConnect = scribenginClient.getRegistry().getRegistryConfig().getConnect(); } @Override public void run() { kafkaMessageCheckTool = createKafkaMessageCheckTool(); kafkaMessageCheckTool.run(); } @Override public void runInBackground() { kafkaMessageCheckTool = createKafkaMessageCheckTool(); kafkaMessageCheckTool.runAsDeamon(); } @Override public boolean waitForTermination() throws InterruptedException { return kafkaMessageCheckTool.waitForTermination(); } @Override public boolean waitForTermination(long timeout) throws InterruptedException { return kafkaMessageCheckTool.waitForTermination(timeout); } @Override public void populate(DataflowTestReport report) { KafkaTopicReport topicReport = kafkaMessageCheckTool.getReport() ; DataflowSinkValidatorReport sinkReport = report.getSinkValidatorReport(); sinkReport.setSinkName(topicReport.getTopic()); sinkReport.setNumberOfStreams(topicReport.getNumOfPartitions()); sinkReport.setReadCount(topicReport.getConsumerReport().getMessagesRead()); sinkReport.setDuration(topicReport.getConsumerReport().getRunDuration()); try { kafkaMessageCheckTool.getMessageTracker().dump(System.out); } catch (IOException e) { e.printStackTrace(); } } KafkaMessageCheckTool createKafkaMessageCheckTool() { String[] args = { "--topic", sinkName, "--num-partition", Integer.toString(5), "--consume-max", Long.toString(expectRecords), "--zk-connect", zkConnect }; KafkaMessageCheckTool kafkaMessageCheckTool = new KafkaMessageCheckTool(args); kafkaMessageCheckTool.setMessageExtractor(new RecordMessageExtractor()); return kafkaMessageCheckTool; } }