ClickHouse on EKS — measured ingest and query paths

ClickHouse on EKS — measured ingest and query paths An architecture diagram generated by Archify. numbers_mt generator · 100M synthetic k8s log rows · Architecture component numbers_mt generator 100M synthetic k8s log rows INSERT pipeline · sort · LZ4 compress (3 threads) · bench-database namespace — m5.xlarge (limit 3.5 vCPU / 12Gi) INSERT pipeline sort · LZ4 compress (3 threads) MergeTree parts · 7.82 GiB · 7 partitions · bench-database namespace — m5.xlarge (limit 3.5 vCPU / 12Gi) MergeTree parts 7.82 GiB · 7 partitions EBS gp3 100GiB · 3,000 IOPS · 125 MiB/s · Architecture component EBS gp3 100GiB 3,000 IOPS · 125 MiB/s Query client · clickhouse-client · Architecture component Query client clickhouse-client Index pruning · primary + bloom skip · bench-database namespace — m5.xlarge (limit 3.5 vCPU / 12Gi) Index pruning primary + bloom skip Column reads · only the needed columns · bench-database namespace — m5.xlarge (limit 3.5 vCPU / 12Gi) Column reads only the needed columns Page cache · warm read path · bench-database namespace — m5.xlarge (limit 3.5 vCPU / 12Gi) Page cache warm read path 100M rows / 106.7s ~940K rows/s ~75 MiB/s compressed writes SQL 98.9% of granules skipped warm: full scan 2.63s miss: direct 31.5s (125 MiB/s bound) bench-database namespace — m5.xlarge (limit 3.5 vCPU / 12Gi) Legend Backend Database Cloud External

Measured ingest

  • • 100M rows in 106.7s (in-server, upper bound)
  • • LZ4 1.97x · ZSTD(3) 3.7x (47% smaller)

Measured queries

  • • Key-range count 4ms (reads only 16,385 rows)
  • • trace_id lookup: 1.13s → 36ms with a bloom index

The real bottleneck

  • • Cold full scan at 130 MiB/s ≈ gp3 baseline
  • • Full-scan speed can be a volume setting, not the DB