2. Flink ストリーム コンピューティング - アウトオブオーダー時間

1. 時間の重要性、なぜ秩序が必要なのかを理解するには?

IoTデバイスからアップロードされた軌跡データが狂うと、速度を超えて不正確な計算が行われるなど、業務処理に誤りが発生します。生放送では1時間ごとに売上が計算され、時間通りにアンカーに給料が支払われるのですが、時間がめちゃくちゃになって19時を20時と数えてしまったら問題です。

ストリーム コンピューティングにおける順序の乱れについては、どのように並べ替えるべきでしょうか?

Flink では、ストリーム コンピューティングのデータはイベントであり、各イベントには独自の生成時間があります (たとえば、各 GPS ポイントには独自の時間があります)。そのため、ストリーム コンピューティングでの並べ替えは時間次元によって行われ、Flink も並べ替えられます。時間までに達成します。

2.点滅時間タイプ

 

1) イベントが発生した時刻(Event Time)

2) イベントはフリンクタイム (インジェストタイム) に入ります。

3) イベント処理時間(Processing Time)

    最も単純なタイミングを提供し、優れたパフォーマンスを発揮しますが、分散環境では決定性が低くなります。

上記 3 種類の時間のうち、取り込み時間と処理時間は事業者が Flink に入った後に発生するものであり、障害の影響を受けません。イベント時間は外部で生成され、Flink に入るイベントの時系列が生成された時系列と異なる場合、それは順序異常の問題となります

3. その他の順不同生成

1) アウトオブオーダーのビジネス生成:

   たとえば、Kafka の場合、同じデバイスのデータが異なるパーティションに分散されると同時に、Flink は異なるパーティションを異なる速度で処理するため、混乱が生じます。

   ビジネス パーティション ルールは、ビジネス統計の flink に入力されるグループ化ルールと矛盾しています。(ビジネスは日付ごとに分割され、フリンクはタイプごとにグループ化されてカウントされます)

2) プログラム悪用障害

  1. データソースは順序付けされています

  2. リバランス(ランダム)転送を通じて異なるマップを移動する

  3. マップをデータベースに直接シンクすると、ビジネス データの順序がめちゃくちゃになります

上記の演算子の順序の乱れを解決するにはどうすればよいですか?

 

ds.setParallelism(3).keyBy(...).map(...).setParallelism(3)

keyBy 演算子を使用してビジネス属性ごとにグループ化し、順序の目的を達成します。

概要: Flink では、シャッフル メカニズムが再バランスされている限り、順序が崩れる問題が発生します。故障がビジネスに影響を与えるかどうかについては、シナリオに応じて検討する必要があります。

おすすめ

転載: blog.csdn.net/lzzyok/article/details/120685308