搭建 ClickHouse 分析集群

适用场景

需要高吞吐的列式分析、日志/指标存储和实时报表。ClickHouse 适合大范围扫描和聚合,不擅长高频点更新和复杂事务。

前置条件

步骤

  1. 使用 ClickHouse Operator 安装:
kubectl apply -f https://raw.githubusercontent.com/Altinity/clickhouse-operator/master/deploy/operator.yaml
kubectl -n kube-system get pods | grep clickhouse-operator
  1. 创建集群 CR:
kubectl apply -f - <<'EOF'
apiVersion: clickhouse.altinity.com/v1
kind: ClickHouseInstallation
metadata:
  name: prod
  namespace: clickhouse
spec:
  configuration:
    clusters:
    - name: main
      layout:
        shardsCount: 2
        replicasCount: 2
      templates:
        podTemplate: clickhouse-pod
  templates:
    podTemplates:
    - name: clickhouse-pod
      spec:
        containers:
        - name: clickhouse
          image: clickhouse/clickhouse-server:24.8
          resources:
            requests: {cpu: "4", memory: 16Gi}
EOF
kubectl -n clickhouse get pods
  1. 建表:
clickhouse-client --host clickhouse-main-0 --query "
CREATE TABLE events (
  dt Date,
  user_id UInt64,
  event String,
  amount Decimal(10,2)
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/events', '{replica}')
PARTITION BY toYYYYMM(dt)
ORDER BY (dt, user_id);"
  1. 导入数据:
clickhouse-client --query "INSERT INTO events FORMAT JSONEachRow" < events.jsonl
  1. 查询:
clickhouse-client --query "
SELECT dt, event, count() AS c, sum(amount) AS amt
FROM events
WHERE dt >= '2026-10-01'
GROUP BY dt, event
ORDER BY c DESC
LIMIT 10;"

验证

回滚

常见坑

相关命令