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

no.nav.common.kafka.consumer.util.deserializer.AvroDeserializer Maven / Gradle / Ivy

package no.nav.common.kafka.consumer.util.deserializer;

import io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient;
import io.confluent.kafka.schemaregistry.client.SchemaRegistryClient;
import io.confluent.kafka.schemaregistry.client.SchemaRegistryClientConfig;
import io.confluent.kafka.serializers.KafkaAvroDeserializer;
import org.apache.kafka.common.serialization.Deserializer;

import java.util.HashMap;
import java.util.Map;

import static java.lang.String.format;

public class AvroDeserializer implements Deserializer {

    private final static Map SCHEMA_REGISTRY_CLIENTS = new HashMap<>();

    private final static int SCHEMA_MAP_CAPACITY = 100;

    private final KafkaAvroDeserializer kafkaAvroDeserializer;

    public AvroDeserializer(String schemaRegistryUrl, String username, String password) {
        SchemaRegistryClient schemaRegistryClient = SCHEMA_REGISTRY_CLIENTS.computeIfAbsent(
                schemaRegistryUrl,
                (url) -> {
                    Map configs = new HashMap<>();

                    configs.put(SchemaRegistryClientConfig.BASIC_AUTH_CREDENTIALS_SOURCE, "USER_INFO");
                    configs.put(SchemaRegistryClientConfig.USER_INFO_CONFIG, format("%s:%s", username, password));

                    return new CachedSchemaRegistryClient(schemaRegistryUrl, SCHEMA_MAP_CAPACITY, configs);
                }
        );

        kafkaAvroDeserializer = new KafkaAvroDeserializer(schemaRegistryClient);
    }

    public AvroDeserializer(String schemaRegistryUrl) {
        SchemaRegistryClient schemaRegistryClient = SCHEMA_REGISTRY_CLIENTS.computeIfAbsent(
                schemaRegistryUrl,
                (url) -> new CachedSchemaRegistryClient(schemaRegistryUrl, SCHEMA_MAP_CAPACITY)
        );

        kafkaAvroDeserializer = new KafkaAvroDeserializer(schemaRegistryClient);
    }

    @Override
    public T deserialize(String topic, byte[] data) {
        return (T) kafkaAvroDeserializer.deserialize(topic, data);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy