Back to all blogs

Benchmark: Kafka builds 6.6x faster on Avrea than GitHub Actions

On GitHub Actions, a no-cache Kafka build takes 5 minutes 44 seconds. On Avrea, the same build, same 2 vCPU spec: 2 minutes 10 seconds without cache, 52 seconds with Gradle's remote cache.

Leo Lännenmäki
21 April 2026
Benchmark: Kafka builds 6.6x faster on Avrea than GitHub Actions

Why Kafka

Apache Kafka is a widely-used JVM project with a big Gradle build: hundreds of modules and a long test suite. The compilation behavior (heavy javac usage, cross-module dependencies, per-module test tasks) is close to what you'd see on other JVM services at this size.

Kafka's Gradle setup uses the Gradle build cache for task outputs. The cache can be local or remote; in CI, only remote caching helps across runs. We benchmarked the remote-cache path.

How we ran the test

We ran ./gradlew assemble on both sides. Same runner (2 vCPU, 7.8 GiB). Temurin 21. Same Kafka commit.

GitHub ActionsAvrea
Runner labelubuntu-24.04avrea-ubuntu-latest-2-vcpu
vCPU22
RAM7.8Gi7.8Gi

For the cached run, Gradle's remote cache pointed at Avrea's cache backing. On the no-cache run, build caching was disabled entirely. The GitHub Actions side had no remote cache hooked up on either run.

A few runs per config; we kept the typical one.

Results

GitHub ActionsAvreaSpeedup
No cache5m 44s2m 10s2.6x
With cachen/a52.2s6.6x

Hardware alone buys 2.6x. Turning on Gradle's remote cache against Avrea's cache layer gets the warm number to 52 seconds, for 6.6x total.

Why it's faster

The hardware (the 2.6x)

A no-cache Kafka build spends most of its time in javac and incremental class compilation across modules. CPU-bound work, with real disk pressure from writing intermediate class files.

Avrea's 2 vCPU runner on dedicated hardware pulls the 2.6x on its own. Same mechanics as every other CPU-bound JVM build.

The cache (the 6.6x)

Gradle's remote cache stores task outputs (compiled class files, test results, etc.) keyed by the hash of each task's inputs. On a cached run, if a task's inputs match, Gradle pulls the output and skips the task entirely.

The hit rate is worth a mention: about 23% even on a warm run. Most of Kafka's rebuild work is test compilation. Kafka's per-module test tasks share dependencies that tend to change between runs, so they invalidate more often than a stricter cache setup would. A team running just assemble without tests would see a noticeably higher hit rate.

That's why Kafka's 6.6x is more modest than the 39x on Bazel or the 142x on Next.js. 6.6x is still a real speedup; the ceiling is just lower given how the build is structured.

Other benchmarks in this series

What Avrea is

Avrea is a label swap, not a platform migration. runs-on: avrea-ubuntu-latest and your Gradle pipeline runs on our hardware.

Every job comes with CPU and memory at step granularity, searchable log history, and SSH into the running VM when you need it. Flaky JVM tests are where the SSH access earns its keep. A test that only fails on the CI box usually needs jstack or a heap dump, which you can only get from the running VM.

Start free on Avrea →