aLIVE LIS is an open data integration platform for the Ethiopian livestock sector. It connects disparate national livestock information systems, normalises their data to a shared Livestock Data Standard (LDS), and surfaces a unified view across five domains: population, genetics, production, health, and trade.
The platform exposes data through Apache Superset dashboards — a full-featured internal dashboard for analysts and a simplified public dashboard for citizen users.
The foundation of aLIVE LIS was developed as part of the 2021 Livestock Information System Roadmap for Ethiopia, prepared by the Ethiopian Ministry of Agriculture (MoA), Livestock Improvement Corporation (LIC, NZ), the Alliance of Bioversity International and CIAT, and the Bill & Melinda Gates Foundation. The system architecture has since been designed to be reusable across countries.
- Provide relevant, accurate, and timely digital data to key stakeholders
- Establish high interoperability between heterogeneous livestock databases
- Support research, commercial, and industrial activities
- Define requirements for data collection, validation, storage, and sharing
- Enable ownership by national ministries and cost-effective local operations
- Foster strong engagement with data suppliers and data users
aLIVE LIS is built on an event-streaming architecture. Source systems publish data into Apache Kafka; a set of stream-processing applications transform and standardise that data in real time before writing it to an Apache Iceberg data lake on object storage (Ozone). Apache Kyuubi provides SQL access to the lake, and Apache Superset serves the dashboards.
Source systems
│
▼
Kafka Connect (source connectors + XML transformers)
│
▼
Kafka Topics (raw)
│
▼
Kafka Streams apps ──► Kafka Topics (LDS-normalised)
│
▼
Spark / Iceberg data lake
│
▼
Kyuubi (SQL gateway) ──► Superset dashboards
| Module | Role |
|---|---|
lis-streams-app |
Kafka Streams app — transforms ET-LITS raw data into the Livestock Data Standard |
ess-streams-app |
Kafka Streams app — imports and processes ESS data |
et-lits-xml-to-struct |
Kafka Connect plugin — converts XML payloads to Kafka Connect Struct (FasterXML) |
aadgg-connector |
Kafka Connect plugin — sources data from the AADGG MySQL database |
kafka-connect-extras |
Kafka Connect plugin — general-purpose custom Single Message Transforms (SMTs) |
et-lits-gen |
Test data generator — produces synthetic ET-LITS XML records at scale |
dashboard-data |
Utility — Liquibase migrations and data load to PostgreSQL / Kyuubi |
lis-monitor |
Utility — Kafka Connect and Kubernetes metrics → email alerts |
iceberg-maintainer |
Utility — Apache Iceberg table maintenance via Hive JDBC |
schema-migrations |
Utility — registers Avro schemas with Apicurio Schema Registry |
backup |
Utility — backs up databases and files to SSH or S3 |
spark-cleaner |
Utility — removes stale files generated by Spark jobs |
charts/kyuubi |
Helm chart — customised Kyuubi deployment for Kubernetes |
Schema registry: Apicurio Registry (not Confluent). Serialisation uses Avro 1.11.4.
| System | Description |
|---|---|
| ET-LITS | Livestock Identification and Traceability System |
| DOVAR2 | Disease Outbreak & Vaccination Reporting System 2 |
| ADNIS | Animal Disease Notification & Investigation System |
| AADGG | Africa Asia Dairy Genetic Gains |
| NLMIS | National Livestock Market Information System |
| Tool | Version | Notes |
|---|---|---|
| JDK (Temurin) | 11 (most modules), 21 (lis-monitor), 1.8 (iceberg-maintainer) |
mise manages versions automatically |
| Maven | 3.9+ | mise manages the version automatically |
| Docker | 20+ | Required to build container images |
| mise | latest | Automatic tool-version switching per directory |
Install mise and run mise install in the repository root; it will activate the correct Java and Maven versions for each module automatically.
This is a mono-repo. Every module is an independent Maven project built from its own directory.
cd <module-directory>
mvn clean package # compile, test, and package
mvn -DskipTests clean package # skip tests (faster)Modules that ship as Docker images include a build-image.sh (and optionally a build.sh) script:
cd lis-streams-app
./build.sh # build the jar
./build-image.sh # build and push the Docker imageImages are based on eclipse-temurin:11 and pushed to the project's private Docker registry.
- Kafka Streams apps (
lis-streams-app,ess-streams-app):tar.gz+ Docker image - Kafka Connect plugins (
et-lits-xml-to-struct,aadgg-connector,kafka-connect-extras):tar.gzonly (deployed to the Kafka Connect worker) - Utilities (
dashboard-data,lis-monitor,iceberg-maintainer, etc.):tar.gz+ Docker image
Running the full platform on Kubernetes is handled by the companion repository:
alive-lis-ops — Kustomize-based Kubernetes manifests and configuration for deploying all services.
Refer to that repository for environment configuration, secret management, and deployment instructions.
Releases use a package-name@version tag convention (e.g. lis-monitor@1.0.1).
- Update the version in the module's
pom.xmland remove the-SNAPSHOTsuffix. - Commit the version change (do not push yet).
- Create a tag:
git tag lis-monitor@1.0.1 - Add a new commit that restores the
-SNAPSHOTsuffix with an incremented version. - Push commits and the tag.
- Trigger the Jenkins pipeline for the new tag.
Windows users: keep line endings as LF. Files that end up inside Docker images will fail at runtime if CRLF line endings are introduced. Configure your editor and Git accordingly.
See CONTRIBUTING.md for code organisation guidelines, tagging conventions, and the release workflow.
Distributed under the Apache License 2.0.
Development Gateway Inc. https://developmentgateway.org/contact/