リアルタイムコンピューティングフレームワークFlinkクラスタの構築と動作メカニズムについての簡単な説明

リアルタイムコンピューティングフレームワークFlinkクラスタの構築と動作メカニズムについての簡単な説明

1. Flinkの概要

1.1 基本的な紹介

主な機能には、バッチとストリームの統合、正確な状態管理、イベント時間のサポート、および正確に 1 回の状態一貫性の保証が含まれます。 Flink は、YARN、Mesos、Kubernetes などのさまざまなリソース管理フレームワークで実行できるだけでなく、ベアメタル クラスターでの独立したデプロイメントもサポートします。高可用性オプションを有効にすると、単一障害点がなくなります。

ここで説明する概念は 2 つあります。

  • 境界: データ集約戦略または条件として理解できる、無制限および制限付きデータ フロー。
  • ステータス: 実行順序に依存関係があるかどうか、つまり次の実行が前の実行の結果に依存するかどうか。

1.2 アプリケーションシナリオ

データ駆動型

イベント駆動型アプリケーションでは、リモート データベースをクエリする必要がありません。ローカル データ アクセスにより、スループットの向上とレイテンシの低減が可能になります。不正防止のケースを例にとると、DataDriven は処理ルール モデルを DatastreamAPI に書き込み、ロジック全体を Flink エンジンに抽象化します。イベントまたはデータが流入すると、対応するルール モデルがトリガーされます。ルール内の条件がトリガーされると、DataDriven はそれをすばやく処理し、ビジネス アプリケーションに通知します。

データ分析

バッチ分析と比較して、ストリーミング分析では定期的なデータインポートとクエリプロセスが不要になるため、イベントからインジケーターを取得する際のレイテンシが低くなります。さらに、バッチクエリは定期的なインポートや入力境界によって生じる人工的なデータ境界に対処する必要がありますが、ストリーミングクエリではこの問題を考慮する必要がありません。Flink は継続的なストリーミング分析とバッチ分析の両方に優れたサポートを提供し、データをリアルタイムで処理および分析します。リアルタイムの大画面やリアルタイムレポートなどのシナリオで広く使用されています。

データパイプライン

定期的な ETL タスクと比較して、継続的なデータ パイプラインは、データを宛先に移動するレイテンシを大幅に削減できます。たとえば、上流の StreamETL に基づいて、リアルタイムのデータ クリーニングまたは拡張を実行し、下流にリアルタイム データ ウェアハウスを構築して、データ クエリの適時性を確保し、高効率のデータ クエリ リンクを形成できます。このシナリオは、メディア ストリームの推奨や検索エンジンで非常に一般的です。

2. 環境の展開

2.1. インストールパッケージの管理

[root@hop01 opt]# tar -zxvf flink-1.7.0-bin-hadoop27-scala_2.11.tgz

[root@hop02 opt]# mv flink-1.7.0 flink1.7

2.2 クラスタ構成

管理ノード

[root@hop01 opt]# cd /opt/flink1.7/conf

[root@hop01 conf]# vim flink-conf.yaml

ジョブマネージャ.rpc.アドレス: hop01

分散ノード

[root@hop01 conf]# vim スレーブ

ホップ02

ホップ03

2 つの構成はすべてのクラスター ノードに同期されます。

2.3. 開始と停止

クラスタを起動します

/opt/flink1.7/bin/stop-cluster.sh

起動ログ:

[root@hop01 conf]# /opt/flink1.7/bin/start-cluster.sh

クラスターを開始しています。

ホスト hop01 でスタンドアロンセッション デーモンを起動しています。

ホスト hop02 で taskexecutor デーモンを起動しています。

ホスト hop03 で taskexecutor デーモンを起動しています。

2.4 ウェブインターフェース

アクセス: http://hop01:8081/

3. 開発参入事例

3.1 データスクリプト

各ノードにデータ スクリプトを配布します。

/var/flink/test/word.txt

3.2. 基本的な依存関係の紹介

以下は Java で記述された基本的なケースです。

<依存関係>
    <依存関係>
        <グループ ID>org.apache.flink</グループ ID>
        <artifactId>flink-java</artifactId>
        <バージョン>1.7.0</バージョン>
    </依存関係>
    <依存関係>
        <グループ ID>org.apache.flink</グループ ID>
        <artifactId>flink-ストリーミング-java_2.11</artifactId>
        <バージョン>1.7.0</バージョン>
    </依存関係>
</依存関係>

3.3. ファイルデータの読み取り

ここでは、ファイル内のデータを直接読み取り、プログラムフローを通じて各単語の出現回数を分析します。

パブリッククラス WordCount {
    パブリック静的void main(String[] args)は例外をスローします{
        // ファイルデータを読み取ります readFile();
    }

    パブリック静的void readFile()は例外をスローします{
        // 1. 実行環境を作成する ExecutionEnvironment environment = ExecutionEnvironment.getExecutionEnvironment();

        // 2. データファイルを読み取る String filePath = "/var/flink/test/word.txt";
        DataSet<String> inputFile = environment.readTextFile(filePath);

        // 3. グループ化して合計する DataSet<Tuple2<String, Integer>> wordDataSet = inputFile.flatMap(new WordFlatMapFunction(
        )).groupBy(0).sum(1);

        // 4. 処理結果を印刷する wordDataSet.print();
    }

    //データの読み取りと切り取り方法 static class WordFlatMapFunction implements FlatMapFunction<String, Tuple2<String, Integer>> {
        @オーバーライド
        パブリック void flatMap(String 入力、Collector<Tuple2<String, Integer>> コレクター){
            文字列[] wordArr = input.split(",");
            for (文字列 word : wordArr) {
                コレクター.collect(新しいTuple2<>(word, 1));
            }
        }
    }
} 

3.4. ポートデータの読み取り

hop01 サービスにポートを作成し、ポートへのデータ送信をシミュレートします。

[root@hop01 ~]# nc -lk 5566

C++、Java

Flink プログラムを使用して、ポートのデータ コンテンツを読み取って分析します。

パブリッククラス WordCount {
    パブリック静的void main(String[] args)は例外をスローします{
        // ポートデータを読み取る readPort();
    }

    パブリック静的void readPort()は例外をスローします{
        // 1. 実行環境を作成する StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();

        // 2. ソケット データ ポートを読み取ります。DataStreamSource<String> inputStream = environment.socketTextStream("hop01", 5566);

        // 3. データの読み取りと切り取り方法 SingleOutputStreamOperator<Tuple2<String, Integer>> resultDataStream = inputStream.flatMap(
                新しい FlatMapFunction<String, Tuple2<String, Integer>>()
        {
            @オーバーライド
            パブリック void flatMap(String 入力、Collector<Tuple2<String, Integer>> コレクター) {
                文字列[] wordArr = input.split(",");
                for (文字列 word : wordArr) {
                    コレクター.collect(新しいTuple2<>(word, 1));
                }
            }
        }).keyBy(0).sum(1);

        // 4. 分析結果を印刷する resultDataStream.print();

        // 5. 環境の起動 environment.execute();
    }
}

IV. 動作メカニズム

4.1、Flinkクライアント

クライアントは、データ ストリームを準備して JobManager ノードに送信するために使用されます。その後、特定のニーズに応じて、クライアントは直接切断するか、接続状態を維持してタスク処理の結果を待つことができます。

4.2 ジョブマネージャー

Flink クラスターでは、JobManger ノードと少なくとも 1 つの TaskManager ノードが開始されます。JobManager は、クライアントから送信されたタスクを受信すると、タスクを調整して特定の TaskManager ノードに送信し、実行します。TaskManager ノードは、ハートビートと処理情報を JobManager に送信します。

4.3 タスクマネージャー

スロットは、TaskManager における最小のリソース スケジューリング単位です。スロットの数は起動時に設定されます。各スロットは、タスクを開始し、JobManager ノードによってデプロイされたタスクを受信し、特定の分析と処理を実行できます。

5. ソースコードアドレス

GitHub アドレス

https://github.com/cicadasmile/big-data-parent

GitEE アドレス

https://gitee.com/cicadasmile/big-data-parent

上記は、リアルタイムコンピューティングフレームワークFlinkクラスターの構築と動作メカニズムの詳細についての簡単な説明です。リアルタイムコンピューティングフレームワークFlinkクラスターの構築と動作メカニズムの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • ビッグデータ処理エンジンFlinkのメモリ管理を詳しく解説
  • Apache FlinkCEP でタイムアウトステータス監視を実装するための詳細な手順
  • Flink はどのようなデータ型をサポートしていますか?
  • Flink WordCount プロセス分析を実装するための Java ラムダ式
  • ビッグデータ HelloWorld-Flink は WordCount を実装します
  • Flinkのコア原則を分析し、コア抽象化を実装する

<<:  MySQL がデータの削除と挿入に非常に時間がかかる問題の解決策

>>:  Vue3 がデータ監視を実装するためにプロキシを使用する理由の分析

推薦する

Linux ソースコードからのソケット (TCP) バインドの詳細な説明

目次1. 最も単純なサーバー側の例2. バインドシステムコール2.1、inet_bind 2.2、i...

Dockerカスタムネットワークコンテナ相互接続

目次序文-リンクカスタムネットワーク質問する序文前回は、 -Linkパラメータを使用してコンテナ間の...

MYSQL大規模書き込み問題の最適化の詳細な説明

概要: MySQL のパフォーマンス最適化について話すとき、誰もがクエリ パフォーマンスを向上させる...

MySQLにおけるMTRの概念

MTR は Mini-Transaction の略です。名前が示すように、これは「最小のトランザクシ...

HTTPS の原則の説明

HTTPS ウェブサイトの構築コストが下がるにつれて、ほとんどのウェブサイトが HTTPS プロトコ...

MySQL 8.0.23 インストールの超詳細なチュートリアル

目次序文1. 公式サイトからMySQLをダウンロードする2. 解凍ファイルを設定する3. 初期化4....

HTML ウェブページにおけるさまざまなフォント形式の詳細

このセクションでは、テキストの変更の詳細から始めます。これにより、読者はさまざまな HTML フォン...

JSアルバム画像の揺れと拡大表示効果のサンプルコード

前回の記事では、JS を使って簡単な揺れ効果を実現する方法を紹介しました。ご興味があればクリックして...

フレックスレイアウトにおけるflex-growとflex-shrinkの計算方法の詳しい説明

CSS のFlex(彈性布局)すると、Web ページのレイアウトを柔軟に制御できます。Flex Fl...

js 基本構文と Maven プロジェクト構成チュートリアル ケース

目次1. jsステートメント2番目、js配列3. js関数4. メイヴンV. 結論1. jsステート...

display:olck/none を使用してメニューバーを作成する方法

display:bolck/none によるメニューバーの完成の効果 図 1:まず、完成したエフェク...

HTML 選択ボックスのプレースホルダーの作成に関する問題

テキスト入力でプレースホルダーを使用していますが、問題なく動作します。しかし、選択ボックスにはプレー...

JS のあらゆる場所で絶対等価演算子の使用をやめる

目次概要1. NULL値のテスト2. ユーザー入力を読み取る導入事実の根源はどこにあるのでしょうか?...

Linux でのスケジュールされたタスクと遅延タスクの詳細な説明

で+ 時間 17:23に at> touch /mnt/file{1..9} ##アクションを...

Nginx の場所と proxy_pass パスの設定の問題の概要

目次1. Nginxロケーションの基本設定1.1 Nginx 設定ファイル1.2 Pythonスクリ...