
2026/01/20 20:38
**小型 Kafka: 無料 t3.micro 上で Tansu と SQLite を実行**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
このドキュメントは、Docker Compose と SQLite ストレージを使用して、AWS t3.micro インスタンス上で軽量かつダウンタイムゼロの Tansu Kafka‑互換ブローカーを実行する方法を示しています。
• t3.micro は 1 GiB のメモリと約10 MB/s のベースライン EBS スループット(最大約260 MB/s)を提供し、これは小規模なブローカーに十分です。ブローカーのメタデータとメッセージは単一のファイルに収まり、S3 にバックアップできます。tansu.db
• 設定手順:Amazon Linux 2023 パッケージ(、spal-release)をインストールし、docker-composeを有効化、containerd.serviceをec2-userグループに追加した後再起動します。Docker‑Compose ファイルは最新の Tansu イメージ(docker)を使用し、環境変数としてghcr.io/tansu‑io/tansu
–(例:ADVERTISED_LISTENER_URL)、tcp://<instance-hostname>:9092/
–、RUST_LOG=warn
–を設定します。STORAGE_ENGINE="sqlite://data/tansu.db"
ホストディレクトリはコンテナ内の./にマウントされ、ポート 9092 で Kafka が公開されます。/data/
• テスト中に観測されたメモリ使用量は、初期約18.9 MB からスケーリング後に約27.3 MB に増加し、システムの空きメモリは >500 MiB のままでした。
• パフォーマンステスト()では、約200 k 件のレコードを約7 k rec/sec(≈6.8 MB/s)で送信し、平均遅延は ~35 ms、最大は 206 msでした。kafka-producer-perf-test
• ブローカーのダウンタイムゼロバックアップ戦略は S3 ストレージエンジンを使用しており、複数のステートレスブローカーが同時に単一バケットを共有できます。
• 今後の方向性には、を用いた null エンジンのチューニング、CPU ボトルネック最適化、レイヤー(Route, Layer, Process)のコンポーズ可能な構成、オンデマンド展開(例:Fly 上の Tigris)、CI スモークテストなどが含まれます。cargo flamegraph
• 全体として、このセットアップは、完全に Kafka 互換のブローカーを AWS フリーティアインスタンスで低コストで実行しつつ、予測可能なパフォーマンスと S3 完全状態バックアップによる簡易的な災害復旧を提供できることを示しています。
本文
AWS では t3.micro インスタンス(1 GiB RAM、約10 MB/s のベースライン EBS スループット)で利用できるフリーティアが提供されています。
これは初期段階のプロジェクトを立ち上げるには理想的で、必要に応じて最大約260 MB/s まで伸びます。
CPU クレジットは制限要因になるため、常に確認しておきましょう。
実験:t3.micro 上の Tansu ブローカー
すべてのメタデータは
tansu.db に保存されます。そのファイルをコピーするだけで環境のバックアップ・復元が可能です。
ゼロダウンタイム構成では、S3 ストレージエンジンを使用して複数のステートレスブローカーが同じバケットを共有できます。
1️⃣ Amazon Linux 2023 の t3.micro を起動
sudo dnf install -y spal-release sudo dnf install -y docker-compose sudo systemctl enable containerd.service sudo usermod -a -G docker ec2-user sudo /sbin/shutdown -r now
再起動後にログインし、
compose.yaml を作成します。
services: tansu: image: ghcr.io/tansu-io/tansu environment: ADVERTISED_LISTENER_URL: tcp://ec2-35-179-120-103.eu-west-2.compute.amazonaws.com:9092/ RUST_LOG: ${RUST_LOG:-warn} STORAGE_ENGINE: "sqlite://data/tansu.db" volumes: - ./:/data/ ports: - 9092:9092
注意:
はご自身のインスタンス DNS 名に置き換えてください。ADVERTISED_LISTENER_URL
ブローカーを起動します:
docker compose up -d
2️⃣ リソース使用量の確認
ps -p $(pgrep tansu) -o rss= | awk '{print $1/1024 " MB"}' # → 約18.9 MB
3️⃣ テストトピックを作成
docker compose exec tansu /tansu topic create test docker compose exec tansu /tansu topic list | jq '.[].name' # → "test"
4️⃣ ローカル Mac Mini(4 GB RAM)からの性能テスト
kafka-producer-perf-test \ --topic test \ --num-records 200000 \ --record-size 1024 \ --throughput 7000 \ --producer-props bootstrap.servers=ec2-35-179-120-103.eu-west-2.compute.amazonaws.com:9092
典型的な出力(≈ 7 MB/s、< 70 ms のレイテンシ):
200000 records sent, 6989.3 records/sec (6.83 MB/sec), 35.56 ms avg latency, 206.00 ms max latency, …
なぜこれがうまくいくのか
- 低コスト – t3.micro で約 $0/時。
- CPU クレジット蓄積 – 負荷スパイク時にクレジットを消費し、アイドル時は貯める。
- 簡単なスケーリング –
を大きいインスタンス(例:t3.xlarge)へコピーすれば即座に拡張可能。tansu.db
| インスタンス | vCPU | ベースライン % | CPU クレジット/時 |
|---|---|---|---|
| t3.micro | 2 | 10% | 12 |
| t3.small | 2 | 20% | 24 |
| t3.medium | 4 | 20% | 24 |
| t3.large | 2 | 30% | 36 |
| t3.xlarge | 4 | 40% | 96 |
| t3.2xlarge | 8 | 80% | 192 |
ブローカーのメモリ使用量
ps -p $(pgrep tansu) -o rss= | awk '{print $1/1024 " MB"}' # → t3.micro で約27 MB
システムメモリスナップショット
total used free shared buff/cache available 916 MiB 230 MiB 96 MiB 0 MiB 589 MiB 552 MiB
ブローカーは非常にフレキシブルで、バイト単位を効率的に利用し CPU ボトルネックを回避しています。
追加リソース
- Tansu をクローン&スター:https://github.com/tansu-io/tansu
- その他の記事:
- Null ストレージエンジンでのチューニング(cargo flamegraph)
- SQLite の CRC32 最適化
- Route、Layer & Process Kafka Messages with Tansu Services
- Rust で実装された低レベル Kafka プロトコル
- Kafka メッセージを Parquet に変換
- Fly 上での Tansu と Tigris の運用
- Bash Automated Testing System を使ったスモークテスト
Tansu は Apache ライセンス下にある非同期 Rust ベースの Kafka 互換ブローカー、プロキシ、初期段階クライアント API で、メモリ・Null・PostgreSQL・SQLite・S3 など複数のストレージエンジンをサポートします。Docker イメージを実行できるクラウドプロバイダーならどこでも動作します。