This quickstart gives you two paths:
- Run the local Docker proof that exercises Kafka, Schema Registry, K2I, Iceberg REST metadata, and DuckDB.
- Build and run K2I manually with a small config.
- Rust 1.94+ for building from source.
- Docker and Docker Compose for local E2E validation.
- Access to Kafka and an Iceberg-compatible catalog for manual runs.
The fastest way to see what K2I does is the Docker E2E flow.
scripts/e2e-docker-iceberg.shA passing run ends with:
ok: DuckDB iceberg_scan validated real Iceberg metadata
For the local Iceberg load profile:
K2I_E2E_LOAD_MESSAGES=100000 scripts/e2e-docker-iceberg-load.shFor the read-state and schema-evolution correctness flow:
scripts/e2e-docker.shgit clone https://github.com/osodevops/k2i.git
cd k2i
cargo build --releaseVerify the binary:
./target/release/k2i --version
./target/release/k2i --help
man ./docs/man/man1/k2i.1Use config/example.toml as the complete reference. This is a small REST-catalog example:
[kafka]
bootstrap_servers = ["localhost:9092"]
topic = "events"
consumer_group = "k2i-ingestion"
auto_offset_reset = "earliest"
[kafka.format]
type = "protobuf"
schema_registry_url = "http://localhost:8081"
subject_strategy = "topic_name"
message_type = "example.events.v1.Event"
[schema_evolution]
mode = "auto-additive"
on_breaking_change = "pause"
[buffer]
max_size_mb = 500
flush_interval_seconds = 30
flush_batch_size = 10000
[iceberg]
catalog_type = "rest"
warehouse_path = "s3://warehouse/events"
database_name = "analytics"
table_name = "events"
rest_uri = "http://localhost:8181"
[transaction_log]
log_dir = "./transaction_logs"
[monitoring]
metrics_port = 9090
health_port = 8080
[rpc]
enabled = true
socket_path = "./run/k2i.sock"For raw payloads, use:
[kafka.format]
type = "raw"json is currently raw-compatible in the ingestion loop, not a full typed JSON projection.
k2i validate --config config.toml
k2i ingest --config config.tomlCheck health and metrics:
k2i status --url http://localhost:8080
curl -s http://localhost:8080/health
curl -s http://localhost:8080/readyz
curl -s http://localhost:9090/metrics | grep k2iAfter changing CLI help, flags, or subcommands:
cargo run -p k2i-cli -- completions man --output-dir docs/man/man1
cargo test -p k2i-cli --test man_pages --no-fail-fast