Uber のテクノロジー ブログは、少ない Kafka ブローカーと少ないメモリでデータ保持を最大化することを目的とした記事「Uber における Kafka 階層型ストレージの紹介」を公開しました。これにより、さまざまなビジネス アプリケーション全体でメッセージの保持時間を長くすることができます。
一般的な解決策は、外部ストレージを手動で統合し、データを外部システムに定期的に同期することです。ただし、これには、データの保存方法の決定、同期頻度の設定、プロセスのトリガー、データのフェッチ、インデックス作成の使用など、開発とメンテナンスに多大な労力がかかります。
そこで、Uber は、外部ストレージのロジックをカプセル化し、シンプルな構成でプラグアンドプレイできるソリューションを提案しました。この機能は Apache Foundation と協力して開発されており、将来のバージョンで利用可能になる予定です。
Kafka は、非常に高いスループット機能を備えた追加専用のメッセージ キュー (MQ) コンポーネントであることを理解することが重要です。 Kafka はブローカーのローカル ストレージにログを保存し、ユーザーは保持期間またはログ サイズを構成できます。以前の会社 (Lenovo) では、Flink を使用してデータを継続的に消費していました。大量のデータにより、Kafka がディスク ストレージの制限を超え、データの書き込みエラーやビジネス エラーが発生する可能性があります。コストを削減するには、より多くのマシンを導入する代わりに、保持時間を調整するしかありません。
また、古いデータを外部ストレージに保存するシステムを各社が独自に開発するとなると、膨大な開発工数が発生します。また、同期とデータの一貫性に関して多くの問題が発生する可能性があります。
本質は、リモート ログ管理とストレージ管理を追加することでブローカーを変革することです。
RemoteLogManager: コピー、クリーニング、フェッチなど、リモート ログ セグメントのライフサイクルを管理します。
RemoteStorageManager: コピー、フェッチ、削除など、リモート ログ セグメントのアクションを管理します。リモート ログ セグメントに関連付けられたメタデータには、セグメントの開始オフセットと終了オフセット、タイムスタンプ、プロデューサー状態のスナップショット、およびリーダー エポック チェックポイントに関する情報が含まれます。
RemoteLogMetadataManager はこのメタデータを追跡し、各セグメントの開始位置と終了位置、およびデータの取得と管理に必要なその他の重要な情報をシステムが確実に認識できるようにします。
RemoteLogMetadataManager: リモート ログ セグメントのメタデータ ライフサイクルを強力な一貫性で管理します。
このうち、RemoteLogManager は制御コンポーネントとして機能し、Broker 内のディスクに直接接続して読み取りデータを取得します。また、リモート データをコールバックする役割も果たします。 RemoteStorageManager はデータを操作するエンティティであり、RemoteLogMetadataManager はメタデータの管理を担当します。
Kafka 階層型ストレージの 3 つのアクションの概要
セグメントをリモート ストレージにコピーしています
ログ セグメントの終了オフセット (セグメント内の最後のメッセージのオフセット) がパーティションの最終安定オフセットより小さい場合、そのログ セグメントはリモート ストレージへのコピーに適格であるとみなされます。(最終安定オフセット (LSO): 最も高いオフセット)これまでのすべてのメッセージは、すべての同期レプリカによって完全に確認され、データ損失が発生しません。)RemoteStorageManager は、ログ セグメントとそれに関連するインデックス、タイムスタンプ、プロデューサー スナップショット、およびリーダー エポック キャッシュのコピーを処理します。
リモート セグメントのクリーンアップ
リモート データは、専用のスレッド プールによって対象となるセグメントを計算することにより、定期的にクリーンアップされます。これは、ローカル ログ セグメントの非同期クリーンアップとは異なります。トピックが削除されると、リモート ログ セグメントのクリーンアップが非同期で実行され、既存の削除操作がブロックされたり、新しいトピックが再作成されたりすることはありません。
リモート ストレージからセグメントを取得しています
RemoteLogManager は、RemoteLogMetadataManager を使用してメタデータ ストアを調べ、必要なオフセットとリーダー エポックに基づいてターゲットのリモート セグメントを決定します。 RemoteStorageManager を使用してセグメント内の位置を見つけ、必要なデータのフェッチを開始します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3