All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.expedia.www.haystack.pipes.commons.kafka.KafkaStreamBuilderBase Maven / Gradle / Ivy

package com.expedia.www.haystack.pipes.commons.kafka;

import com.expedia.open.tracing.Span;
import com.expedia.www.haystack.pipes.commons.serialization.SerdeFactory;
import org.apache.kafka.common.serialization.Serde;
import org.apache.kafka.common.serialization.Serdes;
import org.apache.kafka.streams.kstream.ForeachAction;
import org.apache.kafka.streams.kstream.KStream;
import org.apache.kafka.streams.kstream.KStreamBuilder;
import org.apache.kafka.streams.processor.ProcessorSupplier;

public abstract class KafkaStreamBuilderBase implements KafkaStreamBuilder, Main {
    private final KafkaStreamStarter kafkaStreamStarter;
    private final SerdeFactory serdeFactory;
    private final String application;
    private final KafkaConfig kafkaConfig;
    private final ForeachAction foreachAction;
    private final ProcessorSupplier processorSupplier;

    public KafkaStreamBuilderBase(KafkaStreamStarter kafkaStreamStarter,
                                  SerdeFactory serdeFactory,
                                  String application,
                                  KafkaConfig kafkaConfig,
                                  ForeachAction foreachAction) {
        this(kafkaStreamStarter, serdeFactory, application, kafkaConfig, foreachAction, null);

    }

    public KafkaStreamBuilderBase(KafkaStreamStarter kafkaStreamStarter,
                                  SerdeFactory serdeFactory,
                                  String application,
                                  KafkaConfigurationProvider kafkaConfigurationProvider,
                                  ProcessorSupplier processorSupplier) {
        this(kafkaStreamStarter, serdeFactory, application, kafkaConfigurationProvider, null, processorSupplier);
    }

    private KafkaStreamBuilderBase(KafkaStreamStarter kafkaStreamStarter,
                                   SerdeFactory serdeFactory,
                                   String application,
                                   KafkaConfig kafkaConfig,
                                   ForeachAction foreachAction,
                                   ProcessorSupplier processorSupplier) {
        this.kafkaStreamStarter = kafkaStreamStarter;
        this.serdeFactory = serdeFactory;
        this.application = application;
        this.kafkaConfig = kafkaConfig;
        this.foreachAction = foreachAction;
        this.processorSupplier = processorSupplier;
    }

    @Override
    public void buildStreamTopology(KStreamBuilder kStreamBuilder) {
        final Serde stringSerde = Serdes.String();
        final Serde spanSerde = serdeFactory.createJsonProtoSpanSerde(application);
        final String fromTopic = kafkaConfig.fromtopic();
        final KStream stream = kStreamBuilder.stream(stringSerde, spanSerde, fromTopic);
        if(foreachAction != null) {
            stream.foreach(foreachAction);
        }
        if(processorSupplier != null) {
            stream.process(processorSupplier);
        }
    }

    /**
     * main() is an instance method because it is called by the static void *IsActiveController.main(String [] args)
     * methods; making it an instance method facilitates unit testing.
     */
    @Override
    public void main() {
        kafkaStreamStarter.createAndStartStream(this);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy