A library that provides in-memory instances of both Kafka and Confluent Schema Registry to run your tests against.
Relies on the embedded-kafka library.
embedded-kafka-schema-registry is available on Maven Central, compiled for Scala 2.12 and 2.13.
Support for Scala 2.11 was dropped by Apache in Kafka v2.5.0.
Versions match the version of Confluent Schema Registry they're built against.
As Kafka core inlines the Scala library, you cannot use a different Scala patch version than what Kafka used to compile its jars!
Make sure to check the versions used by the corresponding release on Apache's repository.
- In your
build.sbt
file add the following resolvers:
resolvers ++= Seq(
"confluent" at "https://packages.confluent.io/maven/",
"jitpack" at "https://jitpack.io"
)
- In your
build.sbt
file add the following dependency (replacex.x.x
with the appropriate version):"io.github.embeddedkafka" %% "embedded-kafka-schema-registry" % "x.x.x" % Test
- Have your class extend the
EmbeddedKafka
trait (from thenet.manub.embeddedkafka.schemaregistry
package). - Enclose the code that needs a running instance of Kafka within the
withRunningKafka
closure. - Provide an implicit
EmbeddedKafkaConfigImpl
(from the same package mentioned before).
class MySpec extends AnyWordSpecLike with Matchers with EmbeddedKafka {
"runs with embedded kafka and Schema Registry" should {
"work" in {
implicit val config = EmbeddedKafkaConfig()
withRunningKafka {
// ... code goes here
}
}
}
}
- In-memory Zookeeper, Kafka, and Schema Registry will be instantiated respectively on port 6000, 6001, and 6002 and automatically shutdown at the end of the test.
A library that builds on top of embedded-kafka-schema-registry
to offer easy testing of Kafka Streams with Confluent Schema Registry.
It takes care of instantiating and starting your streams as well as closing them after running your test-case code.
- In your
build.sbt
file add the following dependency (replacex.x.x
with the appropriate version):"io.github.embeddedkafka" %% "embedded-kafka-schema-registry-streams" % "x.x.x" % Test
- For most of the cases have your class extend the
EmbeddedKafkaStreams
trait (from thenet.manub.embeddedkafka.schemaregistry.streams
package). This offers both streams management and easy creation of consumers for asserting resulting messages in output/sink topics. - Use
EmbeddedKafkaStreams.runStreams
andEmbeddedKafka.withConsumer
andEmbeddedKafka.withProducer
. This allows you to create your own consumers of custom types as seen in the example test.