私は Storm Trident を使い始めようとしており、トポロジーをセットアップして IOpaquePartitionedTridentSpout で実行し、OpaqueMapでサポートしています。
ただし、トランザクションが正常にコミットされたかどうかをスパウト/関数に知らせる方法を見つけるのに苦労しています。通常のストーム スパウト/ボルト インターフェースのような ack または fail メソッドは見当たりません。
私の使用例は、同じカテゴリの前のタプルが処理されて永続化された (または失敗した) 場合にのみ、カテゴリのタプルを発行することです。処理されたデータを使用して、カテゴリの次のタプルを更新するためです。異なるカテゴリのタプルを並行して処理できます。
ストリームは、メソッドを使用してカテゴリ別に分割されますpartitionBy
。
max_spout_pending
Trident は一度に 1 つのバッチしかコミットしないため、1 に設定すると問題が解消されます。しかし、それはスケーラブルではありません。1 より大きい任意の値に設定すると、同じカテゴリのタプルが 2 つの連続したバッチで発行された場合、前のトランザクションがコミットされる前に処理されます。
または、カテゴリごとに 1 つのスパウトを用意し、max_spout_pending
1 に設定する必要がありますか?
ありがとう