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

io.dropwizard.kafka.KafkaConsumerBundle Maven / Gradle / Ivy

package io.dropwizard.kafka;

import brave.Tracing;
import io.dropwizard.Configuration;
import io.dropwizard.ConfiguredBundle;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.ConsumerRebalanceListener;

import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Objects;

import javax.annotation.Nullable;

import static java.util.Objects.requireNonNull;

public abstract class KafkaConsumerBundle implements ConfiguredBundle {
    private final Collection topics;
    private final ConsumerRebalanceListener consumerRebalanceListener;
    private final Map configOverrides;

    @Nullable
    private Consumer consumer;

    protected KafkaConsumerBundle(final Collection topics,
                                  final ConsumerRebalanceListener consumerRebalanceListener) {
        this(topics, consumerRebalanceListener, Collections.emptyMap());
    }

    protected KafkaConsumerBundle(final Collection topics,
                                  final ConsumerRebalanceListener consumerRebalanceListener,
                                  final Map configOverrides) {
        this.topics = Objects.requireNonNull(topics);
        this.consumerRebalanceListener = Objects.requireNonNull(consumerRebalanceListener);
        this.configOverrides = Objects.requireNonNull(configOverrides);
    }

    @Override
    public void initialize(final Bootstrap bootstrap) {
        // do nothing
    }

    @Override
    public void run(final T configuration, final Environment environment) throws Exception {
        final KafkaConsumerFactory kafkaConsumerFactory = requireNonNull(getKafkaConsumerFactory(configuration));

        final Tracing tracing = Tracing.current();

        this.consumer = kafkaConsumerFactory.build(environment.lifecycle(), environment.healthChecks(), tracing,
                consumerRebalanceListener, configOverrides);
    }

    public abstract KafkaConsumerFactory getKafkaConsumerFactory(T configuration);

    public Consumer getConsumer() {
        return requireNonNull(consumer);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy