MySQLカテゴリ
1. MySql serveridの競合
エラーメッセージ:
com.github.shyiko.mysql.binlog.network.ServerException: A slave with the same server_uuid/server_id as this slave has connected to the master。
解決方法:現在、ランダム生成のserveridを追加するよう最適化されています。以前のタスクでmysqlの詳細パラメータにserver-idが明示的に指定されている場合は削除することをお勧めします。複数のタスクが同じデータソースを使用しており、server-idの設定が同じであるために競合が発生する可能性があるためです。
2. binlogファイルが見つからないエラーメッセージ
エラーメッセージ:
Caused by: org.apache.kafka.connect.errors.ConnectException: The connector is trying to read binlog starting at GTIDs xxx and binlog file 'binlog.xxx', pos=xxx, skipping 4 events plus 1 rows, but this is no longer available on the server. Reconfigure the connector to use a snapshot when needed。
エラー原因:
ジョブが読み取り中のbinlogファイルがMySQLサーバー上で既にクリーンアップされている場合、エラーが発生します。Binlogのクリーンアップが発生する原因は複数あります。Binlogの保持時間が短すぎる場合や、ジョブの処理速度がBinlogの生成速度に追いつかず、MySQL Binlogファイルの最大保持時間を超えた場合、MySQLサーバー上のBinlogファイルがクリーンアップされ、読み取り中のBinlogポジションが無効になります。
解決方法:ジョブの処理速度がBinlogの生成速度に追いつかない場合は、Binlogの保持時間を延長することを検討できます。また、ジョブを最適化してバックプレッシャーを軽減し、sourceの消費を加速することもできます。ジョブの状態に異常がない場合は、データベースで他の操作が発生してBinlogがクリーンアップされ、アクセスできなくなった可能性があります。MySQLデータベース側の情報を確認して、Binlogがクリーンアップされた原因を特定する必要があります。
3. MySQL接続リセットエラー
エラーメッセージ:
EventDataDeserializationException: Failed to deserialize data of EventHeaderV4 .... Caused by: java.net.SocketException: Connection reset。
エラー原因:
1. ネットワークの問題です。
2. ジョブにバックプレッシャーが発生しているため、sourceがデータを読み取れず、binlog clientがアイドル状態になります。binlog接続がタイムアウト後もアイドル状態が続く場合、mysqlサーバーはアイドル状態の接続を切断します。
解決方法:
1. ネットワークの問題である場合は、mysqlのネットワークパラメータを大きくすることができます。set global slave_net_timeout = 120;(デフォルト30s)set global thread_pool_idle_timeout = 120。
2. ジョブのバックプレッシャーが原因である場合は、ジョブを調整してバックプレッシャーを軽減できます。例えば、並列度を増やし、書き込み速度を向上させ、taskmanagerのメモリを増やしてgcを減らします。
4. Mysql2dlcタスク JobManager Oom
エラーメッセージ:
エラー原因と解決方法:
1. ユーザーデータ量が比較的大きい場合は、jobmanagerのCU数を大きくすることができます。mysqlの高度なパラメータscan.incremental.snapshot.chunk.sizeを使用してchunk sizeのサイズを大きくします。デフォルトは8096です。
2. ユーザーデータ量は多くありませんが、主キーの最大値と最小値の差が非常に大きいため、均等分割chunk戦略を使用すると多くのchunkに分割されます。分布因子を変更して、ユーザーデータが非均一なデータ分割ロジックを使用するようにします。split-key.even-distribution.factor.upper-bound=5.0d、デフォルトの分布因子はすでに10.0dに変更されています。
5. ユーザーのbinlogデータ形式不正によるdebezium解析異常
エラーメッセージ:
ERROR io.debezium.connector.mysql.MySqlStreamingChangeEventSource [] - Error during binlog processing. Last offset stored = null, binlog reader near position = mysql-bin.000044/211839464.
2023-02-20 21:37:28.480 [blc-172.17.48.3:3306] ERROR io.debezium.pipeline.ErrorHandler [] - Producer failure
io.debezium.DebeziumException: Error processing binlog event.
解決方法:
binlog_row_image=fullに変更した後、データベースを再起動する必要があります。
6. gh-ostはサポートされていますか?
サポートされます。Online DDL変更によって生成された一時テーブルデータは移行されず、ソースデータベースでgh-ostを使用して実行された元のDDLデータのみが移行されます。また、デフォルトの、または独自に設定したgh-ostシャドウテーブルと不要テーブルの正規表現を使用できます。
DLCカテゴリ
1. 増分データ(changelogデータ)のdlcへの同期時にエラーが発生する
エラーメッセージ:
問題原因:
dlcのテーブルはv1テーブルであり、changlogデータをサポートしていません。
解決方法:
1. dlcテーブルをv2テーブルに変更し、upsertサポートを有効にします。
2. テーブルを変更してupsertをサポートします:ALTER TABLE tblname SET TBLPROPERTIES ('write.upsert.enabled'='true')。
3. テーブルをv2テーブルに変更します:ALTER TABLE tblname SET TBLPROPERTIES ('format-version'='2')。
テーブルに設定されたプロパティが正常に表示されるかどうかを確認します。show tblproperties tblnameを実行します。
2. Cannot write incompatible dataset to table with schema
エラー詳細:
Caused by: java.lang.IllegalArgumentException: Cannot write incompatible dataset to table with schema:
* mobile should be required, but is optional
at org.apache.iceberg.types.TypeUtil.checkSchemaCompatibility(TypeUtil.java:364)
at org.apache.iceberg.types.TypeUtil.validateWriteSchema(TypeUtil.java:323)
エラー原因:
ユーザーがdlcテーブルを作成する際に、フィールドにNOT NULL制約を設定しました。
解決方法:
テーブル作成時にnot null制約を設定しないでください。
3. mysql2dlc同期時の配列境界外エラー
問題詳細:
java.lang.ArrayIndexOutOfBoundsException: 1
at org.apache.flink.table.data.binary.BinarySegmentUtils.getLongMultiSegments(BinarySegmentUtils.java:736) ~[flink-table-blink_2.11-1.13.6.jar:1.13.6]
at org.apache.flink.table.data.binary.BinarySegmentUtils.getLong(BinarySegmentUtils.java:726) ~[flink-table-blink_2.11-1.13.6.jar:1.13.6]
at org.apache.flink.table.data.binary.BinarySegmentUtils.readTimestampData(BinarySegmentUtils.java:1022) ~[flink-table-blink_2.11-1.13.6.jar:1.13.6]
at org.apache.flink.table.data.binary.BinaryRowData.getTimestamp(BinaryRowData.java:356) ~[flink-table-blink_2.11-1.13.6.jar:1.13.6]
at org.apache.flink.table.data.RowData.lambda$createFieldGetter$39385f9c$1(RowData.java:260) ~[flink-table-blink_2.11-1.13.6.jar:1.13.6]
エラー原因:
時間フィールドを主キーにすることによって生じる問題。
解決方法:
1. 時間フィールドを主キーにしないでください。
2. ユーザーは依然として時間フィールドで一意性を保証する必要があります。ユーザーがdlcに冗長文字列フィールドを追加し、上流の時間フィールドを関数で変換して冗長フィールドにマッピングすることをお勧めします。
4. DLCタスクがicebergテーブルではないと報告する
エラーメッセージ:
エラー原因:
1. ユーザーがdlcでステートメントを実行し、テーブルが実際にどのタイプであるかを確認できるようにします。
2. ステートメント:desc formatted テーブル名。
3. テーブルタイプを確認できます。
解決方法:
正しいエンジンを選択してicebergタイプのテーブルを作成します。
5. flink sqlフィールド順序とdlcターゲットテーブルフィールドの不一致によるエラー
解決方法:
タスクテーブルのフィールド順序を変更しないでください。
Dorisカテゴリ
1. Dorisのスペック選定とチューニング方法は?
2. インポートタスク過多による新規インポートタスク送信エラー「current running txns on db xxx is xx, larger than limit xx」?
feパラメータを調整します:max_running_txn_num_per_db、デフォルトは100です。適宜大きくすることができますが、500以内に制御することをお勧めします。
3. インポート頻度が高すぎる場合のerr=[E-235]エラー?
パラメータチューニングの提案:max_tablet_version_numパラメータを適宜大きくすることで一時的に解決できます。このパラメータのデフォルトは200です。2000以内に制御することをお勧めします。
ビジネスチューニングの提案:インポート頻度を下げることでのみ、この問題を根本的に解決できます。
4. インポートファイルが大きすぎてパラメータ制限に達するエラー「The size of this batch exceed the max size」?
beパラメータ:streaming_load_max_mbを調整します。インポートするファイルサイズを超えるように設定することをお勧めします。
5. データインポートエラー「[-238]」?
原因:-238エラーは通常、同一バッチでインポートするデータ量が多すぎる場合に発生し、その結果、特定のタブレットのSegmentファイルが多くなります( )。
パラメータチューニングの提案:BEパラメータmax_segment_num_per_rowsetを適宜大きくすることができます。このパラメータのデフォルト値は200です。倍数で大きくすることができ(例えば400、800)、2000以内に制御することをお勧めします。
ビジネスチューニングの提案:1バッチでインポートするデータ量を減らすことをお勧めします。
6. インポート失敗エラー「too many filtered rows xxx, "ErrorURL":"または Insert has filtered data in strict mode, tracking url=xxxx.」?
原因:テーブルのスキーマ、パーティションなどがインポートするデータと一致しません。TCHouse-P Studioまたはクライアントでdorisコマンドを実行して具体的な原因を確認できます:show load warnings on `<tracking url>`、`<tracking url>`はエラー情報に返されたerror urlです。