2017-01-13 12 views
0

大量のストリームを重複排除するためにhbaseを使用しています。私はそれが行キーとして使用するストリーム内の各メッセージから一意の識別子を使用してうまくいくと思った。しかし、エンドユーザーは、私が作成した出力ストリームから重複したデータを見ています。唯一の考えられる原因は、重複したメッセージが同時に消費されることです。大量のデータを含むhbaseに対して除外する

私は約50のスレッドが別のプロセスでストリームからいっぱいになっている同じキューを消費しています。これが起こらないようにする方法や適切な重複排除を達成するより良い方法はありますか?このプロセスでは、新しいレコードを挿入する前にGETを実行します。

答えて

0

あなたのアプローチにいくつかの問題があります。ストリームを50スレッドで読み込むと、HBaseにエントリが存在しないことを確認する方法がありません。 2つのスレッドが同じIDの重複したメッセージを読み込み、HBaseをチェックし、エントリが欠落していると判断し、さらにメッセージを渡す可能性があります。

並行環境での重複チェックは、ある種のミューテックスでのみ機能し、パフォーマンスは重複頻度、メッセージ消費スピードなどによって異なります。

私は、単一スレッドのコンシューマから始め、パフォーマンスに満足していない場合にのみ並行ソリューションを試してみることをお勧めします。単一スレッドの場合、重複排除にハッシュテーブルを使用できます。確かに時間がたつにつれて成長するので、ビジネスロジックによっては妥当な時間内に失効するキャッシュを使用する必要があります。

関連する問題