diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..a81a688b5a712f7595e5234f018b21abc7e30e60
Binary files /dev/null and b/.DS_Store differ
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..593d33e9e09da016a4050114a481cff9f2a2c106
--- /dev/null
+++ b/README.md
@@ -0,0 +1,21 @@
+{\rtf1\ansi\ansicpg1252\cocoartf2757
+\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\froman\fcharset0 Times-Roman;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+{\*\expandedcolortbl;;\cssrgb\c0\c0\c0;}
+\paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0
+\deftab720
+\pard\pardeftab720\partightenfactor0
+
+\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
+\outl0\strokewidth0 \strokec2 run services\
+docker-compose up -d\
+\
+kafka ui\
+http://localhost:8080\
+\
+prometheus\
+http://localhost:9090\
+\
+\
+grafana\
+http://localhost:3000}
\ No newline at end of file
diff --git a/alerts.yml b/alerts.yml
new file mode 100644
index 0000000000000000000000000000000000000000..85f7dca2e874a947f6897d15b4679de7c9cd0328
--- /dev/null
+++ b/alerts.yml
@@ -0,0 +1,11 @@
+groups:
+  - name: KafkaAlerts
+    rules:
+      - alert: HighPartitionLag
+        expr: kafka_topic_partition_lag > 100
+        for: 1m
+        labels:
+          severity: critical
+        annotations:
+          summary: "High partition lag on {{ $labels.topic }}"
+          description: "Partition lag is {{ $value }} for topic {{ $labels.topic }}."
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d26a7135bb5b18f336684b0da38a5c126396a561
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,44 @@
+version: '3.8'
+
+services:
+  zookeeper:
+    image: confluentinc/cp-zookeeper:latest
+    environment:
+      ZOOKEEPER_CLIENT_PORT: 2181
+    ports:
+      - "2181:2181"
+
+  kafka:
+    image: confluentinc/cp-kafka:latest
+    ports:
+      - "9092:9092"
+    environment:
+      KAFKA_BROKER_ID: 1
+      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
+      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
+      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
+    depends_on:
+      - zookeeper
+
+  prometheus:
+    image: prom/prometheus:latest
+    ports:
+      - "9090:9090"
+    volumes:
+      - ./prometheus.yml:/etc/prometheus/prometheus.yml
+
+  grafana:
+    image: grafana/grafana:latest
+    ports:
+      - "3000:3000"
+
+
+  kafka-ui:
+    image: provectuslabs/kafka-ui:latest
+    ports:
+      - "8080:8080"
+    environment:
+      KAFKA_CLUSTERS_0_NAME: local
+      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
+    depends_on:
+      - kafka
diff --git a/prometheus.yml b/prometheus.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3931a2e8daf8d283b405aa10751597f1ab6a2596
--- /dev/null
+++ b/prometheus.yml
@@ -0,0 +1,14 @@
+global:
+  scrape_interval: 15s
+
+scrape_configs:
+  - job_name: 'kafka'
+    static_configs:
+      - targets: ['kafka:7071']
+
+  - job_name: 'zookeeper'
+    static_configs:
+      - targets: ['zookeeper:7071']
+
+rule_files:
+  - "alerts.yml"