Repository navigation
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
105 lines (102 loc) · 4.25 KB
/
Copy pathdocker-compose.yml
File metadata and controls
105 lines (102 loc) · 4.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# Copyright 2026 Kates Contributors
# SPDX-License-Identifier: Apache-2.0
#
# Lightweight local evaluation stack (< 1 GB RAM, no Kind or Kubernetes needed).
# Starts a single-broker KRaft Apache Kafka cluster, PostgreSQL and the
# GraalVM native Kates API (which also bundles the `kates` CLI).
#
# Quick start:
# docker compose up -d --wait
# docker compose exec kates kates health
# docker compose exec kates kates test create --type LOAD --records 50000 --wait
# docker compose exec kates kates gate --min-grade C --records 50000
# docker compose exec kates kates security audit
# docker compose down -v
services:
postgres:
image: postgres:16.15-alpine
command:
- postgres
- -c
- shared_buffers=32MB
- -c
- max_connections=30
environment:
POSTGRES_DB: kates
POSTGRES_USER: kates
POSTGRES_PASSWORD: kates
healthcheck:
test: ["CMD-SHELL", "pg_isready -U kates -d kates"]
interval: 2s
timeout: 2s
retries: 15
start_period: 2s
kafka:
image: apache/kafka:4.3.1
environment:
KAFKA_NODE_ID: "1"
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1"
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: "1"
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: "1"
KAFKA_DEFAULT_REPLICATION_FACTOR: "1"
KAFKA_MIN_INSYNC_REPLICAS: "1"
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: "0"
KAFKA_NUM_PARTITIONS: "3"
KAFKA_HEAP_OPTS: "-Xms192m -Xmx384m"
healthcheck:
test: ["CMD", "/opt/kafka/bin/kafka-broker-api-versions.sh", "--bootstrap-server", "localhost:9092"]
interval: 3s
timeout: 5s
retries: 20
start_period: 5s
kates:
image: ${KATES_IMAGE:-ghcr.io/bmscomp/kates:1-native}
command: ["-XX:MaximumHeapSizePercent=75", "-Xmx256m"]
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
ports:
- "127.0.0.1:${KATES_PORT:-8080}:8080"
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
QUARKUS_DATASOURCE_JDBC_URL: jdbc:postgresql://postgres:5432/kates
KATES_DB_USERNAME: kates
KATES_DB_PASSWORD: kates
KATES_KAFKA_BOOTSTRAP_SERVERS: ${KATES_KAFKA_BOOTSTRAP_SERVERS:-kafka:9092}
KATES_KAFKA_SECURITY_PROTOCOL: ${KATES_KAFKA_SECURITY_PROTOCOL:-PLAINTEXT}
KATES_API_SECURITY_ENABLED: ${KATES_API_SECURITY_ENABLED:-false}
KATES_API_KEY: ${KATES_API_KEY:-}
KATES_CHAOS_PROVIDER: noop
KATES_CHAOS_ORPHAN_RECOVERY_ENABLED: "false"
QUARKUS_OTEL_ENABLED: "false"
# Single-broker defaults across all workload profiles (override via
# KATES_REPLICATION_FACTOR / KATES_MIN_INSYNC_REPLICAS for multi-broker targets).
KATES_TESTS_LOAD_REPLICATION_FACTOR: ${KATES_REPLICATION_FACTOR:-1}
KATES_TESTS_LOAD_MIN_INSYNC_REPLICAS: ${KATES_MIN_INSYNC_REPLICAS:-1}
KATES_TESTS_STRESS_REPLICATION_FACTOR: ${KATES_REPLICATION_FACTOR:-1}
KATES_TESTS_STRESS_MIN_INSYNC_REPLICAS: ${KATES_MIN_INSYNC_REPLICAS:-1}
KATES_TESTS_SPIKE_REPLICATION_FACTOR: ${KATES_REPLICATION_FACTOR:-1}
KATES_TESTS_SPIKE_MIN_INSYNC_REPLICAS: ${KATES_MIN_INSYNC_REPLICAS:-1}
KATES_TESTS_ENDURANCE_REPLICATION_FACTOR: ${KATES_REPLICATION_FACTOR:-1}
KATES_TESTS_ENDURANCE_MIN_INSYNC_REPLICAS: ${KATES_MIN_INSYNC_REPLICAS:-1}
KATES_TESTS_VOLUME_REPLICATION_FACTOR: ${KATES_REPLICATION_FACTOR:-1}
KATES_TESTS_VOLUME_MIN_INSYNC_REPLICAS: ${KATES_MIN_INSYNC_REPLICAS:-1}
KATES_TESTS_CAPACITY_REPLICATION_FACTOR: ${KATES_REPLICATION_FACTOR:-1}
KATES_TESTS_CAPACITY_MIN_INSYNC_REPLICAS: ${KATES_MIN_INSYNC_REPLICAS:-1}
KATES_TESTS_ROUNDTRIP_REPLICATION_FACTOR: ${KATES_REPLICATION_FACTOR:-1}
KATES_TESTS_ROUNDTRIP_MIN_INSYNC_REPLICAS: ${KATES_MIN_INSYNC_REPLICAS:-1}
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8080/q/health/ready"]
interval: 2s
timeout: 2s
retries: 15
start_period: 2s