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

io.dropwizard.kafka.KafkaAdminClientBundle 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.admin.AdminClient;
import org.apache.kafka.clients.admin.NewTopic;

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 KafkaAdminClientBundle implements ConfiguredBundle {
    private final Collection topics;
    private final Map configOverrides;

    @Nullable
    private AdminClient adminClient;

    protected KafkaAdminClientBundle(final Collection topics) {
        this(topics, Collections.emptyMap());
    }

    public KafkaAdminClientBundle(final Map configOverrides) {
        this(Collections.emptyList(), configOverrides);
    }

    protected KafkaAdminClientBundle(final Collection topics, final Map configOverrides) {
        this.topics = Objects.requireNonNull(topics);
        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 KafkaAdminClientFactory kafkaAdminClientFactory = requireNonNull(getKafkaAdminClientFactory(configuration));

        final Tracing tracing = Tracing.current();

        this.adminClient = kafkaAdminClientFactory.build(environment.lifecycle(), environment.healthChecks(), configOverrides, topics);
    }

    public abstract KafkaAdminClientFactory getKafkaAdminClientFactory(final T configuration);

    public AdminClient getAdminClient() {
        return requireNonNull(adminClient);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy