3

Apache Samza は、ローカル ストレージのストレージ エンジンとして RocksDB を使用します。これにより、ステートフルなストリーム処理が可能になります。ここに非常に優れた概要があります

私のユースケース:

  • Apache Kafka などのシステムから取得した、処理したいイベントの複数のストリームがあります。
  • これらのイベントは状態を作成します。追跡したい状態は、以前に受信したメッセージに基づいています。
  • 計算された状態に基づいて、新しいストリーム イベントを生成したいと考えています。
  • 入力ストリーム イベントは高度に接続されており、OrientDB / Neo4J などのグラフは、データをクエリして新しいストリーム イベントを作成するための理想的な媒体です。

私の質問:

KV 以外のストアを Samza のローカル ストレージとして使用することはできますか? OrientDB / Neo4J でこれを行ったことがあり、例を知っている人はいますか?

4

2 に答える 2

1

私は Samza を評価してきましたが、決して専門家ではありませんが、公式ドキュメントを読んだり、ソース コードを読んだりすることをお勧めします。Scala で書かれているという事実を除けば、非常に親しみやすいものです。

この特定のケースでは、状態管理に関するドキュメントのページの下部に向かって、次のようになります。

その他のストレージ エンジン

Samza のフォールト トレランス メカニズム (ローカル ストアの書き込みをレプリケートされた変更ログに送信する) は、ストレージ エンジンのデータ構造とクエリ API から完全に分離されています。キー値ストレージ エンジンは汎用処理に適していますが、 StorageEngineインターフェイスを実装することで、他の種類のクエリ用に独自のストレージ エンジンを簡単に追加できます。Samza のモデルは、ストリーム タスクと同じプロセスでライブラリとして実行される組み込みストレージ エンジンに特に適しています。

有用な他のストレージ エンジンのアイデア: 永続ヒープ (上位 N クエリを実行するため)、ブルーム フィルターやハイパーログログなどの近似アルゴリズム、または Lucene などのフルテキスト インデックス。(パッチは受け入れられます!)

約 2 週間前に、実際にデフォルトStorageEngine実装のコードを読んで、それがどのように機能するかをよりよく理解しました。私はそれについて多くの知的なことを言うのに十分な知識はありませんが、それを指摘することができます:

主な実装上の懸念は次のようです。

  1. タスクが失敗した場合にストアの状態を復元できるように、すべての変更をトピックに記録します。
  2. パフォーマンスの高い方法でストアの状態を復元する
  3. 生ストアへの移動を節約するために、書き込みをバッチ処理し、頻繁な読み取りをキャッシュします。
  4. ストアの使用に関する指標のレポート。
于 2015-08-17T22:48:48.173 に答える
0

入力ストリーム イベントは 1 つのグローバル グラフを定義しますか、それとも一致する Kafka/Samza パーティションごとに複数のグラフを定義しますか? Samza 状態はグローバルではなくローカルであるため、これは重要です。

1 つのグローバル グラフの場合は、Samza タスク プロセス メソッドから別のグラフ システムを更新/クエリできます。Cassandra 上の Titan は、そのようなグラフ システムの 1 つです。

複数の個別のグラフの場合は、現在の RocksDB KV ストアを使用して、グラフ データベース操作を模倣できます。Cassandra 上の Titan はまさにそれを行います。Cassandra KV ストアを使用してグラフを保存およびクエリします。グラフは、マトリックス (接続されている場合は [i,j] を 1 に設定) またはエッジ リストを介して保存されます。ノードごとに、それをキーとして使用し、一連の隣接ノードを値として保存します。

于 2015-12-08T15:34:17.477 に答える