class KafkaStreams {

    public synchronized void close() {
        log.debug("Stopping Kafka Stream process");

        if (this.state == RUNNING) {
            // signal the threads to stop and wait
            for (final StreamThread thread : this.threads)
                thread.close();

            for (final StreamThread thread : this.threads) {
                try {
                    thread.join();
                } catch (final InterruptedException ex) {
                    Thread.interrupted();
                }
            }
        }

        if (this.state != STOPPED) {
            this.metrics.close();
            this.state = STOPPED;
            log.info("Stopped Kafka Stream process");
        }

    }

    public  KafkaStreams(final TopologyBuilder builder, final Properties props);
    public  KafkaStreams(final TopologyBuilder builder, final StreamsConfig config);
    public  KafkaStreams(final TopologyBuilder builder, final StreamsConfig config, final KafkaClientSupplier clientSupplier);

}