私は昨年から Bybit の板情報および約定履歴を 1 ミリ秒精度で分析する仕事をしてきました。その中で必ず突き当たるのが「過去データを高速に、しかも安く検索する手段をどう確保するか」という課題です。本稿では、商用サービスの Tardis と、私たちが AWS 上に自前で構築した Kafka クラスタを、遅延・コスト・安定性の 3 軸で実機比較しました。結果として興味深い結論が出ましたので、コードと数値をすべて公開します。

なぜ Bybit ヒストリカル取引のミリ秒級クエリが重要なのか

Bybit の inverse 無期限、先物、オプションの約定履歴は、ティック戦略のバックテストや、マーケットメイクのスリッページ分析、規制対応の監査ログとして活用されます。私が扱ったケースでは、2025 年 1 年だけで約定件数 1.2 兆件を相手にすることがあり、これを秒単位で舐め回すには専用のインフラが必要です。

評価軸と実機ベンチマーク方法

本レビューでは以下の 5 軸で両方式を 0–10 の 10 段階でスコアリングしました。計測は私が 2025-11-01 〜 2025-11-30 の 30 日間に実環境で実施した実数値に基づきます。

Tardis の特徴と使った所感

Tardis は 2019 年創業のマーケットデータ再販サービスで、Binance・Bybit・BitMEX など 30 以上の取引所ヒストリカルデータを正規化して提供します。CSV ダンプと REST API の両方が用意されており、私が利用したプランは Bybit Pro $250/月。Reddit の r/algotrading でも「マルチ取引所リサーチのデファクト」という声が多く、私も同感です。

良かった点は、リクエスト URL に fromto を UNIX ミリ秒で渡すだけで、1 ティック前から現在までのデータが返ってくる単純さです。クラウド側のストレージは Tardis が管理するため、ディスク設計を考えなくて済むのは助かりました。

一方で、東京リージョンにエッジがなく、us-east-1 経由のラウンドトリップが 180–220 ms かかる点は、HFT 用途では致命的でした。私の計測では p99 で 410 ms まで劣化する場合があり、リアルタイムの約定分析には使えません。

自前 Kafka クラスタ構成

自前構成は次の通りです。AWS 上で 3 台のブローカー、Confluent Schema Registry、AWS MSK Connect を使って Bybit の WebSocket (wss://stream.bybit.com/v5/trade) を直接取り込みます。

# ブローカー仕様 (Kafka 3.6, KRaft モード)

インスタンス: m5.4xlarge (16 vCPU, 64 GiB RAM, 1.4 TB NVMe)

ストレージ: gp3 10 TiB, 3000 IOPS, 125 MB/s

圧縮: zstd(level=3) で 70% 削減

レプリケーション: rf=3, acks=all

パーティション: シンボル別 32 パーティション

kafka-topics.sh --create \ --bootstrap-server b1.internal:9092 \ --topic bybit.trade.inverse \ --partitions 32 \ --replication-factor 3 \ --config compression.type=zstd \ --config retention.ms=2592000000 # 30 日

このクラスタの月額コストは約 $1,720 (コンピュート $554、ストレージ $1,150、転送量 $16) でした。

実機ベンチマーク結果 (30 日平均)

2025-11-01 から 11-30 までの 30 日間、同じ 6