The on premise, open source version of Eventuate, which is a platform for developing transactional business applications that use the microservice architecture.
Clone or download
Latest commit 2787563 Oct 9, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Fixed circleci. Sep 10, 2018
buildSrc Fixed NPEs Feb 20, 2018
eventuate-local-console A simple console Feb 10, 2017
eventuate-local-java-common-broker #86: Support not Only Kafka. Extracting new modules, data producer, d… Apr 25, 2018
eventuate-local-java-common Support for Postgres WAL-based CDC Mar 28, 2018
eventuate-local-java-jdbc-autoconfigure Added source jars Jan 5, 2017
eventuate-local-java-jdbc-tests Removed old-cdc. Sep 7, 2018
eventuate-local-java-jdbc #44. Make kafka settings customizable. Jun 15, 2018
eventuate-local-java-kafka Merge pull request #88 from dartartem/master Jun 22, 2018
eventuate-local-java-migration Added cdc migration test. Sep 11, 2018
eventuate-local-java-test-util Spring 2 support. Dec 14, 2017
gradle/wrapper clean up Dec 14, 2017
i Added architecture diagram Aug 6, 2016
kafka Handle scenario where Kafka configuration is a k8s readonly volume Aug 22, 2018
mariadb Added mariadb support Aug 27, 2018
mysql.conf.d Initial commit Aug 6, 2016
mysql improving custom db support. Nov 23, 2017
new-cdc Merge pull request #71 from dartartem/test-optimization Oct 5, 2018
postgres Updated wal2json plugin Aug 28, 2018
scripts Restored commands to build mysql zookeeper kafka images Oct 8, 2018
zookeeper Build Zookeeper and Kafka, Fixed published repository name Dec 3, 2017
.gitignore A simple console Feb 10, 2017 Initial commit Aug 6, 2016
README.adoc Added support link Oct 9, 2018
build.gradle WIP CircleCI workflows Jun 14, 2018
docker-compose-eventuate-local-for-testing-mysql.yml Support for Postgres WAL-based CDC Mar 28, 2018
docker-compose-eventuate-local-mysql.yml Moving some env variables to app properties. Apr 9, 2018
docker-compose-eventuate-local-new-cdc-for-testing-mysql.yml Support for Postgres WAL-based CDC Mar 28, 2018
docker-compose-eventuate-local-postgres-polling.yml Moving some env variables to app properties. Apr 9, 2018
docker-compose-mariadb.yml Added mariadb support Aug 27, 2018
docker-compose-mysql.yml Support for Postgres WAL-based CDC Mar 28, 2018
docker-compose-new-cdc-mariadb.yml Added mariadb support Aug 27, 2018
docker-compose-new-cdc-mysql.yml Moving some env variables to app properties. Apr 9, 2018
docker-compose-new-cdc-postgres-polling.yml Moving some env variables to app properties. Apr 9, 2018
docker-compose-new-cdc-postgres-wal.yml Support for Postgres WAL-based CDC Mar 28, 2018
docker-compose-postgres-polling.yml Support for Postgres WAL-based CDC Mar 28, 2018
docker-compose-postgres-wal.yml Removing redundant postgres docker directory. Apr 11, 2018 Refactoring. Dec 14, 2017
gradlew clean up Dec 14, 2017
gradlew.bat clean up Dec 14, 2017
settings.gradle Added cdc migration test. Sep 11, 2018


Eventuate Local


Simplifying the development of transactional microservices

Eventuate™ Local is the on-premise, open source version of Eventuate™, which is a platform for developing transactional business applications that use the microservice architecture. Eventuate provides an event-driven programming model for microservices that is based on event sourcing and CQRS. Eventuate™ Local has the same API as the SaaS version but uses a SQL database to persist events and Kafka as the publish/subscribe mechanism.

Eventuate Local consists of:

  • A framework for developing (microservice-based) applications.

  • An event store consisting of a SQL database (currently MySQL) and Kafka.

Big Picture

The framework persists events in an EVENTS table in the SQL database and subscribes to events in Kafka. A change data capture component tails the database transaction log and publishes each event to Kafka. There is a Kafka topic for each aggregate type.

About change data capture

Eventuate Local has a change data capture (CDC) component that

  1. tails the MySQL transaction log

  2. publishes each event inserted into the EVENTS table to Kafka topic for the event’s aggregate.

The CDC component runs either embedded within each application or as a service cdcservice.

Got questions?

Don’t hesitate to create an issue or see

Need support?

Take a look at the available paid support options.

Setting up Eventuate Local

To use Eventuate Local you need to

  1. Create EVENT and ENTITIES tables in a MySQL database.

  2. Run Apache Zookeeper, Apache Kafka and the optional cdcservice

  3. Use the Eventuate Local artifacts in your application.

The easiest way to get started is to run a set of Docker containers using Docker Compose as described below.

The quick setup

This is the fastest way to get started with Eventuate Local.

Set the DOCKER_HOST_IP environment variable

You must first set the environment variable DOCKER_HOST_IP to the IP address of the machine running Docker. For example, if you are running Docker Machine on Mac/Windows this would be the IP address of the VirtualBox VM. Please note that you cannot set DOCKER_HOST_IP to localhost since that will not resolve to the correct IP address within a Docker container.

Run the Eventuate Local Docker containers

Next, you can run the Docker containers. First, copy docker-compose-eventuate-local.yml to your project. Then, launch the Docker containers by running the following command:

docker-compose -f docker-compose-eventuate-local.yml

This command creates the following containers:

  • Apache Zookeeper - used by both the change data capture component and Kafka

  • Apache Kafka - message broker

  • MySQL - MySQL database that has the eventuate schema already defined

  • cdcservice - the change data capture component

For convenience, you might want to add the contents of this file to your project’s docker-compose.yml file.

Set some environment variables

In order for your Sprint Boot application to use Eventuate Local you need to set the following application properties:


A convenient way to do that is to set the corresponding OS environment variables:

export SPRING_DATASOURCE_URL=jdbc:mysql://${DOCKER_HOST_IP}/eventuate
export SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.jdbc.Driver

You can do that by running the bash script:

Use the Eventuate Local libraries

If you are using Gradle then please specify the following in


and instead of the Eventuate HTTP/STOMP artifacts, specify the following:

compile "${eventuateLocalVersion}"
compile "${eventuateLocalVersion}"

For more information about developing applications with Eventuate Local see the Getting Started guide.

Configuring your application containers

You need to configure your application’s containers to connect to the Eventuate MySQL, Kafka and Zookeeper containers. You can do that using the following in your project’s docker-compose.yml file using links and environment:

    - mysql
    - kafka
    - zookeeper
    SPRING_DATASOURCE_URL: jdbc:mysql://mysql/eventuate

Note: in order for this to work you have either copied the container definitions from docker-compose-eventuate-local.yml to you docker-compose.yml file or you are running docker-compose with multiple -f arguments:

docker-compose -f docker-compose-eventuate-local.yml -f docker-compose.yml up -d

The not so quick version


Running an example application

The Eventuate example applications support both Eventuate and Eventuate Local.

To build an example with Eventuate Local, use this command:

./gradlew -P eventuateDriver=local assemble

To start the Docker Containers with Eventuate Local run this command:

docker-compose -f docker-compose-eventuate-local.yml up -d

The docker-compose-eventuate-local.yml file defines the application containers and the Eventuate Local containers and links them appropriately.