複数のデバイスから送信されたイベントを処理するために、Lambda アーキテクチャの実装を検討しています。ほとんどの場合(平均など)、私の要件に合っているようです。ただし、特定のユースケースをモデル化しようとして立ち往生しています。要するに...
各デバイスにはdevice_idがあります。すべてのデバイスは、1 秒あたり 1 つのイベントを発行します。各イベントには、{0-->10} の範囲のevent_idがあります。
0 の event_id は開始を示し、10 の event_id は終了を示します
START と END の間のすべてのイベントは、1 つのグループ (event_group) にグループ化する必要があります。これにより、event_groups のタプルが生成されます。つまり、 {0,2,2,2,5,10}、 (0,4,2,7,...5,10)、(0,10) この (event_group) は小さい可能性がありますつまり、10 分または非常に長い場合は 3 時間です。
Lambda アーキテクチャによると、すべてのデバイスから送信されるこれらのイベントは、私の「マスター データ セット」です。現在、イベントは Kafka (Camus、Kafka Spout) を使用して HDFS および Storm に送信されます。
ストリーミング プロセスでは、device_id でグループ化し、redis を使用して、event_id=0 が到着するたびに生成されるキーに基づいて、一連の受信イベントをメモリに保持します。 問題は HDFS にあります。すべての着信イベントを含むファイルを 1 時間ごとに保存するとします。これら (group_events) を区別する方法はありますか?
Hive を使用すると、同じ方法でタプルをグループ化できます。ただし、各ファイルには「壊れた」event_groups も含まれます。
- (0,2,2,3) 前の計算 (ファイル)
- (4,3,) 前の計算 (ファイル)
- (5,6,7,8,10) 現在の計算 (ファイル)
device_id に基づいてそれらを (0,2,2,3,4,3,5,6,7,8,10) にマージする必要があるように (複数のファイル)
Lambda アーキテクチャはこのシナリオに適していますか? それとも、ストリーミング プロセスだけが真実の情報源であるべきですか? つまり、hbase への書き込み、hdfs 自体は、これが全体的なレイテンシーに影響を与えることはありません。