Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

資料分析平台部署

Redash、ClickHouse 與 Redpanda 容器化部署指南。

📊 Redash 商業智能

部署指南

核心內容:

  • Redash 安裝部署
  • 資料源配置
  • 查詢與視覺化
  • 儀表板設計
  • 使用者管理

🗄️ ClickHouse 列式資料庫

基礎配置

核心內容:

  • ClickHouse 簡介
  • 資料模型
  • 查詢語法
  • 效能優化

部署設置

核心內容:

  • Docker 部署
  • 配置文件
  • 資料導入
  • 叢集設置
  • 監控與維護

🔄 Redpanda 事件流平台

部署指南

核心內容:

  • Redpanda 簡介(Kafka 相容)
  • Docker 部署
  • 主題與分區
  • 生產者與消費者
  • 效能調優

💡 Redash 部署實戰

docker-compose.yml

version: '3.8'

services:
  server:
    image: redash/redash:latest
    command: server
    depends_on:
      - postgres
      - redis
    ports:
      - "5000:5000"
    environment:
      REDASH_WEB_WORKERS: 4
      REDASH_DATABASE_URL: postgresql://postgres:password@postgres/redash
      REDASH_REDIS_URL: redis://redis:6379/0
      REDASH_SECRET_KEY: supersecretkey

  scheduler:
    image: redash/redash:latest
    command: scheduler
    depends_on:
      - server

  worker:
    image: redash/redash:latest
    command: worker
    depends_on:
      - server

  postgres:
    image: postgres:13-alpine
    environment:
      POSTGRES_DB: redash
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:6-alpine

volumes:
  postgres_data:

🗄️ ClickHouse 部署

docker-compose.yml

version: '3.8'

services:
  clickhouse:
    image: clickhouse/clickhouse-server:latest
    ports:
      - "8123:8123"  # HTTP
      - "9000:9000"  # Native
    volumes:
      - clickhouse_data:/var/lib/clickhouse
      - ./config.xml:/etc/clickhouse-server/config.xml
    ulimits:
      nofile:
        soft: 262144
        hard: 262144

volumes:
  clickhouse_data:

基本使用

# 進入 ClickHouse 客戶端
docker exec -it clickhouse clickhouse-client

# 建立資料庫
CREATE DATABASE test;

# 建立表
CREATE TABLE test.events (
    date Date,
    user_id UInt32,
    event_type String
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(date)
ORDER BY (date, user_id);

# 插入資料
INSERT INTO test.events VALUES
    ('2024-01-01', 1, 'click'),
    ('2024-01-01', 2, 'view');

# 查詢
SELECT * FROM test.events;

🔄 Redpanda 部署

docker-compose.yml

version: '3.8'

services:
  redpanda:
    image: docker.redpanda.com/redpandadata/redpanda:latest
    command:
      - redpanda
      - start
      - --smp 1
      - --memory 1G
      - --reserve-memory 0M
      - --overprovisioned
      - --node-id 0
      - --kafka-addr PLAINTEXT://0.0.0.0:29092,EXTERNAL://0.0.0.0:9092
      - --advertise-kafka-addr PLAINTEXT://redpanda:29092,EXTERNAL://localhost:9092
    ports:
      - "9092:9092"
      - "9644:9644"  # Admin API
    volumes:
      - redpanda_data:/var/lib/redpanda/data

  console:
    image: docker.redpanda.com/redpandadata/console:latest
    ports:
      - "8080:8080"
    environment:
      KAFKA_BROKERS: redpanda:29092
    depends_on:
      - redpanda

volumes:
  redpanda_data:

Python 生產者/消費者

from kafka import KafkaProducer, KafkaConsumer
import json

# 生產者
producer = KafkaProducer(
    bootstrap_servers=['localhost:9092'],
    value_serializer=lambda v: json.dumps(v).encode('utf-8')
)

producer.send('events', {'user_id': 1, 'action': 'click'})
producer.flush()

# 消費者
consumer = KafkaConsumer(
    'events',
    bootstrap_servers=['localhost:9092'],
    value_deserializer=lambda m: json.loads(m.decode('utf-8'))
)

for message in consumer:
    print(message.value)

📊 整合應用範例

資料流架構

version: '3.8'

services:
  # 事件流
  redpanda:
    image: docker.redpanda.com/redpandadata/redpanda:latest
    # ... 配置 ...

  # 資料倉儲
  clickhouse:
    image: clickhouse/clickhouse-server:latest
    # ... 配置 ...

  # 資料視覺化
  redash:
    image: redash/redash:latest
    # ... 配置 ...

  # ETL 應用
  etl:
    build: ./etl
    depends_on:
      - redpanda
      - clickhouse
    environment:
      KAFKA_BROKERS: redpanda:29092
      CLICKHOUSE_HOST: clickhouse

最後更新: 2025-12-01