|
This version is still in development and is not considered stable yet. For the latest stable version, please use Korvet 0.19! |
Run the Demo
The korvet demo command starts a complete, self-contained Korvet
showcase with a single command. It is the fastest way to see how the broker,
web UI, and tiered storage work together.
Prerequisites
-
Install Korvet — on macOS and Linux,
brew install redis/tap/korvet. -
A way for the demo to reach a module-enabled Redis 8+ — one with the RedisJSON (
JSON.*) commands. Any of: a module-enabled Redis already running, a module-enabledredis-serverbinary on yourPATH(the Redis Open Source cask provides one; see Install), or Docker. The demo tries them in that order.The Homebrew core redisformula ships without that module, so aredis-serverfrom it is not sufficient — the demo would skip it and fall back to Docker. For a Docker-free run, install the module-enabled cask (brew install --cask redis).
Start the demo
brew install redis/tap/korvet
korvet demo
This single command:
-
Resolves Redis — reuses a module-enabled Redis already running at
redis://localhost:6379, otherwise starts a throwaway localredis-server(only if it is module-enabled), otherwise falls back to aredis:8Docker container. -
Starts the broker and web UI in-process, pointed at a local-filesystem Iceberg cold tier under
/tmp/korvet-demo. -
Resets any previous demo state on a reused Redis (demo topics, consumer groups, and their cold-tier catalog tables), so every run starts clean. Pass
--no-freshto keep the previous run’s data instead. -
Creates the e-commerce demo topics — a tiered
clickstreamtopic (3 partitions) with a shortsegment.msso data reaches the cold tier within seconds, tieredordersandpaymentstopics derived from purchases, and a compactedinventorytopic that keeps only the latest stock level per product. -
Streams synthetic JSON e-commerce events while two consumer groups read them:
analytics(two members) on the clickstream, andfulfillment— a deliberately slow consumer onorders, so the UI’s lag view has real motion.
On an interactive terminal the demo shows a full-screen live dashboard. When
output is piped or --verbose is set, it prints a plain walkthrough and streams
logs to the console instead.
What you’ll see
Kafka bootstrap |
|
Web UI |
|
Iceberg cold tier |
|
The demo uses 127.0.0.1 instead of localhost for the Kafka bootstrap
address. This ensures compatibility with dual-stack clients (kcat, confluent-kafka)
that resolve localhost to IPv6 ::1 first, where the demo’s loopback-only
listener is not bound.
|
In the web UI, explore:
-
The
clickstream,orders,payments, andinventorytopics and their JSON messages.inventoryis compacted — only the latest stock level per product survives. -
The
analyticsandfulfillmentconsumer groups — members, partition assignment, committed offsets, and lag.fulfillmentreads slowly on purpose, so its lag visibly grows. -
The cold-tier warehouse filling up as sealed segments offload to Iceberg, then evict their local copies after
local.retention.ms(2 minutes in the demo).
On the live dashboard, press p to pause/resume the producer and c to stop
one analytics consumer and watch the group rebalance. The header shows
cold-tier health: how many segments have offloaded, or a red indicator if
offloads are failing.
Once Parquet files appear, query the cold tier directly with DuckDB:
duckdb -c "INSTALL iceberg; LOAD iceberg; SET unsafe_enable_version_guessing=true; \
SELECT count(*) FROM iceberg_scan('/tmp/korvet-demo/korvet/clickstream');"
Useful options
|
Produce a fixed number of events, or |
|
Approximate produce rate. Default: |
|
Auto-shutdown after a duration, e.g. |
|
Override the broker and UI ports (default |
|
Reuse a Redis already running at this URI. |
|
Keep a previous demo run’s topics, groups, and cold-tier state on a reused Redis instead of resetting them. |
|
Name and partition count of the clickstream topic (default |
|
Directory for Redis data and the Iceberg warehouse. Default: |
|
Stream full broker and Kafka-client logs instead of the live dashboard. |
Next steps
-
Hello World — create a topic and produce and consume records with your own Kafka client.