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

com.networknt.mesh.kafka.streams.MessageReplayStreams Maven / Gradle / Ivy

The newest version!
package com.networknt.mesh.kafka.streams;

import com.networknt.mesh.kafka.util.StreamsFactory;
import com.networknt.config.Config;
import com.networknt.kafka.common.KafkaStreamsConfig;
import com.networknt.kafka.streams.LightStreams;
import com.networknt.utility.ObjectUtils;
import org.apache.kafka.common.serialization.Serdes;
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.StreamsConfig;
import org.apache.kafka.streams.Topology;
import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Properties;

public class MessageReplayStreams implements LightStreams {

    private static final Logger logger= LoggerFactory.getLogger(MessageReplayStreams.class);

    static final KafkaStreamsConfig replayStreamsConfig = (KafkaStreamsConfig) Config.getInstance().getJsonObjectConfigNoCache(KafkaStreamsConfig.CONFIG_NAME, KafkaStreamsConfig.class);

    private KafkaStreams kafkaStreams;

    @Override
    public void start(String ip, int port) {
        Properties streamProps = new Properties();
        replayStreamsConfig.getProperties().put("auto.offset.reset", "latest");
        replayStreamsConfig.getProperties().put(StreamsConfig.APPLICATION_ID_CONFIG, replayStreamsConfig.getProperties().get("application.id").toString().concat("-replaystream"));
        replayStreamsConfig.getProperties().put("enable.idempotence","false");
        streamProps.putAll(replayStreamsConfig.getProperties());
        streamProps.put(StreamsConfig.APPLICATION_SERVER_CONFIG, ip +":"+port);
        streamProps.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());
        streamProps.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());


        MessageReplayStreamTopology replayStreamsTopology = new MessageReplayStreamTopology();
        Topology topology = replayStreamsTopology.buildReplayTopology();

        try {
            kafkaStreams = StreamsFactory.createKafkaStreams(topology, streamProps);
            kafkaStreams.setUncaughtExceptionHandler(eh ->{
                logger.error("Kafka-Streams uncaught exception occurred. Stream will be replaced with new thread", eh);
                return StreamsUncaughtExceptionHandler.StreamThreadExceptionResponse.REPLACE_THREAD;
            });
            if(replayStreamsConfig.isCleanUp()) {
                kafkaStreams.cleanUp();
            }
            kafkaStreams = startStream(ip, port, topology, replayStreamsConfig, replayStreamsTopology.getDlqTopicMetadataMap(), MessageReplayStreamTopology.replayMetadataProcessor);

        }catch (Exception e){
            logger.error(e.getMessage());
            kafkaStreams = null;
        }
    }

    @Override
    public void close() {
        if(kafkaStreams !=null)
            kafkaStreams.close();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy