1

私は Storm Trident を使い始めようとしており、トポロジーをセットアップして IOpaquePartitionedTridentSpout で実行し、OpaqueMapでサポートしています

ただし、トランザクションが正常にコミットされたかどうかをスパウト/関数に知らせる方法を見つけるのに苦労しています。通常のストーム スパウト/ボルト インターフェースのような ack または fail メソッドは見当たりません。

私の使用例は、同じカテゴリの前のタプルが処理されて永続化された (または失敗した) 場合にのみ、カテゴリのタプルを発行することです。処理されたデータを使用して、カテゴリの次のタプルを更新するためです。異なるカテゴリのタプルを並行して処理できます。

ストリームは、メソッドを使用してカテゴリ別に分割されますpartitionBy

max_spout_pendingTrident は一度に 1 つのバッチしかコミットしないため、1 に設定すると問題が解消されます。しかし、それはスケーラブルではありません。1 より大きい任意の値に設定すると、同じカテゴリのタプルが 2 つの連続したバッチで発行された場合、前のトランザクションがコミットされる前に処理されます。

または、カテゴリごとに 1 つのスパウトを用意し、max_spout_pending1 に設定する必要がありますか?

ありがとう

4

1 に答える 1

0

ITridentSpoutの実装を検討することをお勧めします。コーディネーターには、バッチが正常に処理されたときに呼び出される success() メソッドがあります。コーディネーターからの同じメタデータがすべてのエミッターに送信されるため、エミッターは作業を分割する必要があります。

于 2015-04-18T21:23:17.623 に答える