com.landoop.kstreams.kcql.AvroSerde.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kstreams-kcql Show documentation
Show all versions of kstreams-kcql Show documentation
Small utility lib for Kafka Streams to help with simple payload transformations
The newest version!
package com.landoop.kstreams.kcql
import java.util
import io.confluent.kafka.schemaregistry.client.SchemaRegistryClient
import io.confluent.kafka.serializers
import io.confluent.kafka.serializers.{KafkaAvroDeserializer, KafkaAvroSerializer}
import org.apache.avro.generic.GenericContainer
import org.apache.kafka.common.serialization.{Deserializer, Serde, Serdes, Serializer}
class AvroSerde private(inner:Serde[GenericContainer]) extends Serde[GenericContainer] {
def this() = this(Serdes.serdeFrom(new AvroSerializer(), new AvroDeserializer()))
def this(client: SchemaRegistryClient) = {
this(Serdes.serdeFrom(new AvroSerializer(client), new AvroDeserializer(client)))
}
override def configure(configs: util.Map[String, _], isKey: Boolean): Unit = {
inner.serializer().configure(configs, isKey)
inner.deserializer().configure(configs, isKey)
}
override def serializer(): Serializer[GenericContainer] = inner.serializer()
override def deserializer(): Deserializer[GenericContainer] = inner.deserializer()
override def close(): Unit = inner.close()
}
class AvroSerializer(val inner:KafkaAvroSerializer) extends Serializer[GenericContainer] {
def this() = this(new KafkaAvroSerializer)
def this(client: SchemaRegistryClient) = this(new KafkaAvroSerializer(client))
override def configure(configs: util.Map[String, _], isKey: Boolean): Unit = inner.configure(configs, isKey)
override def serialize(topic: String, data: GenericContainer): Array[Byte] = inner.serialize(topic,data)
override def close(): Unit = inner.close()
}
class AvroDeserializer(val inner:KafkaAvroDeserializer) extends Deserializer[GenericContainer] {
def this() = this(new serializers.KafkaAvroDeserializer())
def this(client: SchemaRegistryClient) = this(new serializers.KafkaAvroDeserializer(client))
override def close(): Unit = inner.close()
override def deserialize(topic: String, data: Array[Byte]): GenericContainer = {
inner.deserialize(topic, data).asInstanceOf[GenericContainer]
}
override def configure(configs: util.Map[String, _], isKey: Boolean): Unit = inner.configure(configs, isKey)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy