Awesome
kafka-serde-scala
kafka-serde-scala provides implicit conversions from different type class Encoder/Decoder to kafka Serializer, Deserializer, Serde.
Following target libraries are supported:
- avro4s
- circe
- jackson (json, protobuf, avro)
- json4s
- jsoniter-scala
- play-json
- upickle
- scalapb
- zio-json
Inspired by https://github.com/hseeberger/akka-http-json.
Installation
Add dependencies for the selected integration:
- for avro4s:
libraryDependencies ++= List(
"io.github.azhur" %% "kafka-serde-avro4s" % version
)
- for circe:
libraryDependencies ++= List(
"io.github.azhur" %% "kafka-serde-circe" % version
)
- for jackson:
libraryDependencies ++= List(
"io.github.azhur" %% "kafka-serde-jackson" % version
)
- for json4s:
libraryDependencies ++= List(
"io.github.azhur" %% "kafka-serde-json4s" % version
)
- for jsoniter-scala:
libraryDependencies ++= List(
"io.github.azhur" %% "kafka-serde-jsoniter-scala" % version,
"com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % jsoniter_scala_version % Provided // required only in compile-time
)
- for play-json:
libraryDependencies ++= List(
"io.github.azhur" %% "kafka-serde-play-json" % version
)
- for upickle:
libraryDependencies ++= List(
"io.github.azhur" %% "kafka-serde-upickle" % version
)
- for scalapb:
libraryDependencies ++= List(
"io.github.azhur" %% "kafka-serde-scalapb" % version
)
- for zio-json:
libraryDependencies ++= List(
"io.github.azhur" %% "kafka-serde-zio-json" % version
)
Usage
Mix xxxSupport
into your code which requires implicit Kafka
Serde
, Serializer
or Deserializer
, where xxx
is the target library used for serialization, i.e: CirceSupport.
Provide your implicit type class instances and the magic will convert them to Kafka serializers:
- for avro4s:
com.sksamuel.avro4s.SchemaFor[T]
,com.sksamuel.avro4s.ToRecord[T]
,com.sksamuel.avro4s.FromRecord[T]
- for circe:
io.circe.Encoder[T]
,io.circe.Decoder[T]
- for jackson json:
com.fasterxml.jackson.databind.ObjectMapper
- for jackson binary:
com.fasterxml.jackson.databind.ObjectMapper
,org.codehaus.jackson.FormatSchema
- for json4s:
org.json4s.DefaultFormats
,org.json4s.Serialization
- for jsoniter-scala:
com.github.plokhotnyuk.jsoniter_scala.core.JsonValueCodec[T]
, (and optionallycom.github.plokhotnyuk.jsoniter_scala.core.WriterConfig
or/andcom.github.plokhotnyuk.jsoniter_scala.core.ReaderConfig
) - for play-json:
play.api.libs.json.Reads
,play.api.libs.json.Writes
- for upickle:
upickle.default.Reader
,upickle.default.Writer
- for scalapb:
scalapb.GeneratedMessageCompanion
- for zio-json:
zio.json.JsonEncoder
,zio.json.JsonDecoder
For more info, please, take a look at unit tests and at kafka-serde-scala-example
which is a kafka-streams (2.x) application with kafka-serde-scala usage.
Contribution
Feel free to contribute with creating PR or opening issues.
License
This code is open source software licensed under the Apache 2.0 License.