Class ReflectionAvroSerde<T>

java.lang.Object
io.confluent.kafka.streams.serdes.avro.ReflectionAvroSerde<T>
All Implemented Interfaces:
Closeable, AutoCloseable, org.apache.kafka.common.serialization.Serde<T>

public class ReflectionAvroSerde<T> extends Object implements org.apache.kafka.common.serialization.Serde<T>
A schema-registry aware serde (serializer/deserializer) for Apache Kafka's Streams API that can be used for reading and writing data in "reflection Avro" format. This serde's "generic Avro" counterpart is GenericAvroSerde.

This serde reads and writes data according to the wire format defined at http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html#wire-format. It requires access to a Confluent Schema Registry endpoint, which you must GenericAvroDeserializer.configure(Map, boolean) via the parameter "schema.registry.url".

Usage

Example for configuring this serde as a Kafka Streams application's default serde for both record keys and record values:


 Properties streamsConfiguration = new Properties();
 streamsConfiguration.put(StreamsConfig.KEY_SERDE_CLASS_CONFIG, ReflectionAvroSerde.class);
 streamsConfiguration.put(StreamsConfig.VALUE_SERDE_CLASS_CONFIG, ReflectionAvroSerde.class);
 streamsConfiguration.put(
     AbstractKafkaSchemaSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG,
     "http://confluent-schema-registry-server:8081/");
 

Example for explicitly overriding the application's default serdes (whatever they were configured to) so that only specific operations such as KStream#to() use this serde:


 Serde<MyJavaClassGeneratedFromAvroSchema> reflectionAvroSerde = new ReflectionAvroSerde<>();
 boolean isKeySerde = false;
 reflectionAvroSerde.configure(
     Collections.singletonMap(
         AbstractKafkaSchemaSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG,
         "http://confluent-schema-registry-server:8081/"),
     isKeySerde);
 KStream<String, MyJavaClassGeneratedFromAvroSchema> stream = ...;
 stream.to(Serdes.String(), reflectionAvroSerde, "my-output-topic");
 
  • Constructor Details

    • ReflectionAvroSerde

      public ReflectionAvroSerde()
    • ReflectionAvroSerde

      public ReflectionAvroSerde(Class<T> type)
    • ReflectionAvroSerde

      public ReflectionAvroSerde(SchemaRegistryClient client)
      For testing purposes only.
    • ReflectionAvroSerde

      public ReflectionAvroSerde(SchemaRegistryClient client, Class<T> type)
      For testing purposes only.
  • Method Details

    • serializer

      public org.apache.kafka.common.serialization.Serializer<T> serializer()
      Specified by:
      serializer in interface org.apache.kafka.common.serialization.Serde<T>
    • deserializer

      public org.apache.kafka.common.serialization.Deserializer<T> deserializer()
      Specified by:
      deserializer in interface org.apache.kafka.common.serialization.Serde<T>
    • configure

      public void configure(Map<String,?> serdeConfig, boolean isSerdeForRecordKeys)
      Specified by:
      configure in interface org.apache.kafka.common.serialization.Serde<T>
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in interface org.apache.kafka.common.serialization.Serde<T>