対応するページの公式サイト:https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/connect.html#elasticsearch-connector
FLINK SQL ElasticSearchコネクタはサポートが唯一のシンクを行い、ストリームモードをサポートしています。
シンク:ストリーミング追加モード シンク:ストリーミングアップサートモード フォーマット:JSON-のみ
注:FLINKはこれらのみを提供し、それが達成されるであろう
ElastincSearchコネクタアップサートクエリ定義の鍵交換UPSERT / DELETEメッセージを使用するために、外部システムとのモードで動作することができます。
追加専用クエリの場合、コネクタはまた、唯一の外部システムとINSERTメッセージ交換に追加モードで動作することができます。クエリがキーを定義されていない場合、Elasticsearchは自動的にキーを生成します。
次のようにDDLに定義されます。
TABLE MyUserTable(CREATE ... )WITH( 'connector.type' = 'elasticsearchを'、 -必要:指定このテーブルタイプですelasticsearch 'connector.version' = '6'、 -必要:有効なコネクタのバージョンがある「6 「 'connector.hosts' = 'のhttp:// HOST_NAME:9092;ます。http:// HOST_NAME:9093'、 - 必要:1つの以上のElasticsearchホストをに接続するために 'connector.index' = 'MyUsers'、 - 必要:Elasticsearchインデックス 「connector.document型」=「ユーザ」、 - 必須:Elasticsearch文書型 「更新モード」=「APPEND」、 - オプション:更新モードテーブルシンクとして用います。 'connector.key-区切り文字' = '$'、 -オプション:区切り文字以下のための複合キー(「_」によってデフォルト) 例えば、「$」のID「KEY1 KEY2 $ $ KEY3」につながる- 表現: - 「connector.keyヌル・リテラル」=「N /」オプションについて ヌルキーのフィールド(による「ヌル」デフォルト) での失敗時の取り扱いの戦略:オプション- 「connector.failure-ハンドラ」=「...」、ケースに要求 - Elasticsearchが(で『失敗』失敗デフォルト)。 - 有効な戦略がある - 「失敗します」要求が失敗し、 - ので、ジョブの失敗の原因となる)、 - 「無視する」)(無視障害を、要求を廃棄し、 - 「リトライ拒否」(再が原因失敗した要求を追加する - キューの容量飽和に) 、 -または「カスタム」のために障害処理 - ActionRequestFailureHandlerサブクラス -オプション:クラスターに一括でそれらを送信する前に要素をバッファリングするための方法を設定するための効率 'オン・チェックポイントconnector.flush - ' = '真'、 -オプション:チェックポイントにフラッシングを無効(!下記の注意事項を参照してください) - (で"真" デフォルト) 'connector.bulk-flush.max-アクション' = ' 42' 、 - オプション:最大バッファするアクションの数 - のための各バルク要求 『connector.bulk-flush.maxサイズ』 = '42 MB」、 - オプション:バイトで緩衝作用の最大サイズ - あたりバルク要求 - (のみMB粒度がサポートされています) 'connector.bulk-flush.interval' = '60000'、 - 随意:(ミリ秒)のバルクフラッシュ間隔 'connector.bulk-flush.back-off.type' = '...'、 -オプション:バックオフ戦略(で"無効" デフォルト) -有効な戦略は"無効"、 "定数"ある、 または"指数" - 'connector.bulk-flush.back-off.max-リトライ' = '3'、 - オプション:再試行の最大数 'connector.bulk-flush.back-off.delay' = '30000'、 - オプション: 各バックオフの試行間の遅延- (ミリ秒単位) -:オプションElasticsearchにRESTの通信中に使用される接続プロパティ - 「connector.connection-MAX-リトライタイムアウト」=「3」(ミリ秒)最大タイムアウト:オプション - 試行間の 「connector.connectionパスプレフィックス'= '/ V1' - オプション:すべてのに追加されるプレフィックス文字列 - REST通信 'format.type'=' ... '、 - 必要:Elasticsearchコネクタ、フォーマットを指定する必要があり ... -現在は「JSON」フォーマットがサポートされています。 -表形式のセクションを参照してくださいについての詳細。 )
FLINKは自動的にクエリから有効なキーを抽出します。例えば、クエリは、BのAによるT群から、B、Cを選択し、Bキーの組み合わせのフィールドを定義します。各行の文書IDを生成し、クエリで定義された順序でキーワードフィールド区切り直列にすべてのキーワードを用いてElasticsearchコネクタ。カスタムキーフィールドの空のテキスト表現を定義することができます。
DDL定義は公式ウェブサイトでは、少なくとも私は、次のパラメータを追加することで、適切なTableSinkFactoryを見つけることができないと報告されることを発見した、提供します
'connector.bulk-flush.back-off.max-試行' = '3' 、
'connector.bulk-flush.back-off.delay' = '10000'
次のように与えられました:
スレッドの例外「メイン」org.apache.flink.table.api.NoMatchingTableFactoryExceptionは:適したテーブルの工場が見つかりませんでしための「org.apache.flink.table.factories.TableSinkFactory」で クラスパスを。 理由:いいえ工場は、すべてのプロパティをサポートしていません。 マッチング候補: org.apache.flink.streaming.connectors.elasticsearch7.Elasticsearch7UpsertTableSinkFactory サポートされないプロパティキー: connector.bulk -flush.back-off.max- リトライ connector.bulk -flush.back-off.delay
私はおそらく二つの理由が発生した、このエラーを言わなければならない、とSQLの使用は、多くの場合、このエラーが発生します。
図1に示すように、対応するパケットが付加されていないJAR
図2に示すように、構成エラーと
さて、例を見て:
対応する依存関係を追加するには:
<依存性> <のgroupId> org.apache.flink </のgroupId> <たartifactId> FLINK-コネクタelasticsearch7 _ $ {scala.binary.version} </たartifactId> <バージョン> $ {flink.version} </バージョン> </依存関係>
SQLは以下のように:
タイプ」= 'JSON' )。--- sinkTable (表user_log_sinkをCREATE 、VARCHARをUSER_ID VARCHARをITEM_ID、 VARCHARをCATEGORY_ID、 行動VARCHAR、 VARCHAR tsは --ts TIMESTAMP(3 ) )(WITH 'connector.type' = 'elasticsearch' 、 'connector.version' = '7' 、 ' connector.hosts' = 'のhttp://ベン:9200' 、 'connector.index' = 'user_behavior' 、 'connector.document型' = 'ユーザ、 'connector.bulk-flush.interval'= '6000' 、 'connector.connection-MAX-リトライタイムアウト' = '3' 、 'connector.bulk-flush.back-off.max-試行' = '3' 、 'connector.bulk-flush.back-off.delay' = '10000' 、 - 'connector.connectionパスプレフィックス' = '/ V1' 、 '更新モード' = 'UPSERT' 、 'format.type' = 'JSON' )。 - ESはシンクのES IDとして使用するグループキー、更新することができ、アップサートです...这段SQL是乱写的.. --- INSERT INSERT INTO user_log_sink - SELECT USER_IDは、CATEGORY_ID、行動、TSをITEM_ID - FROM USER_LOG; SELECT CAST(COUNT( * )VARCHARなど)dtは、 キャスト(COUNT( * PV、AS)VARCHARなど) (VARCHARとしてCOUNT(DISTINCTのuser_id))キャストUV AS、 MAX(行動)、'YYYY-MM-DD HH:MM:S0' ) USER_LOG FROM GROUP BY DATE_FORMAT(TS、 'YYYY-MM-DD HH:MM:S0')。
ESに書き込まれたデータを見てみましょう。
得ます
ようこそルーキー世間の注目FLINK番号は時折FLINK(技術開発)に関連するツイートを更新します