振り返りシリーズ
- セッション 01: エージェント向けアーキテクチャ設計への開発者ロードマップ
- セッション 02: Amazon Bedrock Data Automation
- セッション 03: AgentCore 上のマルチエージェント
- セッション 04: Nova Act と Strands Agents を実践で活用したエージェント型 AI の構築
- セッション 04: 仕様駆動開発と Kiro で移行プロジェクトを加速
- セッション 06: 「マッチング」から「理解」へ: AgentCore Memory が実現するパーソナライズド AI 検索の実践
- セッション 07: 観測から最適化へ – LLM オブザーバビリティから AIOps へ、リアルタイムの洞察をインテリジェントな自動化に変える
- セッション 08: TEAM の導入と最高のエンジニアリングチームの構築
- セッション 09: いわゆるサーバーレスデータベースの5年間から得た5つの厳しい教訓
- セッション 14: AI が私の仕事をしたらどうなるか Q Developer CLI と Kiro が私の日常業務をどう変えたか
- セッション 16: 警戒を保ちながら迅速に:Amazon Bedrock エージェント開発に不可欠なセキュリティ
- セッション 26: 1 台の H100 で OSS LLM をよりスマートに、低コストで、高速に実行
- セッション 28: 最新の統合メタデータアーキテクチャ:データサイロを解消する新たなアプローチ
- セッション 29: サーバーレス MediaOps:Amazon Web Services 上の AI による動画ワークフローの自動化
- セッション 30: 大規模パフォーマンステストによる効率性と信頼性を重視したアーキテクチャ設計
- セッション 31: オープンソースで世界をつなぐ: テクノロジー、コミュニティ、グローバルな開発者関係をめぐる実践の旅
- セッション 33: リアルタイム物流分析のためのストリーミング Iceberg テーブルの構築
- セッション 34: 大規模ロボット戦略トレーニングの高速化: Kiro、Trainium、EKS に基づく自動クローズドループアーキテクチャ
- セッション 35: 仕様駆動開発で「Vibe」から実用レベルへ
- セッション 36: クラウドコスト分析をよりスマートに: StrandsとAgentCoreによるFinOpsインテリジェントエージェントの構築
- セッション 37: CNCF Kagent、K8sGPT、Nova Sonicを使用したK8s向け対話型エージェントAIOpsの変革
セッションノート
現代の物流が抱える課題:
- トラック、ドライバー、ルート、燃料、メンテナンス、配送、倉庫に関する複数のストリームを管理する。
- リアルタイムの運用ビューと長期的な分析が必要。データストレージの要件:
- 即時の運用に利用できる、最新の結合済みビュー。
- 長期的な分析に Apache Iceberg を使用。テクノロジースタック:
- RisingWave: ストリーミング機能を提供するデータプラットフォーム。
- Lakekeeper: データ管理のためのオープンな REST カタログ。
- Kafka: ストリーミングデータのイベント基盤。
- オブジェクトストレージ(例: MinIO): データのストレージソリューション。目的:
- 指定されたオープンスタックを使用してストリーミング Iceberg テーブルを構築する方法を実演する。
- 現代の物流データ管理に向けたシンプルで効果的なソリューションを提供する。物流分析の課題
- 今日の物流プラットフォームが生成するデータ:
- トラック: 車両在庫と位置
- ドライバー: 名簿と割り当て
- 配送: 出発地、目的地、重量
- 倉庫: 収容能力と拠点
- ルート: ETA と距離
- 燃料とメンテナンス: コストと信頼性のシグナル
- 課題:
- 運用チームには、これらすべてのストリームを横断する最新の結合済みビューが必要。
- データチームには、BI、AI、履歴分析のために同じデータを Iceberg 上で利用することが必要。構築するもの(ストリーミング Iceberg パターン)
- Kafka が 7 つの物流トピックを RisingWave に供給する。
- 多方向ストリーミング結合を SQL で記述し、RisingWave 内で継続的にマテリアライズする。
- その結果を RisingWave から MinIO のような S3 互換オブジェクトストアに、ネイティブの Apache Iceberg テーブルとして永続化する。
- Spark、Trino、DuckDB などのエンジンが、オープンな REST カタログ経由で同じ Iceberg テーブルをクエリする。RisingWave でストリーミング Iceberg テーブルを使用する理由
- [ 1 ] バッチ優先のワークフロー:
- 定期ジョブ、古い結合結果、負荷の高いパイプライン。
- Iceberg に書き込むための個別の ETL ツール。
- [ 2 ] RisingWave + ストリーミング Iceberg テーブル:
- RisingWave MV 内で継続的に更新される結合と集約。
- 常に「ほぼ最新」の Iceberg スナップショット。
- 1 つの RisingWave パイプラインで、リアルタイムダッシュボードとオフライン分析の両方に対応。
- 目標: ストリーミングパイプラインと Iceberg への書き込みを RisingWave に担わせ、Iceberg をデータベースのように扱えるようにする。
ハイレベルアーキテクチャ
- エンドツーエンドのスタック:
- Kafka — 7 つの物流トピックのイベント基盤。
- RisingWave(ストリーミングデータベース)— SQL で取り込み、結合、集約を行い、マテリアライズドビューを管理。
- RisingWave Iceberg Table Engine + Lakekeeper — Iceberg テーブル上のオープンな REST カタログ。
- MinIO — S3 互換オブジェクトストレージ。
- パターン: Kafka → RisingWave → MinIO 内の Iceberg → REST カタログ経由で任意のエンジンからクエリ。RisingWave 内の物流ストリームと多方向ストリーミング結合
- RisingWave の 7 つの物流ストリーム
- この例では、RisingWave のソースとなる 7 つの Kafka トピックを使用する:
- trucks — 車両在庫、積載能力、現在地。
- driver — ドライバーの詳細と assigned_truck_id。
- shipments — 出発地、目的地、重量、トラックとの紐付け。
- warehouses — 倉庫の場所と収容能力。
- route — route_id、truck_id、driver_id、ETD/ETA、distance_km。
- fuel — 給油イベント(時刻、リットル数、給油所)。
- maint — メンテナンス履歴とコスト。
- RisingWave はそれぞれをストリーミングテーブルとして扱い、シンプルな PostgreSQL スタイルの SQL で結合できる状態にする。パターン 1: RisingWave での多方向ストリーミング結合
- RisingWave では、中核となる物流ロジックを 1 つの多方向ストリーミング結合として記述する。
- 一致するトラックがないドライバーも表示されるよう、drivers → trucks を LEFT JOIN。
- ワークロードと目的地を付加するため shipments を JOIN。
- 収容能力と場所を取り込むため warehouses を JOIN。
- ETD/ETA と距離を取り込むため route を JOIN。
- コストと信頼性のシグナルを取り込むため fuel と maint を JOIN。
- これが logistics_joined_mv となる。これは RisingWave 内でトラック/ドライバー/ルートごとに継続的に更新される、非正規化された物流レコードである。
車両 KPI、ネイティブ Iceberg テーブル、クロスエンジン読み取り
パターン 2: RisingWave の車両 KPI ビュー
- 結合済み MV の上に、車両 KPI 用の別の RisingWave MV を定義する:
- トラックごとの積載能力使用率(%)。
- トラックごとの総燃料費とメンテナンス費。
- 合計運用コスト。
- 現在のルートコンテキスト(ID、ETD、ETA、distance_km)。
- 関連するドライバーの詳細。RisingWave の概要ビューは、Grafana と運用ダッシュボード向けのライブ車両パフォーマンステーブルになる。パターン 3: RisingWave からネイティブ Iceberg へのストリーミング
- カスタムライターサービスを使用する代わりに:
- [ 1 ] logistics_joined_iceberg を RisingWave が管理するネイティブ Iceberg テーブルとして定義する。
- [ 2 ] スキーマは logistics_joined_mv を反映する。
- [ 3 ] RisingWave の小規模な設定で、ストリーミングの変更を Iceberg スナップショットとしてコミットする頻度を制御する。パターン 4: REST カタログ経由のクロスエンジン読み取り
- RisingWave が作成し、Lakekeeper REST カタログに登録した Iceberg テーブルを使用すると:
- [ 1 ] Spark は lakekeeper をカタログとして接続
- [ 2 ] Trino / DuckDB / Dremio は、それぞれの Iceberg コネクターを使用して同じテーブルを読み取れる。
- [ 3 ] すべてのエンジンから、RisingWave が継続的に更新する同じ Iceberg データが見える。
- コピーも独自テーブル形式もなく、RisingWave が書き込む標準の Iceberg だけを使用する。
ローカルのノートパソコンから本番クラスターへ: デプロイオプション
- デプロイオプション: ノートパソコンからクラスターへ
- [ 1 ] ローカル(学習とプロトタイピング向け):
- Docker で RisingWave、Kafka、MinIO、Lakekeeper を実行する。
- ノートパソコン上でストリーミング結合と Iceberg テーブルを試すのに最適。
- [ 2 ] 本番環境(実際のワークロード向け):
- Kubernetes + Helm を使用して RisingWave と残りのスタックをデプロイする。
- 環境に適したストレージクラス、リソース制限、永続化を使用する。
- RisingWave で同じ SQL とパターンを使用しながら、耐久性、スケーラビリティ、自動化を向上できる。従来の Iceberg スタックの簡素化
- 従来の Iceberg デプロイでは、多くの場合、次のものが必要:
- 個別のストリーム処理エンジン。
- スタンドアロンの Iceberg ライタージョブ。
- 外部のコンパクションおよびメンテナンスワークフロー。
- カタログ、ライター、ストレージの整合性を保つための追加の連携処理。
- RisingWave を使用すると:
- [ 1 ] ストリーミングデータベースが、取り込み、結合、マテリアライズドビュー、Iceberg への書き込みを処理する。
- [ 2 ] REST カタログ + MinIO により、すべてを完全にオープンかつ相互運用可能な状態に保つ。
- 構成要素を減らし、運用オーバーヘッドを軽減。RisingWave を使用したリファレンスアーキテクチャ
- RisingWave を中心に、システムを 3 つのレイヤーとして捉える:
- [ 1 ] ストリーム → RisingWave テーブル。
- Kafka トピックが RisingWave のストリーミングテーブルになる。
- [ 2 ] テーブル → RisingWave マテリアライズドビュー。
- ストリーミング結合と集約がライブ MV(logistics_joined_mv、truck_fleet_overview)になる。
- [ 3 ] ビュー → ストリーミング Iceberg テーブル。
- RisingWave は、小規模な設定と INSERT....SELECT により MV をストリーミング Iceberg テーブルに変換する。
- RisingWave を「ストリーミング SQL + Iceberg エンジン」と捉えれば、このモデルを多くの分野で再利用できる。物流以外にも再利用できるパターン
- RisingWave + Iceberg パターンは次の分野に適用できる:
- E コマース: 注文、在庫、価格設定、顧客イベント。
- FinTech: トランザクション、残高、リスクシグナル。
- 産業用 IoT: 機械、センサー、アラート、メンテナンス。
- 通信: セッション、利用状況、QoS 指標。
- 複数のリアルタイムストリームがあり、オープンな長期ストレージが必要な場面なら、どこでも同じように RisingWave MV と Iceberg テーブルを使用できる。主なポイント(RisingWave + Iceberg)
- Kafka、RisingWave、REST カタログ、MinIO、Iceberg を組み合わせたリファレンスアーキテクチャ。
- 実践的なパターン: 多方向ストリーミング結合、KPI ビュー、RisingWave からのネイティブ Iceberg 書き込み。
- カスタムライター、アドホックなコンパクションジョブ、強固なベンダーロックインなしで、リアルタイム物流分析を実現する。
