Atölye Kurulumu — uv + Docker Compose ile Postgres, MinIO, Kafka, Spark, Jupyter
Bu kursun tamamında kullanacağın profesyonel lokal veri stack'ini kur: uv ile Python 3.12, Docker Compose ile Postgres 16 + pgvector + MinIO + Kafka + Spark + JupyterLab. Adım adım, hata mesajları dahil.
Şükrü Yusuf KAYA
65 dakikalık okuma
Başlangıç🛠️ Bu derste ne yapacağız?
Laptop'una uçtan uca çalışan bir veri stack kuracağız: Python 3.12 environment + Docker Compose ile 6 servis ayağa kalkacak (Postgres + pgvector, MinIO, Kafka, Schema Registry, Spark, JupyterLab). Kurulum sonunda "hello pipeline" çalıştırıp her şeyin entegre çalıştığını teyit edeceğiz. Bu setup kursun TAMAMI boyunca kullanılacak.
🔧 Önkoşullar
Donanım: 16GB RAM minimum (8GB ile de çalışır ama Spark sıkışabilir), 30GB boş disk, herhangi bir modern CPU (Apple Silicon dahil). OS: macOS, Linux veya Windows + WSL2. Yazılım: Docker Desktop (Mac/Windows) ya da Docker Engine (Linux), Git, bir IDE (VS Code öneriyorum). İnternet: İlk image pull için ~6GB indirme; sonra offline çalışır.
Adım 1: Docker'ı Kur ve Doğrula#
Docker tüm stack'in temeli. Kurulu değilse şimdi yapalım.
macOS (Apple Silicon ve Intel)#
Docker Desktop indir → DMG aç → uygulamalar klasörüne sürükle → Docker Desktop'u başlat. İlk açılışta "Use recommended settings" seç.
Apple Silicon ipucu: Settings → General → "Use Rosetta for x86/amd64 emulation" işaretle (bazı imajlar amd64). Settings → Resources → 8GB RAM, 4 CPU minimum ver (varsayılan az olabilir).
Linux (Ubuntu 22.04+)#
# Eski Docker'ı kaldır sudo apt-get remove docker docker-engine docker.io containerd runc # Repository ekle sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Yükle sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Kullanıcıyı docker grubuna ekle (relogin gerekli) sudo usermod -aG docker $USER
Windows + WSL2#
- WSL2 kur: PowerShell admin →
wsl --install - Docker Desktop for Windows indir, kur.
- Docker Desktop → Settings → Resources → WSL Integration → kullandığın distro'yu enable et.
- Bundan sonra bütün komutları WSL2 terminalinden çalıştır (PowerShell'den değil).
Doğrulama#
docker --version # Beklenen: Docker version 25.x veya üzeri docker compose version # Beklenen: Docker Compose version v2.30 veya üzeri docker run --rm hello-world # Beklenen: "Hello from Docker!" mesajı
Hata: "Cannot connect to the Docker daemon" → Docker Desktop açık değil veya Linux'ta servisi başlatmadın: .
sudo systemctl start dockerAdım 2: uv ile Python 3.12 Kur#
uvKurulum#
macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh # Yeni shell aç veya: source $HOME/.local/bin/env
Windows (WSL2'de yukarıdakini, native PowerShell'de aşağıdakini):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Doğrulama#
uv --version # Beklenen: uv 0.5.0 veya üzeri
Proje dizinini kur#
# Kurs klasörü oluştur mkdir -p ~/projects/ai-veri-muh cd ~/projects/ai-veri-muh # Python 3.12 ile yeni proje uv init --python 3.12 # Bu şu dosyaları üretir: # pyproject.toml # .python-version # README.md # .gitignore # main.py # Çekirdek paketleri ekle uv add jupyter ipykernel pandas polars duckdb pyarrow psycopg2-binary minio kafka-python pyspark==3.5.3 sqlalchemy great-expectations
Neden bu paketler?
| Paket | Ne için |
|---|---|
jupyteripykernel | Interactive notebook |
pandas | Klasik DataFrame ops |
polars | Modern Rust-tabanlı DataFrame (10x hızlı) |
duckdb | In-process OLAP, lokal Parquet sorgu |
pyarrow | Arrow + Parquet için |
psycopg2-binary | Postgres connector |
minio | MinIO/S3 client |
kafka-python | Kafka producer/consumer |
pyspark | Distributed batch processing |
sqlalchemy | ORM/SQL abstraction |
great-expectations | Data quality |
bash
# Beklenen çıktı (özetlenmiş):$ uv add jupyter pandas polars duckdb pyarrow ...Resolved 142 packages in 1.34sPrepared 142 packages in 4.12sInstalled 142 packages in 187ms + duckdb==1.1.3 + jupyter==1.1.1 + kafka-python==2.0.2 + pandas==2.2.3 + polars==1.18.0 + psycopg2-binary==2.9.10 + pyarrow==18.1.0 + pyspark==3.5.3 + ...uv add komutu — bağımlılıkları çözüp lock'lar, 142 paketi 5 saniyenin altında kurar.
💡 uv ipucu
uv ile çalıştırırken "python ..." yerine "uv run python ..." kullan (otomatik venv activation). Veya "uv pip install -e ." ile geleneksel pip-style da kullanabilirsin. Lock file ("uv.lock") commit etmek standart — aynı setup'ı başka makinede yeniden üretiyor.
Adım 3: Docker Compose Dosyasını Hazırla#
Şimdi tüm servisleri tanımlayan tek bir yazacağız. Bu dosya, kursun TAMAMI boyunca kullanılacak. Servisler:
docker-compose.yml| Servis | Image | Port | Amaç |
|---|---|---|---|
| postgres | pgvector/pgvector:pg16 | 5432 | OLTP + pgvector ile vector store |
| minio | minio/minio:latest | 9000 (API), 9001 (UI) | S3-uyumlu object store |
| kafka | apache/kafka:3.8.0 | 9092 | Mesajlaşma backbone |
| schema-registry | confluentinc/cp-schema-registry:7.6.0 | 8081 | Avro/Protobuf schema |
| spark | bitnami/spark:3.5.3 | 8080 (UI), 7077 (master) | Distributed batch |
| jupyter | jupyter/pyspark-notebook:latest | 8888 | Notebook IDE |
Her servis kendi volume'unda veri tutuyor, böylece yaptığında veri kaybolmuyor.
docker compose downAşağıdaki dosyayı projenin kök dizinine kopyala:
yaml
# docker-compose.ymlname: ai-veri-muh services: # ============================================================ # Postgres 16 + pgvector — OLTP + vector store # ============================================================ postgres: image: pgvector/pgvector:pg16 container_name: ai-veri-postgres restart: unless-stopped environment: POSTGRES_USER: dataeng POSTGRES_PASSWORD: dataeng_pw_2026 POSTGRES_DB: lab POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C" ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./docker/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U dataeng -d lab"] interval: 10s timeout: 5s retries: 5 networks: - lab-net # ============================================================ # MinIO — S3-uyumlu object store # ============================================================ minio: image: minio/minio:latest container_name: ai-veri-minio restart: unless-stopped environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin_pw_2026 command: server /data --console-address ":9001" ports: - "9000:9000" # API - "9001:9001" # Console UI volumes: - minio_data:/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 10s retries: 5 networks: - lab-net # MinIO bucket'larını hazırlamak için one-shot init container minio-init: image: minio/mc:latest container_name: ai-veri-minio-init depends_on: minio: condition: service_healthy entrypoint: > /bin/sh -c " mc alias set local http://minio:9000 minioadmin minioadmin_pw_2026; mc mb -p local/raw 2>/dev/null || true; mc mb -p local/lakehouse 2>/dev/null || true; mc mb -p local/landing 2>/dev/null || true; mc anonymous set public local/raw; echo '✅ MinIO bucket setup complete'; exit 0; " networks: - lab-net # ============================================================ # Kafka (KRaft mode — Zookeeper yok!) # ============================================================ kafka: image: apache/kafka:3.8.0 container_name: ai-veri-kafka restart: unless-stopped ports: - "9092:9092" - "9093:9093" environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: broker,controller KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093 KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk" volumes: - kafka_data:/var/lib/kafka/data networks: - lab-net # ============================================================ # Schema Registry — Avro/Protobuf schema yönetimi # ============================================================ schema-registry: image: confluentinc/cp-schema-registry:7.6.0 container_name: ai-veri-schema-registry restart: unless-stopped depends_on: - kafka ports: - "8081:8081" environment: SCHEMA_REGISTRY_HOST_NAME: schema-registry SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: PLAINTEXT://kafka:9092 SCHEMA_REGISTRY_LISTENERS: http://0.0.0.0:8081 networks: - lab-net # ============================================================ # Spark master + worker # ============================================================ spark-master: image: bitnami/spark:3.5.3 container_name: ai-veri-spark-master restart: unless-stopped environment: SPARK_MODE: master SPARK_RPC_AUTHENTICATION_ENABLED: "no" SPARK_RPC_ENCRYPTION_ENABLED: "no" SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED: "no" SPARK_SSL_ENABLED: "no" ports: - "7077:7077" # master - "8080:8080" # UI networks: - lab-net spark-worker: image: bitnami/spark:3.5.3 container_name: ai-veri-spark-worker restart: unless-stopped depends_on: - spark-master environment: SPARK_MODE: worker SPARK_MASTER_URL: spark://spark-master:7077 SPARK_WORKER_MEMORY: 2G SPARK_WORKER_CORES: 2 SPARK_RPC_AUTHENTICATION_ENABLED: "no" SPARK_RPC_ENCRYPTION_ENABLED: "no" SPARK_SSL_ENABLED: "no" networks: - lab-net # ============================================================ # JupyterLab — interactive notebook environment # ============================================================ jupyter: image: jupyter/pyspark-notebook:python-3.11 container_name: ai-veri-jupyter restart: unless-stopped user: root environment: JUPYTER_TOKEN: "dataeng2026" GRANT_SUDO: "yes" JUPYTER_ENABLE_LAB: "yes" SPARK_OPTS: "--master=spark://spark-master:7077" ports: - "8888:8888" volumes: - ./notebooks:/home/jovyan/work - jupyter_data:/home/jovyan/.local networks: - lab-net volumes: postgres_data: minio_data: kafka_data: jupyter_data: networks: lab-net: driver: bridge docker-compose.yml — projenin kök dizinine kopyala.
Bonus: Postgres init script#
Postgres ilk açılırken pgvector extension'ını otomatik yüklesin:
mkdir -p docker/postgres
Sonra şu dosyayı oluştur:
sql
-- docker/postgres/init.sqlCREATE EXTENSION IF NOT EXISTS vector;CREATE EXTENSION IF NOT EXISTS pg_trgm;CREATE EXTENSION IF NOT EXISTS pg_stat_statements; -- Lab şemasıCREATE SCHEMA IF NOT EXISTS lab;GRANT ALL PRIVILEGES ON SCHEMA lab TO dataeng; -- "Hello pipeline" için örnek tabloCREATE TABLE IF NOT EXISTS lab.events ( event_id BIGSERIAL PRIMARY KEY, event_type TEXT NOT NULL, payload JSONB NOT NULL, embedding VECTOR(384), -- pgvector! created_at TIMESTAMPTZ DEFAULT now()); CREATE INDEX idx_events_type ON lab.events(event_type);CREATE INDEX idx_events_created ON lab.events(created_at DESC); COMMENT ON TABLE lab.events IS 'AI veri mühendisliği kursu — örnek event tablosu';init.sql — Postgres ilk açılışta extension'ları kurar ve örnek tablo oluşturur.
Adım 4: Stack'i Ayağa Kaldır#
Şimdi her şey yerinde — başlatıyoruz.
# Proje kök dizininde docker compose up -d # Çıktıyı izle (servisler healthy oluyor mu?) docker compose ps
İlk çalıştırmada ~6GB image indirilir, 3–5 dakika sürer. Sonraki başlatmalar 10–15 saniye.
Beklenen docker compose ps çıktısı#
docker compose psNAME STATUS PORTS ai-veri-postgres Up (healthy) 0.0.0.0:5432->5432/tcp ai-veri-minio Up (healthy) 0.0.0.0:9000-9001->9000-9001/tcp ai-veri-kafka Up 0.0.0.0:9092-9093->9092-9093/tcp ai-veri-schema-registry Up 0.0.0.0:8081->8081/tcp ai-veri-spark-master Up 0.0.0.0:7077->7077, 0.0.0.0:8080->8080 ai-veri-spark-worker Up 7077/tcp ai-veri-jupyter Up 0.0.0.0:8888->8888/tcp
ai-veri-minio-initAdım 5: Her Servisi Tek Tek Doğrula#
5.1 — Postgres#
docker exec -it ai-veri-postgres psql -U dataeng -d lab -c "SELECT extname, extversion FROM pg_extension;"
Beklenen:
extname | extversion -----------------+------------ plpgsql | 1.0 vector | 0.7.4 pg_trgm | 1.6 pg_stat_statements | 1.11
5.2 — MinIO#
Tarayıcıda aç: http://localhost:9001
- User:
minioadmin - Pass:
minioadmin_pw_2026
Sol menüde "Object Browser" → , , bucket'larını görmelisin.
rawlakehouselanding5.3 — Kafka#
# Test topic oluştur docker exec ai-veri-kafka /opt/kafka/bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --create --topic test-topic --partitions 3 --replication-factor 1 # Topic'leri listele docker exec ai-veri-kafka /opt/kafka/bin/kafka-topics.sh \ --bootstrap-server localhost:9092 --list
Beklenen çıktı:
Created topic test-topic. test-topic
5.4 — Schema Registry#
curl -s http://localhost:8081/subjects # Beklenen: [] (henüz schema yok ama servis canlı)
5.5 — Spark#
Tarayıcıda aç: http://localhost:8080
"Workers" bölümünde 1 worker görmelisin (2 cores, 2GB RAM).
5.6 — JupyterLab#
Tarayıcıda aç: http://localhost:8888
- Token:
dataeng2026
Sol panelde klasörü görmelisin.
work/Adım 6: "Hello Pipeline" — Her Şeyi Birleştir#
Şimdi 7 dakikalık bir mini-pipeline yazıyoruz. Tüm servislerle konuşacak:
- Postgres'e veri yaz
- MinIO'ya Parquet kaydet
- Kafka'ya event publish et
- DuckDB ile MinIO'daki Parquet'i sorgula
- Spark ile aynı veriyi okuyup aggregate et
JupyterLab'i aç (), yeni Python notebook oluştur, aşağıdakini yapıştır:
http://localhost:8888python
# === HELLO PIPELINE — Lokal stack entegrasyon testi === # 1) Bağımlılıklar (notebook içinde olduğun için tek seferlik install)import subprocesssubprocess.run(["pip", "install", "-q", "psycopg2-binary", "minio", "kafka-python", "duckdb", "pyarrow", "pandas"], check=True) import psycopg2, json, random, uuid, iofrom datetime import datetimeimport pandas as pdimport pyarrow as paimport pyarrow.parquet as pqfrom minio import Miniofrom kafka import KafkaProducerimport duckdb # 2) Veriyi üret — 10K sahte eventprint("🎲 Sahte event'ler üretiliyor...")events = [ { "event_id": str(uuid.uuid4()), "event_type": random.choice(["page_view", "click", "purchase", "search"]), "user_id": f"user_{random.randint(1, 1000)}", "amount": round(random.uniform(0, 500), 2), "ts": datetime.utcnow().isoformat(), } for _ in range(10_000)]df = pd.DataFrame(events)print(f" ✅ {len(df):,} event üretildi") # 3) Postgres'e yazprint("\n🐘 Postgres'e yazılıyor...")conn = psycopg2.connect( host="postgres", dbname="lab", user="dataeng", password="dataeng_pw_2026")cur = conn.cursor()# İlk 100'ünü Postgres'efor ev in events[:100]: cur.execute( "INSERT INTO lab.events (event_type, payload) VALUES (%s, %s)", (ev["event_type"], json.dumps(ev)), )conn.commit()cur.execute("SELECT COUNT(*) FROM lab.events;")pg_count = cur.fetchone()[0]print(f" ✅ Postgres'te şu an {pg_count} satır var")cur.close()conn.close() # 4) MinIO'ya Parquet olarak yazprint("\n📦 MinIO'ya Parquet yazılıyor...")mc = Minio( "minio:9000", access_key="minioadmin", secret_key="minioadmin_pw_2026", secure=False,)table = pa.Table.from_pandas(df)buf = io.BytesIO()pq.write_table(table, buf, compression="snappy")buf.seek(0)mc.put_object( "lakehouse", "hello/events.parquet", buf, length=buf.getbuffer().nbytes, content_type="application/octet-stream",)print(f" ✅ s3://lakehouse/hello/events.parquet yazıldı ({buf.getbuffer().nbytes / 1024:.1f} KB)") # 5) Kafka'ya event publishprint("\n📡 Kafka'ya yayın yapılıyor...")producer = KafkaProducer( bootstrap_servers="kafka:9092", value_serializer=lambda v: json.dumps(v).encode("utf-8"),)for ev in events[:50]: producer.send("hello-topic", ev)producer.flush()print(" ✅ 50 event 'hello-topic' topic'ine gönderildi") # 6) DuckDB ile MinIO'daki Parquet'i sorgula (no-download!)print("\n🦆 DuckDB ile MinIO'daki Parquet'i sorgula...")conn = duckdb.connect()conn.execute("INSTALL httpfs; LOAD httpfs;")conn.execute(""" SET s3_endpoint='minio:9000'; SET s3_access_key_id='minioadmin'; SET s3_secret_access_key='minioadmin_pw_2026'; SET s3_use_ssl=false; SET s3_url_style='path';""")result = conn.execute(""" SELECT event_type, COUNT(*) AS n, ROUND(SUM(amount), 2) AS total FROM read_parquet('s3://lakehouse/hello/events.parquet') GROUP BY 1 ORDER BY n DESC;""").df()print(result.to_string(index=False)) print("\n🎉 HELLO PIPELINE BAŞARILI — bütün servisler birlikte çalışıyor!") Hello pipeline — her servisin entegre çalıştığını teyit eder.
Beklenen çıktı#
🎲 Sahte event'ler üretiliyor... ✅ 10,000 event üretildi 🐘 Postgres'e yazılıyor... ✅ Postgres'te şu an 100 satır var 📦 MinIO'ya Parquet yazılıyor... ✅ s3://lakehouse/hello/events.parquet yazıldı (185.3 KB) 📡 Kafka'ya yayın yapılıyor... ✅ 50 event 'hello-topic' topic'ine gönderildi 🦆 DuckDB ile MinIO'daki Parquet'i sorgula... event_type n total page_view 2516 629342.18 click 2491 624105.87 search 2503 625882.11 purchase 2490 624471.92 🎉 HELLO PIPELINE BAŞARILI — bütün servisler birlikte çalışıyor!
Bu çıktıyı aldıysan: stack hazır, kursun geri kalanına geçebilirsin. Bu küçük örnek aslında gerçek bir AI pipeline'ının kemiklerini taşıyor — log üretimi (Kafka), batch storage (MinIO Parquet), OLTP referans (Postgres), zero-copy sorgu (DuckDB). Bunu çalıştırabilen biri, üzerine her şey kurabilir.
Adım 7: Sık Karşılaşılan Hatalar ve Çözümler#
Kurs boyunca tekrar tekrar bu listeye döneceksin. Bookmark'la.
Sebep: Lokal makinada başka bir servis aynı portu kullanıyor (örn. Postgres 5432, başka bir proje).
Çözüm 1: O servisi durdur ( ile bulup öldür).
sudo lsof -i :5432Çözüm 2: içinde port mapping'i değiştir:
docker-compose.ymlports: - "5433:5432" # external:internal
Sonra Postgres'e bağlanırken host port'u 5433 kullan.
Adım 8: VS Code / Cursor Yapılandırması#
Kursu rahat takip etmek için bir IDE'ye birkaç extension koymanı öneriyorum.
Önerilen extension'lar (VS Code / Cursor ortak)#
| Extension | Ne için |
|---|---|
| Python (ms-python.python) | Python language server |
| Jupyter (ms-toolsai.jupyter) | Notebook'u VS Code içinden çalıştır |
| Docker (ms-azuretools.vscode-docker) | docker-compose.yml IntelliSense |
| PostgreSQL (cweijan.vscode-postgresql-client2) | DB explorer + SQL editor |
| Even Better TOML (tamasfe.even-better-toml) | pyproject.toml syntax |
| Ruff (charliermarsh.ruff) | Python linter (uv ile entegre) |
| GitLens (eamodio.gitlens) | Git history içinde dolaş |
| MyPy (matangover.mypy) | Type checking |
.vscode/settings.json (proje kökünde)#
.vscode/settings.json{ "python.defaultInterpreterPath": ".venv/bin/python", "python.analysis.typeCheckingMode": "basic", "[python]": { "editor.defaultFormatter": "charliermarsh.ruff", "editor.formatOnSave": true }, "jupyter.notebookFileRoot": "${workspaceFolder}/notebooks" }
.env dosyası (kursta tekrar tekrar kullanacaksın)#
.env# .env POSTGRES_HOST=localhost POSTGRES_PORT=5432 POSTGRES_USER=dataeng POSTGRES_PASSWORD=dataeng_pw_2026 POSTGRES_DB=lab S3_ENDPOINT=http://localhost:9000 S3_ACCESS_KEY=minioadmin S3_SECRET_KEY=minioadmin_pw_2026 KAFKA_BOOTSTRAP=localhost:9092 SCHEMA_REGISTRY=http://localhost:8081 SPARK_MASTER=spark://localhost:7077 JUPYTER_URL=http://localhost:8888
'i.env'a ekle — credentials commit edilmez..gitignore
🧘 Bir disiplin önerisi
Her ders/atölye için ayrı git branch aç. "00-3-setup", "02-5-modelling-workshop", "12-5-cc-corpus" gibi. Bittiğinde main'e merge et. Bu hem temiz çalışmanı sağlar hem zamanla GitHub'ında kurs çıktılarının ayrıntılı tarihçesi olur — mülakatta gösterirsin.
Bir Sonraki Adım#
Tebrikler — şimdi profesyonel bir veri stack'in var. Kursun geri kalanında her atölye bu setup'la çalışıyor. Yeni bir terminal aç, yaz, hepsi yeşilse hazırsın.
docker compose psSonraki ders: Modül 01.1 — "Warehouse → Lake → Lakehouse: 30 yıllık evrim". Veri mimarisinin neden bugünkü şekline geldiğini, sen yeni bir şirkete girdiğinde hangi mimarinin senin için ne ifade ettiğini öğreneceğiz.
Bir şeyler kafanı karıştırdıysa ya da setup'ta bir adım çalışmadıysa, ders sayfasının yorum bölümünde sor. Aynı şeyi 10 başka kişi de yaşıyor olabilir; cevap herkese yarar.
Sık Sorulan Sorular
Evet. Çoğu image multi-arch (arm64 desteği var). Confluent Schema Registry sadece amd64 — Rosetta emülasyonuyla çalışıyor (Docker Desktop ayarlarından enable et). Performans %10-15 düşebilir ama production değil lab amaçlı yeterli. Apple Silicon native muadiller (örn. Apicurio Registry) Modül 10'da konuşacağız.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...