You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by gi...@apache.org on 2024/03/07 03:39:16 UTC
(flink-cdc) 01/01: Generated docs from commit 86272bf1029022adbf6d34132f4b34df14f2ad89
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/flink-cdc.git
commit eb63c4e1c7490393d5866f0c516fb904d84f6b01
Author: Jiabao-Sun <Ji...@users.noreply.github.com>
AuthorDate: Thu Mar 7 03:39:07 2024 +0000
Generated docs from commit 86272bf1029022adbf6d34132f4b34df14f2ad89
---
.nojekyll | 0
NOTICE | 11 +
assets/cdc-flow.png | Bin 0 -> 551000 bytes
assets/dingtalk.png | Bin 0 -> 142888 bytes
assets/favicon.png | Bin 0 -> 1150 bytes
assets/squirrel.jpg | Bin 0 -> 99091 bytes
index.html | 252 +
lib/termynal.css | 101 +
lib/termynal.js | 197 +
licenses/LICENSE.termynal | 21 +
master/.buildinfo | 4 +
master/.doctrees/README.doctree | Bin 0 -> 6897 bytes
.../.doctrees/content/connectors/db2-cdc.doctree | Bin 0 -> 39194 bytes
master/.doctrees/content/connectors/index.doctree | Bin 0 -> 5152 bytes
.../content/connectors/mongodb-cdc(ZH).doctree | Bin 0 -> 84532 bytes
.../content/connectors/mongodb-cdc.doctree | Bin 0 -> 88740 bytes
.../content/connectors/mysql-cdc(ZH).doctree | Bin 0 -> 142738 bytes
.../.doctrees/content/connectors/mysql-cdc.doctree | Bin 0 -> 149579 bytes
.../content/connectors/oceanbase-cdc(ZH).doctree | Bin 0 -> 78809 bytes
.../content/connectors/oceanbase-cdc.doctree | Bin 0 -> 79912 bytes
.../content/connectors/oracle-cdc.doctree | Bin 0 -> 76398 bytes
.../content/connectors/postgres-cdc.doctree | Bin 0 -> 65836 bytes
.../content/connectors/sqlserver-cdc.doctree | Bin 0 -> 56731 bytes
.../.doctrees/content/connectors/tidb-cdc.doctree | Bin 0 -> 39846 bytes
.../content/connectors/vitess-cdc.doctree | Bin 0 -> 35783 bytes
master/.doctrees/content/downloads.doctree | Bin 0 -> 4803 bytes
.../content/formats/changelog-json.doctree | Bin 0 -> 7764 bytes
master/.doctrees/content/formats/index.doctree | Bin 0 -> 4708 bytes
master/.doctrees/content/githublink.doctree | Bin 0 -> 6021 bytes
.../content/overview/cdc-connectors.doctree | Bin 0 -> 102477 bytes
.../content/overview/cdc-pipeline.doctree | Bin 0 -> 42983 bytes
master/.doctrees/content/overview/index.doctree | Bin 0 -> 4779 bytes
.../content/pipelines/doris-pipeline(ZH).doctree | Bin 0 -> 20466 bytes
.../content/pipelines/doris-pipeline.doctree | Bin 0 -> 21274 bytes
master/.doctrees/content/pipelines/index.doctree | Bin 0 -> 4984 bytes
.../content/pipelines/mysql-pipeline(ZH).doctree | Bin 0 -> 47313 bytes
.../content/pipelines/mysql-pipeline.doctree | Bin 0 -> 49037 bytes
.../pipelines/starrocks-pipeline(ZH).doctree | Bin 0 -> 33121 bytes
.../content/pipelines/starrocks-pipeline.doctree | Bin 0 -> 34444 bytes
.../build-real-time-data-lake-tutorial.doctree | Bin 0 -> 47559 bytes
.../datastream-api-package-guidance.doctree | Bin 0 -> 28694 bytes
.../content/quickstart/db2-tutorial.doctree | Bin 0 -> 19123 bytes
master/.doctrees/content/quickstart/index.doctree | Bin 0 -> 5293 bytes
.../content/quickstart/mongodb-tutorial.doctree | Bin 0 -> 18027 bytes
.../mysql-doris-pipeline-tutorial.doctree | Bin 0 -> 52617 bytes
.../quickstart/mysql-postgres-tutorial.doctree | Bin 0 -> 44750 bytes
.../mysql-starrocks-pipeline-tutorial.doctree | Bin 0 -> 46876 bytes
.../content/quickstart/oceanbase-tutorial.doctree | Bin 0 -> 27304 bytes
.../content/quickstart/oracle-tutorial.doctree | Bin 0 -> 25012 bytes
.../content/quickstart/polardbx-tutorial.doctree | Bin 0 -> 38384 bytes
.../content/quickstart/sqlserver-tutorial.doctree | Bin 0 -> 24466 bytes
.../content/quickstart/tidb-tutorial.doctree | Bin 0 -> 26931 bytes
.../build-real-time-data-lake-tutorial-zh.doctree" | Bin 0 -> 46397 bytes
.../datastream-api-package-guidance-zh.doctree" | Bin 0 -> 28701 bytes
.../index.doctree" | Bin 0 -> 5297 bytes
.../mongodb-tutorial-zh.doctree" | Bin 0 -> 17469 bytes
.../mysql-doris-pipeline-tutorial-zh.doctree" | Bin 0 -> 48347 bytes
.../mysql-postgres-tutorial-zh.doctree" | Bin 0 -> 46731 bytes
.../mysql-starrocks-pipeline-tutorial-zh.doctree" | Bin 0 -> 42218 bytes
.../oceanbase-tutorial-zh.doctree" | Bin 0 -> 26632 bytes
.../oracle-tutorial-zh.doctree" | Bin 0 -> 24522 bytes
.../polardbx-tutorial-zh.doctree" | Bin 0 -> 29705 bytes
.../sqlserver-tutorial-zh.doctree" | Bin 0 -> 24197 bytes
.../tidb-tutorial-zh.doctree" | Bin 0 -> 26603 bytes
master/.doctrees/environment.pickle | Bin 0 -> 238146 bytes
master/.doctrees/index.doctree | Bin 0 -> 4996 bytes
master/.nojekyll | 0
master/README.html | 339 +
master/_images/architecture.png | Bin 0 -> 450145 bytes
master/_images/check_branch.png | Bin 0 -> 137158 bytes
master/_images/data_in_iceberg.png | Bin 0 -> 87737 bytes
master/_images/design.png | Bin 0 -> 1859825 bytes
master/_images/doris-create-table.png | Bin 0 -> 2283147 bytes
master/_images/doris-ui.png | Bin 0 -> 3923688 bytes
master/_images/doris_display_data.png | Bin 0 -> 2322957 bytes
master/_images/doris_display_result.png | Bin 0 -> 2228734 bytes
master/_images/files-in-iceberg.png | Bin 0 -> 75874 bytes
master/_images/final-data-in-iceberg.png | Bin 0 -> 49956 bytes
master/_images/flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
master/_images/flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
master/_images/flink-sql-client.png | Bin 0 -> 185086 bytes
master/_images/flink-sql-client1.png | Bin 0 -> 185086 bytes
master/_images/flink-ui.png | Bin 0 -> 186753 bytes
master/_images/flink-ui1.png | Bin 0 -> 186753 bytes
master/_images/flink-ui2.png | Bin 0 -> 186753 bytes
master/_images/flink-ui3.png | Bin 0 -> 186753 bytes
master/_images/flinkcdc.png | Bin 0 -> 554685 bytes
master/_images/fork.png | Bin 0 -> 67259 bytes
master/_images/kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
master/_images/kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
master/_images/kibana-detailed-orders.png | Bin 0 -> 366157 bytes
master/_images/mysql-to-doris.png | Bin 0 -> 2583556 bytes
master/_images/mysql-to-starrocks.png | Bin 0 -> 2502781 bytes
master/_images/open_pr.png | Bin 0 -> 308245 bytes
master/_images/real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
master/_images/starrocks-display-data.png | Bin 0 -> 829756 bytes
master/_images/starrocks-display-result.png | Bin 0 -> 1098472 bytes
master/_sources/README.md.txt | 36 +
master/_sources/content/connectors/db2-cdc.md.txt | 386 +
master/_sources/content/connectors/index.md.txt | 37 +
.../content/connectors/mongodb-cdc(ZH).md.txt | 685 ++
.../_sources/content/connectors/mongodb-cdc.md.txt | 695 ++
.../content/connectors/mysql-cdc(ZH).md.txt | 1099 ++
.../_sources/content/connectors/mysql-cdc.md.txt | 1113 ++
.../content/connectors/oceanbase-cdc(ZH).md.txt | 787 ++
.../content/connectors/oceanbase-cdc.md.txt | 788 ++
.../_sources/content/connectors/oracle-cdc.md.txt | 706 ++
.../content/connectors/postgres-cdc.md.txt | 624 ++
.../content/connectors/sqlserver-cdc.md.txt | 506 +
master/_sources/content/connectors/tidb-cdc.md.txt | 494 +
.../_sources/content/connectors/vitess-cdc.md.txt | 328 +
master/_sources/content/downloads.md.txt | 22 +
.../_sources/content/formats/changelog-json.md.txt | 27 +
master/_sources/content/formats/index.md.txt | 26 +
master/_sources/content/githublink.md.txt | 20 +
.../content/overview/cdc-connectors.md.txt | 393 +
.../_sources/content/overview/cdc-pipeline.md.txt | 136 +
master/_sources/content/overview/index.md.txt | 27 +
.../content/pipelines/doris-pipeline(ZH).md.txt | 286 +
.../content/pipelines/doris-pipeline.md.txt | 288 +
master/_sources/content/pipelines/index.md.txt | 31 +
.../content/pipelines/mysql-pipeline(ZH).md.txt | 559 +
.../content/pipelines/mysql-pipeline.md.txt | 566 +
.../pipelines/starrocks-pipeline(ZH).md.txt | 324 +
.../content/pipelines/starrocks-pipeline.md.txt | 334 +
.../build-real-time-data-lake-tutorial.md.txt | 322 +
.../datastream-api-package-guidance.md.txt | 267 +
.../content/quickstart/db2-tutorial.md.txt | 154 +
master/_sources/content/quickstart/index.md.txt | 37 +
.../content/quickstart/mongodb-tutorial.md.txt | 235 +
.../mysql-doris-pipeline-tutorial.md.txt | 338 +
.../quickstart/mysql-postgres-tutorial.md.txt | 337 +
.../mysql-starrocks-pipeline-tutorial.md.txt | 306 +
.../content/quickstart/oceanbase-tutorial.md.txt | 269 +
.../content/quickstart/oracle-tutorial.md.txt | 224 +
.../content/quickstart/polardbx-tutorial.md.txt | 280 +
.../content/quickstart/sqlserver-tutorial.md.txt | 222 +
.../content/quickstart/tidb-tutorial.md.txt | 252 +
.../build-real-time-data-lake-tutorial-zh.md.txt" | 315 +
.../datastream-api-package-guidance-zh.md.txt" | 266 +
.../index.md.txt" | 36 +
.../mongodb-tutorial-zh.md.txt" | 235 +
.../mysql-doris-pipeline-tutorial-zh.md.txt" | 341 +
.../mysql-postgres-tutorial-zh.md.txt" | 336 +
.../mysql-starrocks-pipeline-tutorial-zh.md.txt" | 306 +
.../oceanbase-tutorial-zh.md.txt" | 266 +
.../oracle-tutorial-zh.md.txt" | 223 +
.../polardbx-tutorial-zh.md.txt" | 251 +
.../sqlserver-tutorial-zh.md.txt" | 222 +
.../tidb-tutorial-zh.md.txt" | 253 +
master/_sources/index.md.txt | 19 +
master/_static/basic.css | 904 ++
master/_static/button.js | 6 +
master/_static/css/badge_only.css | 1 +
master/_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes
master/_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes
master/_static/css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes
master/_static/css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes
master/_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
master/_static/css/fonts/fontawesome-webfont.svg | 2671 +++++
master/_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
master/_static/css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
master/_static/css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
master/_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes
master/_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes
master/_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes
master/_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes
master/_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes
master/_static/css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes
master/_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes
master/_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes
master/_static/css/theme.css | 4 +
master/_static/doctools.js | 323 +
master/_static/documentation_options.js | 12 +
master/_static/favicon.png | Bin 0 -> 1150 bytes
master/_static/fig/architecture.png | Bin 0 -> 450145 bytes
.../fig/contribute_guidance/check_branch.png | Bin 0 -> 137158 bytes
master/_static/fig/contribute_guidance/fork.png | Bin 0 -> 67259 bytes
master/_static/fig/contribute_guidance/open_pr.png | Bin 0 -> 308245 bytes
master/_static/fig/design.png | Bin 0 -> 1859825 bytes
master/_static/fig/favicon.png | Bin 0 -> 1150 bytes
master/_static/fig/flinkcdc.png | Bin 0 -> 554685 bytes
.../mysql-doris-tutorial/doris-create-table.png | Bin 0 -> 2283147 bytes
.../_static/fig/mysql-doris-tutorial/doris-ui.png | Bin 0 -> 3923688 bytes
.../mysql-doris-tutorial/doris_display_data.png | Bin 0 -> 2322957 bytes
.../mysql-doris-tutorial/doris_display_result.png | Bin 0 -> 2228734 bytes
.../_static/fig/mysql-doris-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../fig/mysql-doris-tutorial/mysql-to-doris.png | Bin 0 -> 2583556 bytes
.../flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
.../mysql-postgress-tutorial/flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/mysql-postgress-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../mysql-postgress-tutorial/kafka-gmv-changes.gif | Bin 0 -> 303629 bytes
.../kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
.../kibana-detailed-orders.png | Bin 0 -> 366157 bytes
.../fig/mysql-starrocks-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../mysql-to-starrocks.png | Bin 0 -> 2502781 bytes
.../starrocks-display-data.png | Bin 0 -> 829756 bytes
.../starrocks-display-result.png | Bin 0 -> 1098472 bytes
.../data_in_iceberg.png | Bin 0 -> 87737 bytes
.../files-in-iceberg.png | Bin 0 -> 75874 bytes
.../final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
.../flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/real-time-data-lake-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
master/_static/file.png | Bin 0 -> 286 bytes
master/_static/fonts/Inconsolata-Bold.ttf | Bin 0 -> 109948 bytes
master/_static/fonts/Inconsolata-Regular.ttf | Bin 0 -> 96964 bytes
master/_static/fonts/Inconsolata.ttf | Bin 0 -> 63184 bytes
master/_static/fonts/Lato-Bold.ttf | Bin 0 -> 656544 bytes
master/_static/fonts/Lato-Regular.ttf | Bin 0 -> 656568 bytes
master/_static/fonts/Lato/lato-bold.eot | Bin 0 -> 256056 bytes
master/_static/fonts/Lato/lato-bold.ttf | Bin 0 -> 600856 bytes
master/_static/fonts/Lato/lato-bold.woff | Bin 0 -> 309728 bytes
master/_static/fonts/Lato/lato-bold.woff2 | Bin 0 -> 184912 bytes
master/_static/fonts/Lato/lato-bolditalic.eot | Bin 0 -> 266158 bytes
master/_static/fonts/Lato/lato-bolditalic.ttf | Bin 0 -> 622572 bytes
master/_static/fonts/Lato/lato-bolditalic.woff | Bin 0 -> 323344 bytes
master/_static/fonts/Lato/lato-bolditalic.woff2 | Bin 0 -> 193308 bytes
master/_static/fonts/Lato/lato-italic.eot | Bin 0 -> 268604 bytes
master/_static/fonts/Lato/lato-italic.ttf | Bin 0 -> 639388 bytes
master/_static/fonts/Lato/lato-italic.woff | Bin 0 -> 328412 bytes
master/_static/fonts/Lato/lato-italic.woff2 | Bin 0 -> 195704 bytes
master/_static/fonts/Lato/lato-regular.eot | Bin 0 -> 253461 bytes
master/_static/fonts/Lato/lato-regular.ttf | Bin 0 -> 607720 bytes
master/_static/fonts/Lato/lato-regular.woff | Bin 0 -> 309192 bytes
master/_static/fonts/Lato/lato-regular.woff2 | Bin 0 -> 182708 bytes
master/_static/fonts/RobotoSlab-Bold.ttf | Bin 0 -> 170616 bytes
master/_static/fonts/RobotoSlab-Regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 0 -> 79520 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 0 -> 170616 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 0 -> 87624 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 0 -> 67312 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.eot | Bin 0 -> 78331 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff | Bin 0 -> 86288 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 0 -> 66444 bytes
master/_static/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
master/_static/fonts/fontawesome-webfont.svg | 2671 +++++
master/_static/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
master/_static/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
master/_static/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
master/_static/jquery-3.5.1.js | 10872 +++++++++++++++++++
master/_static/jquery.js | 2 +
master/_static/js/badge_only.js | 1 +
master/_static/js/html5shiv-printshiv.min.js | 4 +
master/_static/js/html5shiv.min.js | 4 +
master/_static/js/modernizr.min.js | 4 +
master/_static/js/theme.js | 1 +
master/_static/language_data.js | 297 +
master/_static/minus.png | Bin 0 -> 90 bytes
master/_static/plus.png | Bin 0 -> 90 bytes
master/_static/pygments.css | 74 +
master/_static/searchtools.js | 516 +
master/_static/theme_overrides.css | 42 +
master/_static/underscore-1.13.1.js | 2042 ++++
master/_static/underscore.js | 6 +
master/content/connectors/db2-cdc.html | 739 ++
master/content/connectors/index.html | 486 +
master/content/connectors/mongodb-cdc(ZH).html | 1013 ++
master/content/connectors/mongodb-cdc.html | 1023 ++
master/content/connectors/mysql-cdc(ZH).html | 1433 +++
master/content/connectors/mysql-cdc.html | 1446 +++
master/content/connectors/oceanbase-cdc(ZH).html | 1125 ++
master/content/connectors/oceanbase-cdc.html | 1116 ++
master/content/connectors/oracle-cdc.html | 1055 ++
master/content/connectors/postgres-cdc.html | 968 ++
master/content/connectors/sqlserver-cdc.html | 850 ++
master/content/connectors/tidb-cdc.html | 834 ++
master/content/connectors/vitess-cdc.html | 669 ++
master/content/downloads.html | 335 +
master/content/formats/changelog-json.html | 348 +
master/content/formats/index.html | 345 +
master/content/githublink.html | 332 +
master/content/overview/cdc-connectors.html | 846 ++
master/content/overview/cdc-pipeline.html | 495 +
master/content/overview/index.html | 361 +
master/content/pipelines/doris-pipeline(ZH).html | 609 ++
master/content/pipelines/doris-pipeline.html | 610 ++
master/content/pipelines/index.html | 392 +
master/content/pipelines/mysql-pipeline(ZH).html | 883 ++
master/content/pipelines/mysql-pipeline.html | 891 ++
.../content/pipelines/starrocks-pipeline(ZH).html | 661 ++
master/content/pipelines/starrocks-pipeline.html | 671 ++
.../build-real-time-data-lake-tutorial.html | 656 ++
.../datastream-api-package-guidance.html | 599 +
master/content/quickstart/db2-tutorial.html | 473 +
master/content/quickstart/index.html | 403 +
master/content/quickstart/mongodb-tutorial.html | 566 +
.../quickstart/mysql-doris-pipeline-tutorial.html | 676 ++
.../quickstart/mysql-postgres-tutorial.html | 700 ++
.../mysql-starrocks-pipeline-tutorial.html | 640 ++
master/content/quickstart/oceanbase-tutorial.html | 600 +
master/content/quickstart/oracle-tutorial.html | 539 +
master/content/quickstart/polardbx-tutorial.html | 635 ++
master/content/quickstart/sqlserver-tutorial.html | 538 +
master/content/quickstart/tidb-tutorial.html | 567 +
.../build-real-time-data-lake-tutorial-zh.html" | 652 ++
.../datastream-api-package-guidance-zh.html" | 598 +
.../index.html" | 402 +
.../mongodb-tutorial-zh.html" | 565 +
.../mysql-doris-pipeline-tutorial-zh.html" | 673 ++
.../mysql-postgres-tutorial-zh.html" | 696 ++
.../mysql-starrocks-pipeline-tutorial-zh.html" | 637 ++
.../oceanbase-tutorial-zh.html" | 597 +
.../oracle-tutorial-zh.html" | 537 +
.../polardbx-tutorial-zh.html" | 586 +
.../sqlserver-tutorial-zh.html" | 537 +
.../tidb-tutorial-zh.html" | 566 +
master/genindex.html | 312 +
master/index.html | 390 +
master/objects.inv | Bin 0 -> 1473 bytes
master/search.html | 323 +
master/searchindex.js | 1 +
release-1.4/.buildinfo | 4 +
release-1.4/.doctrees/README.doctree | Bin 0 -> 5247 bytes
release-1.4/.doctrees/content/about.doctree | Bin 0 -> 26777 bytes
.../.doctrees/content/connectors/index.doctree | Bin 0 -> 3095 bytes
.../.doctrees/content/connectors/mysql-cdc.doctree | Bin 0 -> 57091 bytes
.../content/connectors/postgres-cdc.doctree | Bin 0 -> 26462 bytes
release-1.4/.doctrees/content/downloads.doctree | Bin 0 -> 3133 bytes
.../content/formats/changelog-json.doctree | Bin 0 -> 13656 bytes
.../.doctrees/content/formats/index.doctree | Bin 0 -> 3038 bytes
.../.doctrees/content/tutorials/index.doctree | Bin 0 -> 3085 bytes
.../content/tutorials/tutorial-zh.doctree | Bin 0 -> 22353 bytes
.../.doctrees/content/tutorials/tutorial.doctree | Bin 0 -> 23419 bytes
release-1.4/.doctrees/environment.pickle | Bin 0 -> 44175 bytes
release-1.4/.doctrees/index.doctree | Bin 0 -> 4455 bytes
release-1.4/.nojekyll | 0
release-1.4/README.html | 299 +
release-1.4/_sources/README.md.txt | 17 +
release-1.4/_sources/content/about.md.txt | 126 +
.../_sources/content/connectors/index.md.txt | 8 +
.../_sources/content/connectors/mysql-cdc.md.txt | 404 +
.../content/connectors/postgres-cdc.md.txt | 293 +
release-1.4/_sources/content/downloads.md.txt | 3 +
.../_sources/content/formats/changelog-json.md.txt | 116 +
release-1.4/_sources/content/formats/index.md.txt | 7 +
.../_sources/content/tutorials/index.md.txt | 8 +
.../_sources/content/tutorials/tutorial-zh.md.txt | 288 +
.../_sources/content/tutorials/tutorial.md.txt | 288 +
release-1.4/_sources/index.md.txt | 16 +
release-1.4/_static/basic.css | 904 ++
release-1.4/_static/css/badge_only.css | 1 +
.../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes
.../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes
.../_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
.../_static/css/fonts/fontawesome-webfont.svg | 2671 +++++
.../_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
.../_static/css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
.../_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes
.../_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes
release-1.4/_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes
release-1.4/_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes
.../_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes
.../_static/css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes
release-1.4/_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes
release-1.4/_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes
release-1.4/_static/css/theme.css | 4 +
release-1.4/_static/doctools.js | 323 +
release-1.4/_static/documentation_options.js | 12 +
release-1.4/_static/file.png | Bin 0 -> 286 bytes
release-1.4/_static/fonts/Inconsolata-Bold.ttf | Bin 0 -> 109948 bytes
release-1.4/_static/fonts/Inconsolata-Regular.ttf | Bin 0 -> 96964 bytes
release-1.4/_static/fonts/Inconsolata.ttf | Bin 0 -> 63184 bytes
release-1.4/_static/fonts/Lato-Bold.ttf | Bin 0 -> 656544 bytes
release-1.4/_static/fonts/Lato-Regular.ttf | Bin 0 -> 656568 bytes
release-1.4/_static/fonts/Lato/lato-bold.eot | Bin 0 -> 256056 bytes
release-1.4/_static/fonts/Lato/lato-bold.ttf | Bin 0 -> 600856 bytes
release-1.4/_static/fonts/Lato/lato-bold.woff | Bin 0 -> 309728 bytes
release-1.4/_static/fonts/Lato/lato-bold.woff2 | Bin 0 -> 184912 bytes
release-1.4/_static/fonts/Lato/lato-bolditalic.eot | Bin 0 -> 266158 bytes
release-1.4/_static/fonts/Lato/lato-bolditalic.ttf | Bin 0 -> 622572 bytes
.../_static/fonts/Lato/lato-bolditalic.woff | Bin 0 -> 323344 bytes
.../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 0 -> 193308 bytes
release-1.4/_static/fonts/Lato/lato-italic.eot | Bin 0 -> 268604 bytes
release-1.4/_static/fonts/Lato/lato-italic.ttf | Bin 0 -> 639388 bytes
release-1.4/_static/fonts/Lato/lato-italic.woff | Bin 0 -> 328412 bytes
release-1.4/_static/fonts/Lato/lato-italic.woff2 | Bin 0 -> 195704 bytes
release-1.4/_static/fonts/Lato/lato-regular.eot | Bin 0 -> 253461 bytes
release-1.4/_static/fonts/Lato/lato-regular.ttf | Bin 0 -> 607720 bytes
release-1.4/_static/fonts/Lato/lato-regular.woff | Bin 0 -> 309192 bytes
release-1.4/_static/fonts/Lato/lato-regular.woff2 | Bin 0 -> 182708 bytes
release-1.4/_static/fonts/RobotoSlab-Bold.ttf | Bin 0 -> 170616 bytes
release-1.4/_static/fonts/RobotoSlab-Regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 0 -> 79520 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 0 -> 170616 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 0 -> 87624 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 0 -> 67312 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.eot | Bin 0 -> 78331 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff | Bin 0 -> 86288 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 0 -> 66444 bytes
release-1.4/_static/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
release-1.4/_static/fonts/fontawesome-webfont.svg | 2671 +++++
release-1.4/_static/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
release-1.4/_static/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
release-1.4/_static/jquery-3.5.1.js | 10872 +++++++++++++++++++
release-1.4/_static/jquery.js | 2 +
release-1.4/_static/js/badge_only.js | 1 +
release-1.4/_static/js/html5shiv-printshiv.min.js | 4 +
release-1.4/_static/js/html5shiv.min.js | 4 +
release-1.4/_static/js/modernizr.min.js | 4 +
release-1.4/_static/js/theme.js | 1 +
release-1.4/_static/language_data.js | 297 +
release-1.4/_static/minus.png | Bin 0 -> 90 bytes
release-1.4/_static/plus.png | Bin 0 -> 90 bytes
release-1.4/_static/pygments.css | 74 +
release-1.4/_static/searchtools.js | 516 +
release-1.4/_static/theme_overrides.css | 43 +
release-1.4/_static/underscore-1.13.1.js | 2042 ++++
release-1.4/_static/underscore.js | 6 +
release-1.4/content/about.html | 466 +
release-1.4/content/connectors/index.html | 321 +
release-1.4/content/connectors/mysql-cdc.html | 727 ++
release-1.4/content/connectors/postgres-cdc.html | 599 +
release-1.4/content/downloads.html | 293 +
release-1.4/content/formats/changelog-json.html | 417 +
release-1.4/content/formats/index.html | 308 +
release-1.4/content/tutorials/index.html | 304 +
release-1.4/content/tutorials/tutorial-zh.html | 582 +
release-1.4/content/tutorials/tutorial.html | 582 +
release-1.4/genindex.html | 290 +
release-1.4/index.html | 330 +
release-1.4/objects.inv | Bin 0 -> 481 bytes
release-1.4/search.html | 299 +
release-1.4/searchindex.js | 1 +
release-2.0/.buildinfo | 4 +
release-2.0/.doctrees/README.doctree | Bin 0 -> 5247 bytes
release-2.0/.doctrees/content/about.doctree | Bin 0 -> 27779 bytes
.../.doctrees/content/connectors/index.doctree | Bin 0 -> 3095 bytes
.../.doctrees/content/connectors/mysql-cdc.doctree | Bin 0 -> 86096 bytes
.../content/connectors/postgres-cdc.doctree | Bin 0 -> 26554 bytes
release-2.0/.doctrees/content/downloads.doctree | Bin 0 -> 3133 bytes
.../content/formats/changelog-json.doctree | Bin 0 -> 13624 bytes
.../.doctrees/content/formats/index.doctree | Bin 0 -> 3038 bytes
release-2.0/.doctrees/content/githublink.doctree | Bin 0 -> 4383 bytes
.../.doctrees/content/tutorials/index.doctree | Bin 0 -> 3115 bytes
.../tutorials/mysql-postgres-tutorial-zh.doctree | Bin 0 -> 23331 bytes
.../tutorials/mysql-postgres-tutorial.doctree | Bin 0 -> 24406 bytes
release-2.0/.doctrees/environment.pickle | Bin 0 -> 48679 bytes
release-2.0/.doctrees/index.doctree | Bin 0 -> 4481 bytes
release-2.0/.nojekyll | 0
release-2.0/README.html | 305 +
release-2.0/_sources/README.md.txt | 17 +
release-2.0/_sources/content/about.md.txt | 132 +
.../_sources/content/connectors/index.md.txt | 8 +
.../_sources/content/connectors/mysql-cdc.md.txt | 543 +
.../content/connectors/postgres-cdc.md.txt | 294 +
release-2.0/_sources/content/downloads.md.txt | 3 +
.../_sources/content/formats/changelog-json.md.txt | 116 +
release-2.0/_sources/content/formats/index.md.txt | 7 +
release-2.0/_sources/content/githublink.md.txt | 1 +
.../_sources/content/tutorials/index.md.txt | 8 +
.../tutorials/mysql-postgres-tutorial-zh.md.txt | 293 +
.../tutorials/mysql-postgres-tutorial.md.txt | 293 +
release-2.0/_sources/index.md.txt | 17 +
release-2.0/_static/basic.css | 904 ++
release-2.0/_static/button.js | 6 +
release-2.0/_static/css/badge_only.css | 1 +
.../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes
.../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes
.../_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
.../_static/css/fonts/fontawesome-webfont.svg | 2671 +++++
.../_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
.../_static/css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
.../_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes
.../_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes
release-2.0/_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes
release-2.0/_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes
.../_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes
.../_static/css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes
release-2.0/_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes
release-2.0/_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes
release-2.0/_static/css/theme.css | 4 +
release-2.0/_static/doctools.js | 323 +
release-2.0/_static/documentation_options.js | 12 +
release-2.0/_static/favicon.png | Bin 0 -> 1150 bytes
release-2.0/_static/fig/favicon.png | Bin 0 -> 1150 bytes
release-2.0/_static/file.png | Bin 0 -> 286 bytes
release-2.0/_static/fonts/Inconsolata-Bold.ttf | Bin 0 -> 109948 bytes
release-2.0/_static/fonts/Inconsolata-Regular.ttf | Bin 0 -> 96964 bytes
release-2.0/_static/fonts/Inconsolata.ttf | Bin 0 -> 63184 bytes
release-2.0/_static/fonts/Lato-Bold.ttf | Bin 0 -> 656544 bytes
release-2.0/_static/fonts/Lato-Regular.ttf | Bin 0 -> 656568 bytes
release-2.0/_static/fonts/Lato/lato-bold.eot | Bin 0 -> 256056 bytes
release-2.0/_static/fonts/Lato/lato-bold.ttf | Bin 0 -> 600856 bytes
release-2.0/_static/fonts/Lato/lato-bold.woff | Bin 0 -> 309728 bytes
release-2.0/_static/fonts/Lato/lato-bold.woff2 | Bin 0 -> 184912 bytes
release-2.0/_static/fonts/Lato/lato-bolditalic.eot | Bin 0 -> 266158 bytes
release-2.0/_static/fonts/Lato/lato-bolditalic.ttf | Bin 0 -> 622572 bytes
.../_static/fonts/Lato/lato-bolditalic.woff | Bin 0 -> 323344 bytes
.../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 0 -> 193308 bytes
release-2.0/_static/fonts/Lato/lato-italic.eot | Bin 0 -> 268604 bytes
release-2.0/_static/fonts/Lato/lato-italic.ttf | Bin 0 -> 639388 bytes
release-2.0/_static/fonts/Lato/lato-italic.woff | Bin 0 -> 328412 bytes
release-2.0/_static/fonts/Lato/lato-italic.woff2 | Bin 0 -> 195704 bytes
release-2.0/_static/fonts/Lato/lato-regular.eot | Bin 0 -> 253461 bytes
release-2.0/_static/fonts/Lato/lato-regular.ttf | Bin 0 -> 607720 bytes
release-2.0/_static/fonts/Lato/lato-regular.woff | Bin 0 -> 309192 bytes
release-2.0/_static/fonts/Lato/lato-regular.woff2 | Bin 0 -> 182708 bytes
release-2.0/_static/fonts/RobotoSlab-Bold.ttf | Bin 0 -> 170616 bytes
release-2.0/_static/fonts/RobotoSlab-Regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 0 -> 79520 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 0 -> 170616 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 0 -> 87624 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 0 -> 67312 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.eot | Bin 0 -> 78331 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff | Bin 0 -> 86288 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 0 -> 66444 bytes
release-2.0/_static/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
release-2.0/_static/fonts/fontawesome-webfont.svg | 2671 +++++
release-2.0/_static/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
release-2.0/_static/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
release-2.0/_static/jquery-3.5.1.js | 10872 +++++++++++++++++++
release-2.0/_static/jquery.js | 2 +
release-2.0/_static/js/badge_only.js | 1 +
release-2.0/_static/js/html5shiv-printshiv.min.js | 4 +
release-2.0/_static/js/html5shiv.min.js | 4 +
release-2.0/_static/js/modernizr.min.js | 4 +
release-2.0/_static/js/theme.js | 1 +
release-2.0/_static/language_data.js | 297 +
release-2.0/_static/minus.png | Bin 0 -> 90 bytes
release-2.0/_static/plus.png | Bin 0 -> 90 bytes
release-2.0/_static/pygments.css | 74 +
release-2.0/_static/searchtools.js | 516 +
release-2.0/_static/theme_overrides.css | 43 +
release-2.0/_static/underscore-1.13.1.js | 2042 ++++
release-2.0/_static/underscore.js | 6 +
release-2.0/content/about.html | 480 +
release-2.0/content/connectors/index.html | 327 +
release-2.0/content/connectors/mysql-cdc.html | 853 ++
release-2.0/content/connectors/postgres-cdc.html | 606 ++
release-2.0/content/downloads.html | 301 +
release-2.0/content/formats/changelog-json.html | 423 +
release-2.0/content/formats/index.html | 314 +
release-2.0/content/githublink.html | 298 +
release-2.0/content/tutorials/index.html | 310 +
.../tutorials/mysql-postgres-tutorial-zh.html | 593 +
.../content/tutorials/mysql-postgres-tutorial.html | 593 +
release-2.0/genindex.html | 296 +
release-2.0/index.html | 337 +
release-2.0/objects.inv | Bin 0 -> 534 bytes
release-2.0/search.html | 305 +
release-2.0/searchindex.js | 1 +
release-2.1/.buildinfo | 4 +
release-2.1/.doctrees/README.doctree | Bin 0 -> 5247 bytes
release-2.1/.doctrees/content/about.doctree | Bin 0 -> 38517 bytes
.../.doctrees/content/connectors/index.doctree | Bin 0 -> 3170 bytes
.../content/connectors/mongodb-cdc.doctree | Bin 0 -> 65247 bytes
.../.doctrees/content/connectors/mysql-cdc.doctree | Bin 0 -> 109188 bytes
.../content/connectors/oracle-cdc.doctree | Bin 0 -> 49048 bytes
.../content/connectors/postgres-cdc.doctree | Bin 0 -> 36751 bytes
release-2.1/.doctrees/content/downloads.doctree | Bin 0 -> 3133 bytes
.../content/formats/changelog-json.doctree | Bin 0 -> 14089 bytes
.../.doctrees/content/formats/index.doctree | Bin 0 -> 3038 bytes
release-2.1/.doctrees/content/githublink.doctree | Bin 0 -> 4383 bytes
.../build-real-time-data-lake-tutorial.doctree | Bin 0 -> 46940 bytes
.../.doctrees/content/quickstart/index.doctree | Bin 0 -> 3236 bytes
.../content/quickstart/mongodb-tutorial.doctree | Bin 0 -> 16054 bytes
.../quickstart/mysql-postgres-tutorial.doctree | Bin 0 -> 43570 bytes
.../content/quickstart/oracle-tutorial.doctree | Bin 0 -> 18189 bytes
.../build-real-time-data-lake-tutorial-zh.doctree" | Bin 0 -> 46076 bytes
.../index.doctree" | Bin 0 -> 3244 bytes
.../mongodb-tutorial-zh.doctree" | Bin 0 -> 15574 bytes
.../mysql-postgres-tutorial-zh.doctree" | Bin 0 -> 45531 bytes
.../oracle-tutorial-zh.doctree" | Bin 0 -> 17501 bytes
release-2.1/.doctrees/environment.pickle | Bin 0 -> 92968 bytes
release-2.1/.doctrees/index.doctree | Bin 0 -> 4516 bytes
release-2.1/.nojekyll | 0
release-2.1/README.html | 322 +
release-2.1/_images/data_in_iceberg.png | Bin 0 -> 87737 bytes
release-2.1/_images/files-in-iceberg.png | Bin 0 -> 75874 bytes
release-2.1/_images/final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../_images/flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
release-2.1/_images/flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
release-2.1/_images/flink-sql-client.png | Bin 0 -> 185086 bytes
release-2.1/_images/flink-sql-client1.png | Bin 0 -> 185086 bytes
release-2.1/_images/flink-ui.png | Bin 0 -> 186753 bytes
release-2.1/_images/flink-ui1.png | Bin 0 -> 186753 bytes
release-2.1/_images/flinkcdc.png | Bin 0 -> 630582 bytes
.../_images/kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../_images/kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
release-2.1/_images/kibana-detailed-orders.png | Bin 0 -> 366157 bytes
.../_images/real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
release-2.1/_sources/README.md.txt | 17 +
release-2.1/_sources/content/about.md.txt | 270 +
.../_sources/content/connectors/index.md.txt | 10 +
.../_sources/content/connectors/mongodb-cdc.md.txt | 508 +
.../_sources/content/connectors/mysql-cdc.md.txt | 799 ++
.../_sources/content/connectors/oracle-cdc.md.txt | 474 +
.../content/connectors/postgres-cdc.md.txt | 378 +
release-2.1/_sources/content/downloads.md.txt | 3 +
.../_sources/content/formats/changelog-json.md.txt | 119 +
release-2.1/_sources/content/formats/index.md.txt | 7 +
release-2.1/_sources/content/githublink.md.txt | 1 +
.../build-real-time-data-lake-tutorial.md.txt | 292 +
.../_sources/content/quickstart/index.md.txt | 10 +
.../content/quickstart/mongodb-tutorial.md.txt | 216 +
.../quickstart/mysql-postgres-tutorial.md.txt | 318 +
.../content/quickstart/oracle-tutorial.md.txt | 143 +
.../build-real-time-data-lake-tutorial-zh.md.txt" | 284 +
.../index.md.txt" | 10 +
.../mongodb-tutorial-zh.md.txt" | 216 +
.../mysql-postgres-tutorial-zh.md.txt" | 317 +
.../oracle-tutorial-zh.md.txt" | 141 +
release-2.1/_sources/index.md.txt | 18 +
release-2.1/_static/basic.css | 904 ++
release-2.1/_static/button.js | 6 +
release-2.1/_static/css/badge_only.css | 1 +
.../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes
.../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes
.../_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
.../_static/css/fonts/fontawesome-webfont.svg | 2671 +++++
.../_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
.../_static/css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
.../_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes
.../_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes
release-2.1/_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes
release-2.1/_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes
.../_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes
.../_static/css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes
release-2.1/_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes
release-2.1/_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes
release-2.1/_static/css/theme.css | 4 +
release-2.1/_static/doctools.js | 323 +
release-2.1/_static/documentation_options.js | 12 +
release-2.1/_static/favicon.png | Bin 0 -> 1150 bytes
release-2.1/_static/fig/favicon.png | Bin 0 -> 1150 bytes
release-2.1/_static/fig/flinkcdc.png | Bin 0 -> 630582 bytes
.../flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
.../mysql-postgress-tutorial/flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/mysql-postgress-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../mysql-postgress-tutorial/kafka-gmv-changes.gif | Bin 0 -> 303629 bytes
.../kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
.../kibana-detailed-orders.png | Bin 0 -> 366157 bytes
.../data_in_iceberg.png | Bin 0 -> 87737 bytes
.../files-in-iceberg.png | Bin 0 -> 75874 bytes
.../final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
.../flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/real-time-data-lake-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
release-2.1/_static/file.png | Bin 0 -> 286 bytes
release-2.1/_static/fonts/Inconsolata-Bold.ttf | Bin 0 -> 109948 bytes
release-2.1/_static/fonts/Inconsolata-Regular.ttf | Bin 0 -> 96964 bytes
release-2.1/_static/fonts/Inconsolata.ttf | Bin 0 -> 63184 bytes
release-2.1/_static/fonts/Lato-Bold.ttf | Bin 0 -> 656544 bytes
release-2.1/_static/fonts/Lato-Regular.ttf | Bin 0 -> 656568 bytes
release-2.1/_static/fonts/Lato/lato-bold.eot | Bin 0 -> 256056 bytes
release-2.1/_static/fonts/Lato/lato-bold.ttf | Bin 0 -> 600856 bytes
release-2.1/_static/fonts/Lato/lato-bold.woff | Bin 0 -> 309728 bytes
release-2.1/_static/fonts/Lato/lato-bold.woff2 | Bin 0 -> 184912 bytes
release-2.1/_static/fonts/Lato/lato-bolditalic.eot | Bin 0 -> 266158 bytes
release-2.1/_static/fonts/Lato/lato-bolditalic.ttf | Bin 0 -> 622572 bytes
.../_static/fonts/Lato/lato-bolditalic.woff | Bin 0 -> 323344 bytes
.../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 0 -> 193308 bytes
release-2.1/_static/fonts/Lato/lato-italic.eot | Bin 0 -> 268604 bytes
release-2.1/_static/fonts/Lato/lato-italic.ttf | Bin 0 -> 639388 bytes
release-2.1/_static/fonts/Lato/lato-italic.woff | Bin 0 -> 328412 bytes
release-2.1/_static/fonts/Lato/lato-italic.woff2 | Bin 0 -> 195704 bytes
release-2.1/_static/fonts/Lato/lato-regular.eot | Bin 0 -> 253461 bytes
release-2.1/_static/fonts/Lato/lato-regular.ttf | Bin 0 -> 607720 bytes
release-2.1/_static/fonts/Lato/lato-regular.woff | Bin 0 -> 309192 bytes
release-2.1/_static/fonts/Lato/lato-regular.woff2 | Bin 0 -> 182708 bytes
release-2.1/_static/fonts/RobotoSlab-Bold.ttf | Bin 0 -> 170616 bytes
release-2.1/_static/fonts/RobotoSlab-Regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 0 -> 79520 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 0 -> 170616 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 0 -> 87624 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 0 -> 67312 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.eot | Bin 0 -> 78331 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff | Bin 0 -> 86288 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 0 -> 66444 bytes
release-2.1/_static/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
release-2.1/_static/fonts/fontawesome-webfont.svg | 2671 +++++
release-2.1/_static/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
release-2.1/_static/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
release-2.1/_static/jquery-3.5.1.js | 10872 +++++++++++++++++++
release-2.1/_static/jquery.js | 2 +
release-2.1/_static/js/badge_only.js | 1 +
release-2.1/_static/js/html5shiv-printshiv.min.js | 4 +
release-2.1/_static/js/html5shiv.min.js | 4 +
release-2.1/_static/js/modernizr.min.js | 4 +
release-2.1/_static/js/theme.js | 1 +
release-2.1/_static/language_data.js | 297 +
release-2.1/_static/minus.png | Bin 0 -> 90 bytes
release-2.1/_static/plus.png | Bin 0 -> 90 bytes
release-2.1/_static/pygments.css | 74 +
release-2.1/_static/searchtools.js | 516 +
release-2.1/_static/theme_overrides.css | 43 +
release-2.1/_static/underscore-1.13.1.js | 2042 ++++
release-2.1/_static/underscore.js | 6 +
release-2.1/content/about.html | 643 ++
release-2.1/content/connectors/index.html | 372 +
release-2.1/content/connectors/mongodb-cdc.html | 827 ++
release-2.1/content/connectors/mysql-cdc.html | 1125 ++
release-2.1/content/connectors/oracle-cdc.html | 805 ++
release-2.1/content/connectors/postgres-cdc.html | 714 ++
release-2.1/content/downloads.html | 318 +
release-2.1/content/formats/changelog-json.html | 442 +
release-2.1/content/formats/index.html | 331 +
release-2.1/content/githublink.html | 315 +
.../build-real-time-data-lake-tutorial.html | 616 ++
release-2.1/content/quickstart/index.html | 344 +
.../content/quickstart/mongodb-tutorial.html | 541 +
.../quickstart/mysql-postgres-tutorial.html | 675 ++
.../content/quickstart/oracle-tutorial.html | 455 +
.../build-real-time-data-lake-tutorial-zh.html" | 612 ++
.../index.html" | 344 +
.../mongodb-tutorial-zh.html" | 541 +
.../mysql-postgres-tutorial-zh.html" | 672 ++
.../oracle-tutorial-zh.html" | 454 +
release-2.1/genindex.html | 313 +
release-2.1/index.html | 365 +
release-2.1/objects.inv | Bin 0 -> 875 bytes
release-2.1/search.html | 324 +
release-2.1/searchindex.js | 1 +
release-2.2/.buildinfo | 4 +
release-2.2/.doctrees/README.doctree | Bin 0 -> 5247 bytes
release-2.2/.doctrees/content/about.doctree | Bin 0 -> 56620 bytes
.../.doctrees/content/connectors/index.doctree | Bin 0 -> 3369 bytes
.../content/connectors/mongodb-cdc.doctree | Bin 0 -> 69736 bytes
.../content/connectors/mysql-cdc(ZH).doctree | Bin 0 -> 117490 bytes
.../.doctrees/content/connectors/mysql-cdc.doctree | Bin 0 -> 119816 bytes
.../content/connectors/oceanbase-cdc(ZH).doctree | Bin 0 -> 78498 bytes
.../content/connectors/oceanbase-cdc.doctree | Bin 0 -> 53828 bytes
.../content/connectors/oracle-cdc.doctree | Bin 0 -> 60561 bytes
.../content/connectors/postgres-cdc.doctree | Bin 0 -> 37729 bytes
.../content/connectors/sqlserver-cdc.doctree | Bin 0 -> 38634 bytes
.../.doctrees/content/connectors/tidb-cdc.doctree | Bin 0 -> 38012 bytes
release-2.2/.doctrees/content/downloads.doctree | Bin 0 -> 3133 bytes
.../content/formats/changelog-json.doctree | Bin 0 -> 6082 bytes
.../.doctrees/content/formats/index.doctree | Bin 0 -> 3038 bytes
release-2.2/.doctrees/content/githublink.doctree | Bin 0 -> 4383 bytes
.../build-real-time-data-lake-tutorial.doctree | Bin 0 -> 46883 bytes
.../.doctrees/content/quickstart/index.doctree | Bin 0 -> 3410 bytes
.../content/quickstart/mongodb-tutorial.doctree | Bin 0 -> 16187 bytes
.../quickstart/mysql-postgres-tutorial.doctree | Bin 0 -> 43449 bytes
.../content/quickstart/oceanbase-tutorial.doctree | Bin 0 -> 22684 bytes
.../content/quickstart/oracle-tutorial.doctree | Bin 0 -> 18189 bytes
.../content/quickstart/polardbx-tutorial.doctree | Bin 0 -> 36646 bytes
.../content/quickstart/sqlserver-tutorial.doctree | Bin 0 -> 22446 bytes
.../content/quickstart/tidb-tutorial.doctree | Bin 0 -> 24816 bytes
.../build-real-time-data-lake-tutorial-zh.doctree" | Bin 0 -> 46204 bytes
.../index.doctree" | Bin 0 -> 3438 bytes
.../mongodb-tutorial-zh.doctree" | Bin 0 -> 15668 bytes
.../mysql-postgres-tutorial-zh.doctree" | Bin 0 -> 45601 bytes
.../oceanbase-tutorial-zh.doctree" | Bin 0 -> 22108 bytes
.../oracle-tutorial-zh.doctree" | Bin 0 -> 17629 bytes
.../polardbx-tutorial-zh.doctree" | Bin 0 -> 28333 bytes
.../sqlserver-tutorial-zh.doctree" | Bin 0 -> 22491 bytes
.../tidb-tutorial-zh.doctree" | Bin 0 -> 24802 bytes
release-2.2/.doctrees/environment.pickle | Bin 0 -> 152545 bytes
release-2.2/.doctrees/index.doctree | Bin 0 -> 4956 bytes
release-2.2/.nojekyll | 0
release-2.2/README.html | 322 +
release-2.2/_images/data_in_iceberg.png | Bin 0 -> 87737 bytes
release-2.2/_images/files-in-iceberg.png | Bin 0 -> 75874 bytes
release-2.2/_images/final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../_images/flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
release-2.2/_images/flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
release-2.2/_images/flink-sql-client.png | Bin 0 -> 185086 bytes
release-2.2/_images/flink-sql-client1.png | Bin 0 -> 185086 bytes
release-2.2/_images/flink-ui.png | Bin 0 -> 186753 bytes
release-2.2/_images/flink-ui1.png | Bin 0 -> 186753 bytes
release-2.2/_images/flinkcdc.png | Bin 0 -> 297771 bytes
.../_images/kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../_images/kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
release-2.2/_images/kibana-detailed-orders.png | Bin 0 -> 366157 bytes
.../_images/real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
release-2.2/_sources/README.md.txt | 17 +
release-2.2/_sources/content/about.md.txt | 279 +
.../_sources/content/connectors/index.md.txt | 15 +
.../_sources/content/connectors/mongodb-cdc.md.txt | 519 +
.../content/connectors/mysql-cdc(ZH).md.txt | 873 ++
.../_sources/content/connectors/mysql-cdc.md.txt | 855 ++
.../content/connectors/oceanbase-cdc(ZH).md.txt | 237 +
.../content/connectors/oceanbase-cdc.md.txt | 511 +
.../_sources/content/connectors/oracle-cdc.md.txt | 557 +
.../content/connectors/postgres-cdc.md.txt | 377 +
.../content/connectors/sqlserver-cdc.md.txt | 370 +
.../_sources/content/connectors/tidb-cdc.md.txt | 475 +
release-2.2/_sources/content/downloads.md.txt | 3 +
.../_sources/content/formats/changelog-json.md.txt | 8 +
release-2.2/_sources/content/formats/index.md.txt | 7 +
release-2.2/_sources/content/githublink.md.txt | 1 +
.../build-real-time-data-lake-tutorial.md.txt | 292 +
.../_sources/content/quickstart/index.md.txt | 14 +
.../content/quickstart/mongodb-tutorial.md.txt | 216 +
.../quickstart/mysql-postgres-tutorial.md.txt | 317 +
.../content/quickstart/oceanbase-tutorial.md.txt | 225 +
.../content/quickstart/oracle-tutorial.md.txt | 143 +
.../content/quickstart/polardbx-tutorial.md.txt | 261 +
.../content/quickstart/sqlserver-tutorial.md.txt | 205 +
.../content/quickstart/tidb-tutorial.md.txt | 233 +
.../build-real-time-data-lake-tutorial-zh.md.txt" | 284 +
.../index.md.txt" | 14 +
.../mongodb-tutorial-zh.md.txt" | 216 +
.../mysql-postgres-tutorial-zh.md.txt" | 316 +
.../oceanbase-tutorial-zh.md.txt" | 224 +
.../oracle-tutorial-zh.md.txt" | 141 +
.../polardbx-tutorial-zh.md.txt" | 232 +
.../sqlserver-tutorial-zh.md.txt" | 205 +
.../tidb-tutorial-zh.md.txt" | 234 +
release-2.2/_sources/index.md.txt | 18 +
release-2.2/_static/basic.css | 904 ++
release-2.2/_static/button.js | 6 +
release-2.2/_static/css/badge_only.css | 1 +
.../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes
.../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes
.../_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
.../_static/css/fonts/fontawesome-webfont.svg | 2671 +++++
.../_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
.../_static/css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
.../_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes
.../_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes
release-2.2/_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes
release-2.2/_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes
.../_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes
.../_static/css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes
release-2.2/_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes
release-2.2/_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes
release-2.2/_static/css/theme.css | 4 +
release-2.2/_static/doctools.js | 323 +
release-2.2/_static/documentation_options.js | 12 +
release-2.2/_static/favicon.png | Bin 0 -> 1150 bytes
release-2.2/_static/fig/favicon.png | Bin 0 -> 1150 bytes
release-2.2/_static/fig/flinkcdc.png | Bin 0 -> 297771 bytes
.../flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
.../mysql-postgress-tutorial/flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/mysql-postgress-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../mysql-postgress-tutorial/kafka-gmv-changes.gif | Bin 0 -> 303629 bytes
.../kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
.../kibana-detailed-orders.png | Bin 0 -> 366157 bytes
.../data_in_iceberg.png | Bin 0 -> 87737 bytes
.../files-in-iceberg.png | Bin 0 -> 75874 bytes
.../final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
.../flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/real-time-data-lake-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
release-2.2/_static/file.png | Bin 0 -> 286 bytes
release-2.2/_static/fonts/Inconsolata-Bold.ttf | Bin 0 -> 109948 bytes
release-2.2/_static/fonts/Inconsolata-Regular.ttf | Bin 0 -> 96964 bytes
release-2.2/_static/fonts/Inconsolata.ttf | Bin 0 -> 63184 bytes
release-2.2/_static/fonts/Lato-Bold.ttf | Bin 0 -> 656544 bytes
release-2.2/_static/fonts/Lato-Regular.ttf | Bin 0 -> 656568 bytes
release-2.2/_static/fonts/Lato/lato-bold.eot | Bin 0 -> 256056 bytes
release-2.2/_static/fonts/Lato/lato-bold.ttf | Bin 0 -> 600856 bytes
release-2.2/_static/fonts/Lato/lato-bold.woff | Bin 0 -> 309728 bytes
release-2.2/_static/fonts/Lato/lato-bold.woff2 | Bin 0 -> 184912 bytes
release-2.2/_static/fonts/Lato/lato-bolditalic.eot | Bin 0 -> 266158 bytes
release-2.2/_static/fonts/Lato/lato-bolditalic.ttf | Bin 0 -> 622572 bytes
.../_static/fonts/Lato/lato-bolditalic.woff | Bin 0 -> 323344 bytes
.../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 0 -> 193308 bytes
release-2.2/_static/fonts/Lato/lato-italic.eot | Bin 0 -> 268604 bytes
release-2.2/_static/fonts/Lato/lato-italic.ttf | Bin 0 -> 639388 bytes
release-2.2/_static/fonts/Lato/lato-italic.woff | Bin 0 -> 328412 bytes
release-2.2/_static/fonts/Lato/lato-italic.woff2 | Bin 0 -> 195704 bytes
release-2.2/_static/fonts/Lato/lato-regular.eot | Bin 0 -> 253461 bytes
release-2.2/_static/fonts/Lato/lato-regular.ttf | Bin 0 -> 607720 bytes
release-2.2/_static/fonts/Lato/lato-regular.woff | Bin 0 -> 309192 bytes
release-2.2/_static/fonts/Lato/lato-regular.woff2 | Bin 0 -> 182708 bytes
release-2.2/_static/fonts/RobotoSlab-Bold.ttf | Bin 0 -> 170616 bytes
release-2.2/_static/fonts/RobotoSlab-Regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 0 -> 79520 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 0 -> 170616 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 0 -> 87624 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 0 -> 67312 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.eot | Bin 0 -> 78331 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff | Bin 0 -> 86288 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 0 -> 66444 bytes
release-2.2/_static/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
release-2.2/_static/fonts/fontawesome-webfont.svg | 2671 +++++
release-2.2/_static/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
release-2.2/_static/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
release-2.2/_static/jquery-3.5.1.js | 10872 +++++++++++++++++++
release-2.2/_static/jquery.js | 2 +
release-2.2/_static/js/badge_only.js | 1 +
release-2.2/_static/js/html5shiv-printshiv.min.js | 4 +
release-2.2/_static/js/html5shiv.min.js | 4 +
release-2.2/_static/js/modernizr.min.js | 4 +
release-2.2/_static/js/theme.js | 1 +
release-2.2/_static/language_data.js | 297 +
release-2.2/_static/minus.png | Bin 0 -> 90 bytes
release-2.2/_static/plus.png | Bin 0 -> 90 bytes
release-2.2/_static/pygments.css | 74 +
release-2.2/_static/searchtools.js | 516 +
release-2.2/_static/theme_overrides.css | 43 +
release-2.2/_static/underscore-1.13.1.js | 2042 ++++
release-2.2/_static/underscore.js | 6 +
release-2.2/content/about.html | 653 ++
release-2.2/content/connectors/index.html | 432 +
release-2.2/content/connectors/mongodb-cdc.html | 844 ++
release-2.2/content/connectors/mysql-cdc(ZH).html | 1214 +++
release-2.2/content/connectors/mysql-cdc.html | 1190 ++
.../content/connectors/oceanbase-cdc(ZH).html | 754 ++
release-2.2/content/connectors/oceanbase-cdc.html | 840 ++
release-2.2/content/connectors/oracle-cdc.html | 904 ++
release-2.2/content/connectors/postgres-cdc.html | 717 ++
release-2.2/content/connectors/sqlserver-cdc.html | 709 ++
release-2.2/content/connectors/tidb-cdc.html | 814 ++
release-2.2/content/downloads.html | 318 +
release-2.2/content/formats/changelog-json.html | 331 +
release-2.2/content/formats/index.html | 328 +
release-2.2/content/githublink.html | 315 +
.../build-real-time-data-lake-tutorial.html | 620 ++
release-2.2/content/quickstart/index.html | 362 +
.../content/quickstart/mongodb-tutorial.html | 545 +
.../quickstart/mysql-postgres-tutorial.html | 678 ++
.../content/quickstart/oceanbase-tutorial.html | 559 +
.../content/quickstart/oracle-tutorial.html | 459 +
.../content/quickstart/polardbx-tutorial.html | 614 ++
.../content/quickstart/sqlserver-tutorial.html | 519 +
release-2.2/content/quickstart/tidb-tutorial.html | 546 +
.../build-real-time-data-lake-tutorial-zh.html" | 616 ++
.../index.html" | 364 +
.../mongodb-tutorial-zh.html" | 545 +
.../mysql-postgres-tutorial-zh.html" | 675 ++
.../oceanbase-tutorial-zh.html" | 558 +
.../oracle-tutorial-zh.html" | 458 +
.../polardbx-tutorial-zh.html" | 566 +
.../sqlserver-tutorial-zh.html" | 519 +
.../tidb-tutorial-zh.html" | 546 +
release-2.2/genindex.html | 313 +
release-2.2/index.html | 377 +
release-2.2/objects.inv | Bin 0 -> 1114 bytes
release-2.2/search.html | 324 +
release-2.2/searchindex.js | 1 +
release-2.3/.buildinfo | 4 +
release-2.3/.doctrees/README.doctree | Bin 0 -> 5247 bytes
release-2.3/.doctrees/content/about.doctree | Bin 0 -> 61084 bytes
.../.doctrees/content/connectors/db2-cdc.doctree | Bin 0 -> 37870 bytes
.../.doctrees/content/connectors/index.doctree | Bin 0 -> 3403 bytes
.../content/connectors/mongodb-cdc.doctree | Bin 0 -> 72780 bytes
.../content/connectors/mysql-cdc(ZH).doctree | Bin 0 -> 129685 bytes
.../.doctrees/content/connectors/mysql-cdc.doctree | Bin 0 -> 134549 bytes
.../content/connectors/oceanbase-cdc(ZH).doctree | Bin 0 -> 92984 bytes
.../content/connectors/oceanbase-cdc.doctree | Bin 0 -> 64617 bytes
.../content/connectors/oracle-cdc.doctree | Bin 0 -> 69272 bytes
.../content/connectors/postgres-cdc.doctree | Bin 0 -> 42507 bytes
.../content/connectors/sqlserver-cdc.doctree | Bin 0 -> 45651 bytes
.../.doctrees/content/connectors/tidb-cdc.doctree | Bin 0 -> 38012 bytes
release-2.3/.doctrees/content/downloads.doctree | Bin 0 -> 3133 bytes
.../content/formats/changelog-json.doctree | Bin 0 -> 6082 bytes
.../.doctrees/content/formats/index.doctree | Bin 0 -> 3038 bytes
release-2.3/.doctrees/content/githublink.doctree | Bin 0 -> 4383 bytes
.../build-real-time-data-lake-tutorial.doctree | Bin 0 -> 46883 bytes
.../content/quickstart/db2-tutorial.doctree | Bin 0 -> 17356 bytes
.../.doctrees/content/quickstart/index.doctree | Bin 0 -> 3449 bytes
.../content/quickstart/mongodb-tutorial.doctree | Bin 0 -> 16147 bytes
.../quickstart/mysql-postgres-tutorial.doctree | Bin 0 -> 43409 bytes
.../content/quickstart/oceanbase-tutorial.doctree | Bin 0 -> 22802 bytes
.../content/quickstart/oracle-tutorial.doctree | Bin 0 -> 18149 bytes
.../content/quickstart/polardbx-tutorial.doctree | Bin 0 -> 36606 bytes
.../content/quickstart/sqlserver-tutorial.doctree | Bin 0 -> 22406 bytes
.../content/quickstart/tidb-tutorial.doctree | Bin 0 -> 24776 bytes
.../build-real-time-data-lake-tutorial-zh.doctree" | Bin 0 -> 46204 bytes
.../index.doctree" | Bin 0 -> 3438 bytes
.../mongodb-tutorial-zh.doctree" | Bin 0 -> 15628 bytes
.../mysql-postgres-tutorial-zh.doctree" | Bin 0 -> 45557 bytes
.../oceanbase-tutorial-zh.doctree" | Bin 0 -> 22228 bytes
.../oracle-tutorial-zh.doctree" | Bin 0 -> 17589 bytes
.../polardbx-tutorial-zh.doctree" | Bin 0 -> 28293 bytes
.../sqlserver-tutorial-zh.doctree" | Bin 0 -> 22451 bytes
.../tidb-tutorial-zh.doctree" | Bin 0 -> 24762 bytes
release-2.3/.doctrees/environment.pickle | Bin 0 -> 160641 bytes
release-2.3/.doctrees/index.doctree | Bin 0 -> 4956 bytes
release-2.3/.nojekyll | 0
release-2.3/README.html | 318 +
release-2.3/_images/data_in_iceberg.png | Bin 0 -> 87737 bytes
release-2.3/_images/files-in-iceberg.png | Bin 0 -> 75874 bytes
release-2.3/_images/final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../_images/flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
release-2.3/_images/flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
release-2.3/_images/flink-sql-client.png | Bin 0 -> 185086 bytes
release-2.3/_images/flink-sql-client1.png | Bin 0 -> 185086 bytes
release-2.3/_images/flink-ui.png | Bin 0 -> 186753 bytes
release-2.3/_images/flink-ui1.png | Bin 0 -> 186753 bytes
release-2.3/_images/flinkcdc.png | Bin 0 -> 554685 bytes
.../_images/kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../_images/kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
release-2.3/_images/kibana-detailed-orders.png | Bin 0 -> 366157 bytes
.../_images/real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
release-2.3/_sources/README.md.txt | 17 +
release-2.3/_sources/content/about.md.txt | 281 +
.../_sources/content/connectors/db2-cdc.md.txt | 367 +
.../_sources/content/connectors/index.md.txt | 16 +
.../_sources/content/connectors/mongodb-cdc.md.txt | 560 +
.../content/connectors/mysql-cdc(ZH).md.txt | 1006 ++
.../_sources/content/connectors/mysql-cdc.md.txt | 1014 ++
.../content/connectors/oceanbase-cdc(ZH).md.txt | 286 +
.../content/connectors/oceanbase-cdc.md.txt | 598 +
.../_sources/content/connectors/oracle-cdc.md.txt | 640 ++
.../content/connectors/postgres-cdc.md.txt | 409 +
.../content/connectors/sqlserver-cdc.md.txt | 404 +
.../_sources/content/connectors/tidb-cdc.md.txt | 475 +
release-2.3/_sources/content/downloads.md.txt | 3 +
.../_sources/content/formats/changelog-json.md.txt | 8 +
release-2.3/_sources/content/formats/index.md.txt | 7 +
release-2.3/_sources/content/githublink.md.txt | 1 +
.../build-real-time-data-lake-tutorial.md.txt | 292 +
.../content/quickstart/db2-tutorial.md.txt | 135 +
.../_sources/content/quickstart/index.md.txt | 15 +
.../content/quickstart/mongodb-tutorial.md.txt | 216 +
.../quickstart/mysql-postgres-tutorial.md.txt | 317 +
.../content/quickstart/oceanbase-tutorial.md.txt | 229 +
.../content/quickstart/oracle-tutorial.md.txt | 143 +
.../content/quickstart/polardbx-tutorial.md.txt | 261 +
.../content/quickstart/sqlserver-tutorial.md.txt | 205 +
.../content/quickstart/tidb-tutorial.md.txt | 233 +
.../build-real-time-data-lake-tutorial-zh.md.txt" | 284 +
.../index.md.txt" | 14 +
.../mongodb-tutorial-zh.md.txt" | 216 +
.../mysql-postgres-tutorial-zh.md.txt" | 316 +
.../oceanbase-tutorial-zh.md.txt" | 228 +
.../oracle-tutorial-zh.md.txt" | 141 +
.../polardbx-tutorial-zh.md.txt" | 232 +
.../sqlserver-tutorial-zh.md.txt" | 205 +
.../tidb-tutorial-zh.md.txt" | 234 +
release-2.3/_sources/index.md.txt | 18 +
release-2.3/_static/basic.css | 904 ++
release-2.3/_static/button.js | 6 +
release-2.3/_static/css/badge_only.css | 1 +
.../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes
.../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes
.../_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
.../_static/css/fonts/fontawesome-webfont.svg | 2671 +++++
.../_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
.../_static/css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
.../_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes
.../_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes
release-2.3/_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes
release-2.3/_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes
.../_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes
.../_static/css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes
release-2.3/_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes
release-2.3/_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes
release-2.3/_static/css/theme.css | 4 +
release-2.3/_static/doctools.js | 323 +
release-2.3/_static/documentation_options.js | 12 +
release-2.3/_static/favicon.png | Bin 0 -> 1150 bytes
release-2.3/_static/fig/favicon.png | Bin 0 -> 1150 bytes
release-2.3/_static/fig/flinkcdc.png | Bin 0 -> 554685 bytes
.../flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
.../mysql-postgress-tutorial/flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/mysql-postgress-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../mysql-postgress-tutorial/kafka-gmv-changes.gif | Bin 0 -> 303629 bytes
.../kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
.../kibana-detailed-orders.png | Bin 0 -> 366157 bytes
.../data_in_iceberg.png | Bin 0 -> 87737 bytes
.../files-in-iceberg.png | Bin 0 -> 75874 bytes
.../final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
.../flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/real-time-data-lake-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
release-2.3/_static/file.png | Bin 0 -> 286 bytes
release-2.3/_static/fonts/Inconsolata-Bold.ttf | Bin 0 -> 109948 bytes
release-2.3/_static/fonts/Inconsolata-Regular.ttf | Bin 0 -> 96964 bytes
release-2.3/_static/fonts/Inconsolata.ttf | Bin 0 -> 63184 bytes
release-2.3/_static/fonts/Lato-Bold.ttf | Bin 0 -> 656544 bytes
release-2.3/_static/fonts/Lato-Regular.ttf | Bin 0 -> 656568 bytes
release-2.3/_static/fonts/Lato/lato-bold.eot | Bin 0 -> 256056 bytes
release-2.3/_static/fonts/Lato/lato-bold.ttf | Bin 0 -> 600856 bytes
release-2.3/_static/fonts/Lato/lato-bold.woff | Bin 0 -> 309728 bytes
release-2.3/_static/fonts/Lato/lato-bold.woff2 | Bin 0 -> 184912 bytes
release-2.3/_static/fonts/Lato/lato-bolditalic.eot | Bin 0 -> 266158 bytes
release-2.3/_static/fonts/Lato/lato-bolditalic.ttf | Bin 0 -> 622572 bytes
.../_static/fonts/Lato/lato-bolditalic.woff | Bin 0 -> 323344 bytes
.../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 0 -> 193308 bytes
release-2.3/_static/fonts/Lato/lato-italic.eot | Bin 0 -> 268604 bytes
release-2.3/_static/fonts/Lato/lato-italic.ttf | Bin 0 -> 639388 bytes
release-2.3/_static/fonts/Lato/lato-italic.woff | Bin 0 -> 328412 bytes
release-2.3/_static/fonts/Lato/lato-italic.woff2 | Bin 0 -> 195704 bytes
release-2.3/_static/fonts/Lato/lato-regular.eot | Bin 0 -> 253461 bytes
release-2.3/_static/fonts/Lato/lato-regular.ttf | Bin 0 -> 607720 bytes
release-2.3/_static/fonts/Lato/lato-regular.woff | Bin 0 -> 309192 bytes
release-2.3/_static/fonts/Lato/lato-regular.woff2 | Bin 0 -> 182708 bytes
release-2.3/_static/fonts/RobotoSlab-Bold.ttf | Bin 0 -> 170616 bytes
release-2.3/_static/fonts/RobotoSlab-Regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 0 -> 79520 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 0 -> 170616 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 0 -> 87624 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 0 -> 67312 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.eot | Bin 0 -> 78331 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff | Bin 0 -> 86288 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 0 -> 66444 bytes
release-2.3/_static/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
release-2.3/_static/fonts/fontawesome-webfont.svg | 2671 +++++
release-2.3/_static/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
release-2.3/_static/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
release-2.3/_static/jquery-3.5.1.js | 10872 +++++++++++++++++++
release-2.3/_static/jquery.js | 2 +
release-2.3/_static/js/badge_only.js | 1 +
release-2.3/_static/js/html5shiv-printshiv.min.js | 4 +
release-2.3/_static/js/html5shiv.min.js | 4 +
release-2.3/_static/js/modernizr.min.js | 4 +
release-2.3/_static/js/theme.js | 1 +
release-2.3/_static/language_data.js | 297 +
release-2.3/_static/minus.png | Bin 0 -> 90 bytes
release-2.3/_static/plus.png | Bin 0 -> 90 bytes
release-2.3/_static/pygments.css | 74 +
release-2.3/_static/searchtools.js | 516 +
release-2.3/_static/theme_overrides.css | 41 +
release-2.3/_static/underscore-1.13.1.js | 2042 ++++
release-2.3/_static/underscore.js | 6 +
release-2.3/content/about.html | 656 ++
release-2.3/content/connectors/db2-cdc.html | 716 ++
release-2.3/content/connectors/index.html | 442 +
release-2.3/content/connectors/mongodb-cdc.html | 884 ++
release-2.3/content/connectors/mysql-cdc(ZH).html | 1336 +++
release-2.3/content/connectors/mysql-cdc.html | 1344 +++
.../content/connectors/oceanbase-cdc(ZH).html | 827 ++
release-2.3/content/connectors/oceanbase-cdc.html | 923 ++
release-2.3/content/connectors/oracle-cdc.html | 984 ++
release-2.3/content/connectors/postgres-cdc.html | 746 ++
release-2.3/content/connectors/sqlserver-cdc.html | 745 ++
release-2.3/content/connectors/tidb-cdc.html | 811 ++
release-2.3/content/downloads.html | 314 +
release-2.3/content/formats/changelog-json.html | 327 +
release-2.3/content/formats/index.html | 324 +
release-2.3/content/githublink.html | 311 +
.../build-real-time-data-lake-tutorial.html | 617 ++
release-2.3/content/quickstart/db2-tutorial.html | 449 +
release-2.3/content/quickstart/index.html | 360 +
.../content/quickstart/mongodb-tutorial.html | 542 +
.../quickstart/mysql-postgres-tutorial.html | 675 ++
.../content/quickstart/oceanbase-tutorial.html | 560 +
.../content/quickstart/oracle-tutorial.html | 456 +
.../content/quickstart/polardbx-tutorial.html | 611 ++
.../content/quickstart/sqlserver-tutorial.html | 516 +
release-2.3/content/quickstart/tidb-tutorial.html | 543 +
.../build-real-time-data-lake-tutorial-zh.html" | 612 ++
.../index.html" | 360 +
.../mongodb-tutorial-zh.html" | 541 +
.../mysql-postgres-tutorial-zh.html" | 671 ++
.../oceanbase-tutorial-zh.html" | 558 +
.../oracle-tutorial-zh.html" | 454 +
.../polardbx-tutorial-zh.html" | 562 +
.../sqlserver-tutorial-zh.html" | 515 +
.../tidb-tutorial-zh.html" | 542 +
release-2.3/genindex.html | 309 +
release-2.3/index.html | 375 +
release-2.3/objects.inv | Bin 0 -> 1153 bytes
release-2.3/search.html | 320 +
release-2.3/searchindex.js | 1 +
release-2.4/.buildinfo | 4 +
release-2.4/.doctrees/README.doctree | Bin 0 -> 5247 bytes
release-2.4/.doctrees/content/about.doctree | Bin 0 -> 79800 bytes
.../.doctrees/content/connectors/db2-cdc.doctree | Bin 0 -> 37880 bytes
.../.doctrees/content/connectors/index.doctree | Bin 0 -> 3482 bytes
.../content/connectors/mongodb-cdc(ZH).doctree | Bin 0 -> 74098 bytes
.../content/connectors/mongodb-cdc.doctree | Bin 0 -> 77384 bytes
.../content/connectors/mysql-cdc(ZH).doctree | Bin 0 -> 135435 bytes
.../.doctrees/content/connectors/mysql-cdc.doctree | Bin 0 -> 141373 bytes
.../content/connectors/oceanbase-cdc(ZH).doctree | Bin 0 -> 76172 bytes
.../content/connectors/oceanbase-cdc.doctree | Bin 0 -> 77085 bytes
.../content/connectors/oracle-cdc.doctree | Bin 0 -> 72962 bytes
.../content/connectors/postgres-cdc.doctree | Bin 0 -> 62955 bytes
.../content/connectors/sqlserver-cdc.doctree | Bin 0 -> 53256 bytes
.../.doctrees/content/connectors/tidb-cdc.doctree | Bin 0 -> 38012 bytes
.../content/connectors/vitess-cdc.doctree | Bin 0 -> 34302 bytes
release-2.4/.doctrees/content/downloads.doctree | Bin 0 -> 3133 bytes
.../content/formats/changelog-json.doctree | Bin 0 -> 6082 bytes
.../.doctrees/content/formats/index.doctree | Bin 0 -> 3038 bytes
release-2.4/.doctrees/content/githublink.doctree | Bin 0 -> 4383 bytes
.../build-real-time-data-lake-tutorial.doctree | Bin 0 -> 46883 bytes
.../content/quickstart/db2-tutorial.doctree | Bin 0 -> 17388 bytes
.../.doctrees/content/quickstart/index.doctree | Bin 0 -> 3449 bytes
.../content/quickstart/mongodb-tutorial.doctree | Bin 0 -> 16179 bytes
.../quickstart/mysql-postgres-tutorial.doctree | Bin 0 -> 43493 bytes
.../content/quickstart/oceanbase-tutorial.doctree | Bin 0 -> 26226 bytes
.../content/quickstart/oracle-tutorial.doctree | Bin 0 -> 23361 bytes
.../content/quickstart/polardbx-tutorial.doctree | Bin 0 -> 36638 bytes
.../content/quickstart/sqlserver-tutorial.doctree | Bin 0 -> 22346 bytes
.../content/quickstart/tidb-tutorial.doctree | Bin 0 -> 24808 bytes
.../build-real-time-data-lake-tutorial-zh.doctree" | Bin 0 -> 46204 bytes
.../index.doctree" | Bin 0 -> 3438 bytes
.../mongodb-tutorial-zh.doctree" | Bin 0 -> 15660 bytes
.../mysql-postgres-tutorial-zh.doctree" | Bin 0 -> 45647 bytes
.../oceanbase-tutorial-zh.doctree" | Bin 0 -> 25413 bytes
.../oracle-tutorial-zh.doctree" | Bin 0 -> 22683 bytes
.../polardbx-tutorial-zh.doctree" | Bin 0 -> 28325 bytes
.../sqlserver-tutorial-zh.doctree" | Bin 0 -> 22391 bytes
.../tidb-tutorial-zh.doctree" | Bin 0 -> 24794 bytes
release-2.4/.doctrees/environment.pickle | Bin 0 -> 181093 bytes
release-2.4/.doctrees/index.doctree | Bin 0 -> 4956 bytes
release-2.4/.nojekyll | 0
release-2.4/README.html | 318 +
release-2.4/_images/data_in_iceberg.png | Bin 0 -> 87737 bytes
release-2.4/_images/files-in-iceberg.png | Bin 0 -> 75874 bytes
release-2.4/_images/final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../_images/flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
release-2.4/_images/flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
release-2.4/_images/flink-sql-client.png | Bin 0 -> 185086 bytes
release-2.4/_images/flink-sql-client1.png | Bin 0 -> 185086 bytes
release-2.4/_images/flink-ui.png | Bin 0 -> 186753 bytes
release-2.4/_images/flink-ui1.png | Bin 0 -> 186753 bytes
release-2.4/_images/flinkcdc.png | Bin 0 -> 554685 bytes
.../_images/kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../_images/kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
release-2.4/_images/kibana-detailed-orders.png | Bin 0 -> 366157 bytes
.../_images/real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
release-2.4/_sources/README.md.txt | 17 +
release-2.4/_sources/content/about.md.txt | 297 +
.../_sources/content/connectors/db2-cdc.md.txt | 367 +
.../_sources/content/connectors/index.md.txt | 18 +
.../content/connectors/mongodb-cdc(ZH).md.txt | 594 +
.../_sources/content/connectors/mongodb-cdc.md.txt | 602 +
.../content/connectors/mysql-cdc(ZH).md.txt | 1025 ++
.../_sources/content/connectors/mysql-cdc.md.txt | 1036 ++
.../content/connectors/oceanbase-cdc(ZH).md.txt | 761 ++
.../content/connectors/oceanbase-cdc.md.txt | 762 ++
.../_sources/content/connectors/oracle-cdc.md.txt | 674 ++
.../content/connectors/postgres-cdc.md.txt | 594 +
.../content/connectors/sqlserver-cdc.md.txt | 475 +
.../_sources/content/connectors/tidb-cdc.md.txt | 475 +
.../_sources/content/connectors/vitess-cdc.md.txt | 309 +
release-2.4/_sources/content/downloads.md.txt | 3 +
.../_sources/content/formats/changelog-json.md.txt | 8 +
release-2.4/_sources/content/formats/index.md.txt | 7 +
release-2.4/_sources/content/githublink.md.txt | 1 +
.../build-real-time-data-lake-tutorial.md.txt | 292 +
.../content/quickstart/db2-tutorial.md.txt | 135 +
.../_sources/content/quickstart/index.md.txt | 15 +
.../content/quickstart/mongodb-tutorial.md.txt | 216 +
.../quickstart/mysql-postgres-tutorial.md.txt | 318 +
.../content/quickstart/oceanbase-tutorial.md.txt | 259 +
.../content/quickstart/oracle-tutorial.md.txt | 205 +
.../content/quickstart/polardbx-tutorial.md.txt | 261 +
.../content/quickstart/sqlserver-tutorial.md.txt | 203 +
.../content/quickstart/tidb-tutorial.md.txt | 233 +
.../build-real-time-data-lake-tutorial-zh.md.txt" | 284 +
.../index.md.txt" | 14 +
.../mongodb-tutorial-zh.md.txt" | 216 +
.../mysql-postgres-tutorial-zh.md.txt" | 317 +
.../oceanbase-tutorial-zh.md.txt" | 256 +
.../oracle-tutorial-zh.md.txt" | 204 +
.../polardbx-tutorial-zh.md.txt" | 232 +
.../sqlserver-tutorial-zh.md.txt" | 203 +
.../tidb-tutorial-zh.md.txt" | 234 +
release-2.4/_sources/index.md.txt | 18 +
release-2.4/_static/basic.css | 904 ++
release-2.4/_static/button.js | 6 +
release-2.4/_static/css/badge_only.css | 1 +
.../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes
.../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes
.../_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
.../_static/css/fonts/fontawesome-webfont.svg | 2671 +++++
.../_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
.../_static/css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
.../_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes
.../_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes
release-2.4/_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes
release-2.4/_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes
.../_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes
.../_static/css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes
release-2.4/_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes
release-2.4/_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes
release-2.4/_static/css/theme.css | 4 +
release-2.4/_static/doctools.js | 323 +
release-2.4/_static/documentation_options.js | 12 +
release-2.4/_static/favicon.png | Bin 0 -> 1150 bytes
release-2.4/_static/fig/favicon.png | Bin 0 -> 1150 bytes
release-2.4/_static/fig/flinkcdc.png | Bin 0 -> 554685 bytes
.../flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
.../mysql-postgress-tutorial/flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/mysql-postgress-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../mysql-postgress-tutorial/kafka-gmv-changes.gif | Bin 0 -> 303629 bytes
.../kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
.../kibana-detailed-orders.png | Bin 0 -> 366157 bytes
.../data_in_iceberg.png | Bin 0 -> 87737 bytes
.../files-in-iceberg.png | Bin 0 -> 75874 bytes
.../final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
.../flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/real-time-data-lake-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
release-2.4/_static/file.png | Bin 0 -> 286 bytes
release-2.4/_static/fonts/Inconsolata-Bold.ttf | Bin 0 -> 109948 bytes
release-2.4/_static/fonts/Inconsolata-Regular.ttf | Bin 0 -> 96964 bytes
release-2.4/_static/fonts/Inconsolata.ttf | Bin 0 -> 63184 bytes
release-2.4/_static/fonts/Lato-Bold.ttf | Bin 0 -> 656544 bytes
release-2.4/_static/fonts/Lato-Regular.ttf | Bin 0 -> 656568 bytes
release-2.4/_static/fonts/Lato/lato-bold.eot | Bin 0 -> 256056 bytes
release-2.4/_static/fonts/Lato/lato-bold.ttf | Bin 0 -> 600856 bytes
release-2.4/_static/fonts/Lato/lato-bold.woff | Bin 0 -> 309728 bytes
release-2.4/_static/fonts/Lato/lato-bold.woff2 | Bin 0 -> 184912 bytes
release-2.4/_static/fonts/Lato/lato-bolditalic.eot | Bin 0 -> 266158 bytes
release-2.4/_static/fonts/Lato/lato-bolditalic.ttf | Bin 0 -> 622572 bytes
.../_static/fonts/Lato/lato-bolditalic.woff | Bin 0 -> 323344 bytes
.../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 0 -> 193308 bytes
release-2.4/_static/fonts/Lato/lato-italic.eot | Bin 0 -> 268604 bytes
release-2.4/_static/fonts/Lato/lato-italic.ttf | Bin 0 -> 639388 bytes
release-2.4/_static/fonts/Lato/lato-italic.woff | Bin 0 -> 328412 bytes
release-2.4/_static/fonts/Lato/lato-italic.woff2 | Bin 0 -> 195704 bytes
release-2.4/_static/fonts/Lato/lato-regular.eot | Bin 0 -> 253461 bytes
release-2.4/_static/fonts/Lato/lato-regular.ttf | Bin 0 -> 607720 bytes
release-2.4/_static/fonts/Lato/lato-regular.woff | Bin 0 -> 309192 bytes
release-2.4/_static/fonts/Lato/lato-regular.woff2 | Bin 0 -> 182708 bytes
release-2.4/_static/fonts/RobotoSlab-Bold.ttf | Bin 0 -> 170616 bytes
release-2.4/_static/fonts/RobotoSlab-Regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 0 -> 79520 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 0 -> 170616 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 0 -> 87624 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 0 -> 67312 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.eot | Bin 0 -> 78331 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff | Bin 0 -> 86288 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 0 -> 66444 bytes
release-2.4/_static/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
release-2.4/_static/fonts/fontawesome-webfont.svg | 2671 +++++
release-2.4/_static/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
release-2.4/_static/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
release-2.4/_static/jquery-3.5.1.js | 10872 +++++++++++++++++++
release-2.4/_static/jquery.js | 2 +
release-2.4/_static/js/badge_only.js | 1 +
release-2.4/_static/js/html5shiv-printshiv.min.js | 4 +
release-2.4/_static/js/html5shiv.min.js | 4 +
release-2.4/_static/js/modernizr.min.js | 4 +
release-2.4/_static/js/theme.js | 1 +
release-2.4/_static/language_data.js | 297 +
release-2.4/_static/minus.png | Bin 0 -> 90 bytes
release-2.4/_static/plus.png | Bin 0 -> 90 bytes
release-2.4/_static/pygments.css | 74 +
release-2.4/_static/searchtools.js | 516 +
release-2.4/_static/theme_overrides.css | 41 +
release-2.4/_static/underscore-1.13.1.js | 2042 ++++
release-2.4/_static/underscore.js | 6 +
release-2.4/content/about.html | 730 ++
release-2.4/content/connectors/db2-cdc.html | 718 ++
release-2.4/content/connectors/index.html | 465 +
.../content/connectors/mongodb-cdc(ZH).html | 920 ++
release-2.4/content/connectors/mongodb-cdc.html | 927 ++
release-2.4/content/connectors/mysql-cdc(ZH).html | 1359 +++
release-2.4/content/connectors/mysql-cdc.html | 1369 +++
.../content/connectors/oceanbase-cdc(ZH).html | 1097 ++
release-2.4/content/connectors/oceanbase-cdc.html | 1088 ++
release-2.4/content/connectors/oracle-cdc.html | 1021 ++
release-2.4/content/connectors/postgres-cdc.html | 936 ++
release-2.4/content/connectors/sqlserver-cdc.html | 817 ++
release-2.4/content/connectors/tidb-cdc.html | 813 ++
release-2.4/content/connectors/vitess-cdc.html | 648 ++
release-2.4/content/downloads.html | 314 +
release-2.4/content/formats/changelog-json.html | 327 +
release-2.4/content/formats/index.html | 324 +
release-2.4/content/githublink.html | 311 +
.../build-real-time-data-lake-tutorial.html | 617 ++
release-2.4/content/quickstart/db2-tutorial.html | 449 +
release-2.4/content/quickstart/index.html | 360 +
.../content/quickstart/mongodb-tutorial.html | 542 +
.../quickstart/mysql-postgres-tutorial.html | 676 ++
.../content/quickstart/oceanbase-tutorial.html | 581 +
.../content/quickstart/oracle-tutorial.html | 515 +
.../content/quickstart/polardbx-tutorial.html | 611 ++
.../content/quickstart/sqlserver-tutorial.html | 514 +
release-2.4/content/quickstart/tidb-tutorial.html | 543 +
.../build-real-time-data-lake-tutorial-zh.html" | 612 ++
.../index.html" | 360 +
.../mongodb-tutorial-zh.html" | 541 +
.../mysql-postgres-tutorial-zh.html" | 672 ++
.../oceanbase-tutorial-zh.html" | 578 +
.../oracle-tutorial-zh.html" | 513 +
.../polardbx-tutorial-zh.html" | 562 +
.../sqlserver-tutorial-zh.html" | 513 +
.../tidb-tutorial-zh.html" | 542 +
release-2.4/genindex.html | 309 +
release-2.4/index.html | 377 +
release-2.4/objects.inv | Bin 0 -> 1183 bytes
release-2.4/search.html | 320 +
release-2.4/searchindex.js | 1 +
release-3.0/.buildinfo | 4 +
release-3.0/.doctrees/README.doctree | Bin 0 -> 5247 bytes
.../.doctrees/content/connectors/db2-cdc.doctree | Bin 0 -> 37583 bytes
.../.doctrees/content/connectors/index.doctree | Bin 0 -> 3482 bytes
.../content/connectors/mongodb-cdc(ZH).doctree | Bin 0 -> 82885 bytes
.../content/connectors/mongodb-cdc.doctree | Bin 0 -> 87075 bytes
.../content/connectors/mysql-cdc(ZH).doctree | Bin 0 -> 140094 bytes
.../.doctrees/content/connectors/mysql-cdc.doctree | Bin 0 -> 146727 bytes
.../content/connectors/oceanbase-cdc(ZH).doctree | Bin 0 -> 77156 bytes
.../content/connectors/oceanbase-cdc.doctree | Bin 0 -> 78253 bytes
.../content/connectors/oracle-cdc.doctree | Bin 0 -> 73798 bytes
.../content/connectors/postgres-cdc.doctree | Bin 0 -> 64147 bytes
.../content/connectors/sqlserver-cdc.doctree | Bin 0 -> 54095 bytes
.../.doctrees/content/connectors/tidb-cdc.doctree | Bin 0 -> 38178 bytes
.../content/connectors/vitess-cdc.doctree | Bin 0 -> 34108 bytes
release-3.0/.doctrees/content/downloads.doctree | Bin 0 -> 3133 bytes
.../content/formats/changelog-json.doctree | Bin 0 -> 6082 bytes
.../.doctrees/content/formats/index.doctree | Bin 0 -> 3038 bytes
release-3.0/.doctrees/content/githublink.doctree | Bin 0 -> 4383 bytes
.../content/overview/cdc-connectors.doctree | Bin 0 -> 100812 bytes
.../content/overview/cdc-pipeline.doctree | Bin 0 -> 27818 bytes
.../.doctrees/content/overview/index.doctree | Bin 0 -> 3109 bytes
.../content/pipelines/doris-pipeline(ZH).doctree | Bin 0 -> 18822 bytes
.../content/pipelines/doris-pipeline.doctree | Bin 0 -> 19633 bytes
.../.doctrees/content/pipelines/index.doctree | Bin 0 -> 3314 bytes
.../content/pipelines/mysql-pipeline(ZH).doctree | Bin 0 -> 45675 bytes
.../content/pipelines/mysql-pipeline.doctree | Bin 0 -> 47395 bytes
.../pipelines/starrocks-pipeline(ZH).doctree | Bin 0 -> 31531 bytes
.../content/pipelines/starrocks-pipeline.doctree | Bin 0 -> 32824 bytes
.../build-real-time-data-lake-tutorial.doctree | Bin 0 -> 45977 bytes
.../datastream-api-package-guidance.doctree | Bin 0 -> 26995 bytes
.../content/quickstart/db2-tutorial.doctree | Bin 0 -> 17466 bytes
.../.doctrees/content/quickstart/index.doctree | Bin 0 -> 3623 bytes
.../content/quickstart/mongodb-tutorial.doctree | Bin 0 -> 16370 bytes
.../mysql-doris-pipeline-tutorial.doctree | Bin 0 -> 50961 bytes
.../quickstart/mysql-postgres-tutorial.doctree | Bin 0 -> 43209 bytes
.../mysql-starrocks-pipeline-tutorial.doctree | Bin 0 -> 45233 bytes
.../content/quickstart/oceanbase-tutorial.doctree | Bin 0 -> 26282 bytes
.../content/quickstart/oracle-tutorial.doctree | Bin 0 -> 23361 bytes
.../content/quickstart/polardbx-tutorial.doctree | Bin 0 -> 36714 bytes
.../content/quickstart/sqlserver-tutorial.doctree | Bin 0 -> 22815 bytes
.../content/quickstart/tidb-tutorial.doctree | Bin 0 -> 25277 bytes
.../build-real-time-data-lake-tutorial-zh.doctree" | Bin 0 -> 44693 bytes
.../datastream-api-package-guidance-zh.doctree" | Bin 0 -> 26999 bytes
.../index.doctree" | Bin 0 -> 3627 bytes
.../mongodb-tutorial-zh.doctree" | Bin 0 -> 15815 bytes
.../mysql-doris-pipeline-tutorial-zh.doctree" | Bin 0 -> 46692 bytes
.../mysql-postgres-tutorial-zh.doctree" | Bin 0 -> 45074 bytes
.../mysql-starrocks-pipeline-tutorial-zh.doctree" | Bin 0 -> 40575 bytes
.../oceanbase-tutorial-zh.doctree" | Bin 0 -> 25568 bytes
.../oracle-tutorial-zh.doctree" | Bin 0 -> 22871 bytes
.../polardbx-tutorial-zh.doctree" | Bin 0 -> 28051 bytes
.../sqlserver-tutorial-zh.doctree" | Bin 0 -> 22546 bytes
.../tidb-tutorial-zh.doctree" | Bin 0 -> 24949 bytes
release-3.0/.doctrees/environment.pickle | Bin 0 -> 237316 bytes
release-3.0/.doctrees/index.doctree | Bin 0 -> 4996 bytes
release-3.0/.nojekyll | 0
release-3.0/README.html | 319 +
release-3.0/_images/architecture.png | Bin 0 -> 450145 bytes
release-3.0/_images/check_branch.png | Bin 0 -> 137158 bytes
release-3.0/_images/data_in_iceberg.png | Bin 0 -> 87737 bytes
release-3.0/_images/design.png | Bin 0 -> 1859825 bytes
release-3.0/_images/doris-create-table.png | Bin 0 -> 2283147 bytes
release-3.0/_images/doris-ui.png | Bin 0 -> 3923688 bytes
release-3.0/_images/doris_display_data.png | Bin 0 -> 2322957 bytes
release-3.0/_images/doris_display_result.png | Bin 0 -> 2228734 bytes
release-3.0/_images/files-in-iceberg.png | Bin 0 -> 75874 bytes
release-3.0/_images/final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../_images/flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
release-3.0/_images/flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
release-3.0/_images/flink-sql-client.png | Bin 0 -> 185086 bytes
release-3.0/_images/flink-sql-client1.png | Bin 0 -> 185086 bytes
release-3.0/_images/flink-ui.png | Bin 0 -> 186753 bytes
release-3.0/_images/flink-ui1.png | Bin 0 -> 186753 bytes
release-3.0/_images/flink-ui2.png | Bin 0 -> 186753 bytes
release-3.0/_images/flink-ui3.png | Bin 0 -> 186753 bytes
release-3.0/_images/flinkcdc.png | Bin 0 -> 554685 bytes
release-3.0/_images/fork.png | Bin 0 -> 67259 bytes
.../_images/kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../_images/kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
release-3.0/_images/kibana-detailed-orders.png | Bin 0 -> 366157 bytes
release-3.0/_images/mysql-to-doris.png | Bin 0 -> 2583556 bytes
release-3.0/_images/mysql-to-starrocks.png | Bin 0 -> 2502781 bytes
release-3.0/_images/open_pr.png | Bin 0 -> 308245 bytes
.../_images/real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
release-3.0/_images/starrocks-display-data.png | Bin 0 -> 829756 bytes
release-3.0/_images/starrocks-display-result.png | Bin 0 -> 1098472 bytes
release-3.0/_sources/README.md.txt | 17 +
.../_sources/content/connectors/db2-cdc.md.txt | 367 +
.../_sources/content/connectors/index.md.txt | 18 +
.../content/connectors/mongodb-cdc(ZH).md.txt | 666 ++
.../_sources/content/connectors/mongodb-cdc.md.txt | 676 ++
.../content/connectors/mysql-cdc(ZH).md.txt | 1067 ++
.../_sources/content/connectors/mysql-cdc.md.txt | 1081 ++
.../content/connectors/oceanbase-cdc(ZH).md.txt | 768 ++
.../content/connectors/oceanbase-cdc.md.txt | 769 ++
.../_sources/content/connectors/oracle-cdc.md.txt | 678 ++
.../content/connectors/postgres-cdc.md.txt | 605 ++
.../content/connectors/sqlserver-cdc.md.txt | 479 +
.../_sources/content/connectors/tidb-cdc.md.txt | 475 +
.../_sources/content/connectors/vitess-cdc.md.txt | 309 +
release-3.0/_sources/content/downloads.md.txt | 3 +
.../_sources/content/formats/changelog-json.md.txt | 8 +
release-3.0/_sources/content/formats/index.md.txt | 7 +
release-3.0/_sources/content/githublink.md.txt | 1 +
.../content/overview/cdc-connectors.md.txt | 374 +
.../_sources/content/overview/cdc-pipeline.md.txt | 101 +
release-3.0/_sources/content/overview/index.md.txt | 8 +
.../content/pipelines/doris-pipeline(ZH).md.txt | 267 +
.../content/pipelines/doris-pipeline.md.txt | 269 +
.../_sources/content/pipelines/index.md.txt | 12 +
.../content/pipelines/mysql-pipeline(ZH).md.txt | 540 +
.../content/pipelines/mysql-pipeline.md.txt | 547 +
.../pipelines/starrocks-pipeline(ZH).md.txt | 305 +
.../content/pipelines/starrocks-pipeline.md.txt | 315 +
.../build-real-time-data-lake-tutorial.md.txt | 303 +
.../datastream-api-package-guidance.md.txt | 248 +
.../content/quickstart/db2-tutorial.md.txt | 135 +
.../_sources/content/quickstart/index.md.txt | 18 +
.../content/quickstart/mongodb-tutorial.md.txt | 216 +
.../mysql-doris-pipeline-tutorial.md.txt | 319 +
.../quickstart/mysql-postgres-tutorial.md.txt | 318 +
.../mysql-starrocks-pipeline-tutorial.md.txt | 287 +
.../content/quickstart/oceanbase-tutorial.md.txt | 259 +
.../content/quickstart/oracle-tutorial.md.txt | 205 +
.../content/quickstart/polardbx-tutorial.md.txt | 261 +
.../content/quickstart/sqlserver-tutorial.md.txt | 203 +
.../content/quickstart/tidb-tutorial.md.txt | 233 +
.../build-real-time-data-lake-tutorial-zh.md.txt" | 296 +
.../datastream-api-package-guidance-zh.md.txt" | 247 +
.../index.md.txt" | 17 +
.../mongodb-tutorial-zh.md.txt" | 216 +
.../mysql-doris-pipeline-tutorial-zh.md.txt" | 322 +
.../mysql-postgres-tutorial-zh.md.txt" | 317 +
.../mysql-starrocks-pipeline-tutorial-zh.md.txt" | 287 +
.../oceanbase-tutorial-zh.md.txt" | 256 +
.../oracle-tutorial-zh.md.txt" | 204 +
.../polardbx-tutorial-zh.md.txt" | 232 +
.../sqlserver-tutorial-zh.md.txt" | 203 +
.../tidb-tutorial-zh.md.txt" | 234 +
release-3.0/_sources/index.md.txt | 19 +
release-3.0/_static/basic.css | 904 ++
release-3.0/_static/button.js | 6 +
release-3.0/_static/css/badge_only.css | 1 +
.../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes
.../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes
.../_static/css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes
.../_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
.../_static/css/fonts/fontawesome-webfont.svg | 2671 +++++
.../_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
.../_static/css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
.../_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes
.../_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes
release-3.0/_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes
release-3.0/_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes
.../_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes
.../_static/css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes
release-3.0/_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes
release-3.0/_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes
release-3.0/_static/css/theme.css | 4 +
release-3.0/_static/doctools.js | 323 +
release-3.0/_static/documentation_options.js | 12 +
release-3.0/_static/favicon.png | Bin 0 -> 1150 bytes
release-3.0/_static/fig/architecture.png | Bin 0 -> 450145 bytes
.../fig/contribute_guidance/check_branch.png | Bin 0 -> 137158 bytes
.../_static/fig/contribute_guidance/fork.png | Bin 0 -> 67259 bytes
.../_static/fig/contribute_guidance/open_pr.png | Bin 0 -> 308245 bytes
release-3.0/_static/fig/design.png | Bin 0 -> 1859825 bytes
release-3.0/_static/fig/favicon.png | Bin 0 -> 1150 bytes
release-3.0/_static/fig/flinkcdc.png | Bin 0 -> 554685 bytes
.../mysql-doris-tutorial/doris-create-table.png | Bin 0 -> 2283147 bytes
.../_static/fig/mysql-doris-tutorial/doris-ui.png | Bin 0 -> 3923688 bytes
.../mysql-doris-tutorial/doris_display_data.png | Bin 0 -> 2322957 bytes
.../mysql-doris-tutorial/doris_display_result.png | Bin 0 -> 2228734 bytes
.../_static/fig/mysql-doris-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../fig/mysql-doris-tutorial/mysql-to-doris.png | Bin 0 -> 2583556 bytes
.../flink-cdc-streaming-etl.png | Bin 0 -> 149540 bytes
.../mysql-postgress-tutorial/flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/mysql-postgress-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../mysql-postgress-tutorial/kafka-gmv-changes.gif | Bin 0 -> 303629 bytes
.../kibana-create-index-pattern.png | Bin 0 -> 334857 bytes
.../kibana-detailed-orders-changes.gif | Bin 0 -> 347918 bytes
.../kibana-detailed-orders.png | Bin 0 -> 366157 bytes
.../fig/mysql-starrocks-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../mysql-to-starrocks.png | Bin 0 -> 2502781 bytes
.../starrocks-display-data.png | Bin 0 -> 829756 bytes
.../starrocks-display-result.png | Bin 0 -> 1098472 bytes
.../data_in_iceberg.png | Bin 0 -> 87737 bytes
.../files-in-iceberg.png | Bin 0 -> 75874 bytes
.../final-data-in-iceberg.png | Bin 0 -> 49956 bytes
.../flink-cdc-iceberg-running-job.png | Bin 0 -> 463802 bytes
.../flink-sql-client.png | Bin 0 -> 185086 bytes
.../fig/real-time-data-lake-tutorial/flink-ui.png | Bin 0 -> 186753 bytes
.../real-time-data-lake-tutorial.png | Bin 0 -> 102154 bytes
release-3.0/_static/file.png | Bin 0 -> 286 bytes
release-3.0/_static/fonts/Inconsolata-Bold.ttf | Bin 0 -> 109948 bytes
release-3.0/_static/fonts/Inconsolata-Regular.ttf | Bin 0 -> 96964 bytes
release-3.0/_static/fonts/Inconsolata.ttf | Bin 0 -> 63184 bytes
release-3.0/_static/fonts/Lato-Bold.ttf | Bin 0 -> 656544 bytes
release-3.0/_static/fonts/Lato-Regular.ttf | Bin 0 -> 656568 bytes
release-3.0/_static/fonts/Lato/lato-bold.eot | Bin 0 -> 256056 bytes
release-3.0/_static/fonts/Lato/lato-bold.ttf | Bin 0 -> 600856 bytes
release-3.0/_static/fonts/Lato/lato-bold.woff | Bin 0 -> 309728 bytes
release-3.0/_static/fonts/Lato/lato-bold.woff2 | Bin 0 -> 184912 bytes
release-3.0/_static/fonts/Lato/lato-bolditalic.eot | Bin 0 -> 266158 bytes
release-3.0/_static/fonts/Lato/lato-bolditalic.ttf | Bin 0 -> 622572 bytes
.../_static/fonts/Lato/lato-bolditalic.woff | Bin 0 -> 323344 bytes
.../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 0 -> 193308 bytes
release-3.0/_static/fonts/Lato/lato-italic.eot | Bin 0 -> 268604 bytes
release-3.0/_static/fonts/Lato/lato-italic.ttf | Bin 0 -> 639388 bytes
release-3.0/_static/fonts/Lato/lato-italic.woff | Bin 0 -> 328412 bytes
release-3.0/_static/fonts/Lato/lato-italic.woff2 | Bin 0 -> 195704 bytes
release-3.0/_static/fonts/Lato/lato-regular.eot | Bin 0 -> 253461 bytes
release-3.0/_static/fonts/Lato/lato-regular.ttf | Bin 0 -> 607720 bytes
release-3.0/_static/fonts/Lato/lato-regular.woff | Bin 0 -> 309192 bytes
release-3.0/_static/fonts/Lato/lato-regular.woff2 | Bin 0 -> 182708 bytes
release-3.0/_static/fonts/RobotoSlab-Bold.ttf | Bin 0 -> 170616 bytes
release-3.0/_static/fonts/RobotoSlab-Regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 0 -> 79520 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 0 -> 170616 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 0 -> 87624 bytes
.../fonts/RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 0 -> 67312 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.eot | Bin 0 -> 78331 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.ttf | Bin 0 -> 169064 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff | Bin 0 -> 86288 bytes
.../fonts/RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 0 -> 66444 bytes
release-3.0/_static/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
release-3.0/_static/fonts/fontawesome-webfont.svg | 2671 +++++
release-3.0/_static/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
release-3.0/_static/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../_static/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
release-3.0/_static/jquery-3.5.1.js | 10872 +++++++++++++++++++
release-3.0/_static/jquery.js | 2 +
release-3.0/_static/js/badge_only.js | 1 +
release-3.0/_static/js/html5shiv-printshiv.min.js | 4 +
release-3.0/_static/js/html5shiv.min.js | 4 +
release-3.0/_static/js/modernizr.min.js | 4 +
release-3.0/_static/js/theme.js | 1 +
release-3.0/_static/language_data.js | 297 +
release-3.0/_static/minus.png | Bin 0 -> 90 bytes
release-3.0/_static/plus.png | Bin 0 -> 90 bytes
release-3.0/_static/pygments.css | 74 +
release-3.0/_static/searchtools.js | 516 +
release-3.0/_static/theme_overrides.css | 41 +
release-3.0/_static/underscore-1.13.1.js | 2042 ++++
release-3.0/_static/underscore.js | 6 +
release-3.0/content/connectors/db2-cdc.html | 719 ++
release-3.0/content/connectors/index.html | 466 +
.../content/connectors/mongodb-cdc(ZH).html | 993 ++
release-3.0/content/connectors/mongodb-cdc.html | 1003 ++
release-3.0/content/connectors/mysql-cdc(ZH).html | 1402 +++
release-3.0/content/connectors/mysql-cdc.html | 1415 +++
.../content/connectors/oceanbase-cdc(ZH).html | 1105 ++
release-3.0/content/connectors/oceanbase-cdc.html | 1096 ++
release-3.0/content/connectors/oracle-cdc.html | 1026 ++
release-3.0/content/connectors/postgres-cdc.html | 948 ++
release-3.0/content/connectors/sqlserver-cdc.html | 822 ++
release-3.0/content/connectors/tidb-cdc.html | 814 ++
release-3.0/content/connectors/vitess-cdc.html | 649 ++
release-3.0/content/downloads.html | 315 +
release-3.0/content/formats/changelog-json.html | 328 +
release-3.0/content/formats/index.html | 325 +
release-3.0/content/githublink.html | 312 +
release-3.0/content/overview/cdc-connectors.html | 826 ++
release-3.0/content/overview/cdc-pipeline.html | 436 +
release-3.0/content/overview/index.html | 339 +
.../content/pipelines/doris-pipeline(ZH).html | 589 +
release-3.0/content/pipelines/doris-pipeline.html | 590 +
release-3.0/content/pipelines/index.html | 372 +
.../content/pipelines/mysql-pipeline(ZH).html | 863 ++
release-3.0/content/pipelines/mysql-pipeline.html | 871 ++
.../content/pipelines/starrocks-pipeline(ZH).html | 641 ++
.../content/pipelines/starrocks-pipeline.html | 651 ++
.../build-real-time-data-lake-tutorial.html | 636 ++
.../datastream-api-package-guidance.html | 579 +
release-3.0/content/quickstart/db2-tutorial.html | 453 +
release-3.0/content/quickstart/index.html | 383 +
.../content/quickstart/mongodb-tutorial.html | 546 +
.../quickstart/mysql-doris-pipeline-tutorial.html | 656 ++
.../quickstart/mysql-postgres-tutorial.html | 680 ++
.../mysql-starrocks-pipeline-tutorial.html | 620 ++
.../content/quickstart/oceanbase-tutorial.html | 585 +
.../content/quickstart/oracle-tutorial.html | 519 +
.../content/quickstart/polardbx-tutorial.html | 615 ++
.../content/quickstart/sqlserver-tutorial.html | 518 +
release-3.0/content/quickstart/tidb-tutorial.html | 547 +
.../build-real-time-data-lake-tutorial-zh.html" | 632 ++
.../datastream-api-package-guidance-zh.html" | 578 +
.../index.html" | 382 +
.../mongodb-tutorial-zh.html" | 545 +
.../mysql-doris-pipeline-tutorial-zh.html" | 653 ++
.../mysql-postgres-tutorial-zh.html" | 676 ++
.../mysql-starrocks-pipeline-tutorial-zh.html" | 617 ++
.../oceanbase-tutorial-zh.html" | 582 +
.../oracle-tutorial-zh.html" | 517 +
.../polardbx-tutorial-zh.html" | 566 +
.../sqlserver-tutorial-zh.html" | 517 +
.../tidb-tutorial-zh.html" | 546 +
release-3.0/genindex.html | 310 +
release-3.0/index.html | 388 +
release-3.0/objects.inv | Bin 0 -> 1473 bytes
release-3.0/search.html | 321 +
release-3.0/searchindex.js | 1 +
1711 files changed, 404393 insertions(+)
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 000000000..e69de29bb
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 000000000..8f32cb027
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,11 @@
+Flink CDC Site
+Copyright 2024 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This project bundles the following dependencies under the MIT license.
+See bundled license files for details.
+
+- termynal (https://github.com/ines/termynal)
+ -> in lib directory
diff --git a/assets/cdc-flow.png b/assets/cdc-flow.png
new file mode 100644
index 000000000..bd4d2d02f
Binary files /dev/null and b/assets/cdc-flow.png differ
diff --git a/assets/dingtalk.png b/assets/dingtalk.png
new file mode 100644
index 000000000..4fc564e21
Binary files /dev/null and b/assets/dingtalk.png differ
diff --git a/assets/favicon.png b/assets/favicon.png
new file mode 100644
index 000000000..34a467a32
Binary files /dev/null and b/assets/favicon.png differ
diff --git a/assets/squirrel.jpg b/assets/squirrel.jpg
new file mode 100644
index 000000000..fc4595a5b
Binary files /dev/null and b/assets/squirrel.jpg differ
diff --git a/index.html b/index.html
new file mode 100644
index 000000000..6fb3b3c31
--- /dev/null
+++ b/index.html
@@ -0,0 +1,252 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <!-- Required meta tags -->
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+ <!-- Bootstrap CSS -->
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css">
+
+ <!-- Termynal CSS -->
+ <link rel="stylesheet" href="lib/termynal.css">
+
+ <!-- Favicon of website -->
+ <link rel="icon" type="image/x-icon" href="assets/favicon.png">
+
+ <title>CDC Connectors for Apache Flink®</title>
+ </head>
+ <body>
+ <nav class="navbar navbar-expand-lg navbar-dark px-4 py-2" style="background: #336699">
+ <a class="navbar-brand" href="#">CDC Connectors for Apache Flink®</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent" aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse justify-content-end" id="navbarContent">
+ <ul class="navbar-nav">
+ <li class="nav-item active">
+ <a class="nav-link" href="https://github.com/ververica/flink-cdc-connectors/releases/">Download</a>
+ </li>
+ <li class="nav-item active">
+ <a class="nav-link" href="https://ververica.github.io/flink-cdc-connectors/master/">Documentation</a>
+ </li>
+ <li class="nav-item active">
+ <a class="nav-link" href="https://github.com/ververica/flink-cdc-connectors/">Source</a>
+ </li>
+ </ul>
+ </div>
+ </nav>
+
+ <section class="hero-banner position-relative">
+ <div class="bg"></div>
+ <div class="container position-relative">
+ <div class="container py-xs-2 py-sm-3 py-md-4 py-xxl-5">
+ <div class="row py-5">
+ <div class="col-xl-6 col-lg-8">
+ <h1 class="display-5 fw-bold lh-1 mb-3" style="color: #336699;">CDC Connectors for Apache Flink®</h1>
+ <h3 style="color: #336699;">Embrace Database Changes</h3>
+ <p><a class="github-button" href="https://github.com/ververica/flink-cdc-connectors" data-icon="octicon-star" data-size="large" data-show-count="true" aria-label="Star ververica/flink-cdc-connectors on GitHub">Star</a></p>
+ <p class="lead">This project provides a set of source connectors for Apache Flink® directly ingesting changes coming from different databases using Change Data Capture(CDC).</p>
+ <div class="d-grid gap-2 d-md-flex justify-content-md-start">
+ <a role="button" class="btn btn-primary btn-lg px-4 me-md-2" href="https://github.com/ververica/flink-cdc-connectors/releases/">Download</a>
+ <a role="button" class="btn btn-secondary btn-lg px-4" href="https://ververica.github.io/flink-cdc-connectors/master/">Documentation</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <section class="bg-white">
+ <div class="container py-4">
+ <div class="row py-3">
+ <div class="col-12 text-center"><h1>Key Features</h1></div>
+ </div>
+ <div class="row py-4">
+ <div class="col-md-12 col-lg-4 px-4">
+ <a class="no-decoration-anchor" href="https://ververica.github.io/flink-cdc-connectors/master/content/overview/cdc-connectors.html#features">
+ <div class="text-center text-primary">
+ <h1><i class="bi bi-calculator"></i></h1>
+ <h4>Exactly-once Semantics</h4>
+ </div>
+ </a>
+ <div class="py-3">CDC Connectors for Apache Flink® supports reading database snapshots and continues to read binlogs with exactly-once processing, even after failures.</div>
+ </div>
+ <div class="col-md-12 col-lg-4 px-4">
+ <a class="no-decoration-anchor" href="https://ververica.github.io/flink-cdc-connectors/master/content/overview/cdc-connectors.html#usage-for-table-sql-api">
+ <div class="text-center text-primary">
+ <h1><i class="bi bi-hdd-network"></i></h1>
+ <h4>Table/SQL API</h4>
+ </div>
+ </a>
+ <div class="py-3">Users can use SQL DDL to create a CDC source to monitor changes on a single table.</div>
+ </div>
+ <div class="col-md-12 col-lg-4 px-4">
+ <a class="no-decoration-anchor" href="https://ververica.github.io/flink-cdc-connectors/master/content/overview/cdc-connectors.html#usage-for-datastream-api">
+ <div class="text-center text-primary">
+ <h1><i class="bi bi-water"></i></h1>
+ <h4>DataStream API</h4>
+ </div>
+ </a>
+ <div class="py-3">Users can consume changes on multiple databases and tables in a single job without Debezium and Apache Kafka® deployed.</div>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <section class="bg-dark text-light">
+ <div class="container py-4">
+ <div class="row py-4">
+ <div class="col-md-12 col-lg-5 mx-auto py-4 align-self-center">
+ <div class="pb-4 text-center"><h2>Getting Started</h2></div>
+ <div class="py-4" style="font-size: 20px">CDC Connectors for Apache Flink® provides a series of quick start demos without any dependencies or java code, only a Linux or MacOS computer with Docker installed is enough. With these demos, you can quickly feel the power and convenience of Apache Flink® CDC.</div>
+ <a role="button" class="btn btn-outline-primary btn-lg px-4" href="https://ververica.github.io/flink-cdc-connectors/master/content/quickstart/index.html">Learn More</a>
+ </div>
+ <div class="col-md-12 col-lg-6 mx-auto">
+ <div class="termynal" data-termynal data-ty-typeDelay="20" data-ty-lineDelay="20">
+ <span data-ty="input" data-ty-prompt="Flink SQL>">-- creates a mysql cdc table source</span>
+ <span data-ty="input" data-ty-prompt="Flink SQL>">CREATE TABLE mysql_binlog (</span>
+ <span data-ty="input" data-ty-prompt=""> id INT NOT NULL,</span>
+ <span data-ty="input" data-ty-prompt=""> name STRING,</span>
+ <span data-ty="input" data-ty-prompt=""> description STRING,</span>
+ <span data-ty="input" data-ty-prompt=""> weight DECIMAL(10,3),</span>
+ <span data-ty="input" data-ty-prompt=""> PRIMARY KEY(id) NOT ENFORCED</span>
+ <span data-ty="input" data-ty-prompt="">) WITH (</span>
+ <span data-ty="input" data-ty-prompt=""> 'connector' = 'mysql-cdc',</span>
+ <span data-ty="input" data-ty-prompt=""> 'hostname' = 'localhost',</span>
+ <span data-ty="input" data-ty-prompt=""> 'port' = '3306',</span>
+ <span data-ty="input" data-ty-prompt=""> 'username' = 'flinkuser',</span>
+ <span data-ty="input" data-ty-prompt=""> 'password' = 'flinkpw',</span>
+ <span data-ty="input" data-ty-prompt=""> 'database-name' = 'inventory',</span>
+ <span data-ty="input" data-ty-prompt=""> 'table-name' = 'products'</span>
+ <span data-ty="input" data-ty-prompt="">);</span>
+ <span data-ty="input" data-ty-prompt=""></span>
+ <span data-ty="input" data-ty-prompt="Flink SQL>">-- read snapshot and binlog data from mysql</span>
+ <span data-ty="input" data-ty-prompt="Flink SQL>">-- and do some transformation</span>
+ <span data-ty="input" data-ty-prompt="Flink SQL>">-- and show on the client</span>
+ <span data-ty="input" data-ty-prompt="Flink SQL>">SELECT id, UPPER(name), description, weight FROM mysql_binlog;</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <section class="bg-white">
+ <div class="container py-4">
+ <div class="row py-4">
+ <div class="col-md-12 col-lg-7 text-center mx-auto" style="color: #2a3a4a;">
+ <div class="pb-4"><h2>Connect to Your Favorite Database</h2></div>
+ <div style="font-size: 20px;">CDC Connectors for Apache Flink® supports ingesting snapshot data and real time changes from databases to Flink® and then transform and sink to various downstream systems.</div>
+ </div>
+ <div class="col-md-12 col-lg-10 text-center mx-auto"><img src="assets/cdc-flow.png" width="100%" /></div>
+ </div>
+ </div>
+ </section>
+
+ <section style="background-color: #ddeeff;">
+ <div class="container py-4">
+ <div class="row py-3">
+ <div class="col-12 text-center"><h2>Join the Community</h2></div>
+ </div>
+ <div class="row py-4 justify-content-center">
+ <div class="col-12 col-md-4 col-xl-3 px-4 align-self-center">
+ <img src="assets/dingtalk.png" width="100%" />
+ </div>
+ <div class="col-12 col-md-8 col-xl-6 p-3">
+ <a class="no-decoration-anchor" href="https://h5.dingtalk.com/circle/healthCheckin.html?dtaction=os&corpId=dinge369343b40eb68f87c231cb892228ad7&14ee9113-c3=cc3ed38a-82&cbdbhh=qwertyuiop">
+ <div class="card border-primary my-3">
+ <div class="card-body" style="background-color: #ddeeff">
+ <div class="row">
+ <div class="col-2 align-self-center text-center text-primary">
+ <h1><i class="bi bi-envelope-paper"></i></h1>
+ </div>
+ <div class="col-10">
+ <h4 class="card-title text-primary">DingTalk Group</h4>
+ <p class="card-text">Discussion and help from your fellow users.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </a>
+ <a class="no-decoration-anchor" href="https://github.com/ververica/flink-cdc-connectors">
+ <div class="card border-primary my-3">
+ <div class="card-body" style="background-color: #ddeeff">
+ <div class="row">
+ <div class="col-2 align-self-center text-center text-primary">
+ <h1><i class="bi bi-github"></i></h1>
+ </div>
+ <div class="col-10">
+ <h4 class="card-title text-primary">Github</h4>
+ <p class="card-text">Development takes place here!</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </a>
+ <a class="no-decoration-anchor" href="https://github.com/ververica/flink-cdc-connectors/issues">
+ <div class="card border-primary my-3">
+ <div class="card-body" style="background-color: #ddeeff">
+ <div class="row">
+ <div class="col-2 align-self-center text-center text-primary">
+ <h1><i class="bi bi-clipboard-check"></i></h1>
+ </div>
+ <div class="col-10">
+ <h4 class="card-title text-primary">Issue Tracking</h4>
+ <p class="card-text">Report here if you find any issue.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <!-- Copyright -->
+<div class="text-center p-3 bg-dark text-light">Apache Flink, Flink®, Apache®, the squirrel logo, and the
+ Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. Copyright
+ © 2023 Ververica Inc., Licensed under the <a href="https://www.apache.org/licenses/">Apache License, Version
+ 2.0</a>.
+</div>
+ <!-- Copyright -->
+
+ <!-- Bootstrap JS -->
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
+
+ <!-- Termynal JS -->
+ <script src="lib/termynal.js" data-termynal-container=".termynal"></script>
+
+ <!-- Github Buttons JS -->
+ <script async defer src="https://buttons.github.io/buttons.js"></script>
+ </body>
+
+ <style>
+ .hero-banner {
+ height: 475px;
+ }
+
+ .hero-banner > .bg {
+ background: no-repeat right center;
+ background-image: linear-gradient(to left, rgba(219, 219, 221, 0.7) 0%, rgba(219, 219, 221, 0.7) 20%, rgba(219, 219, 221, 0.7) 40%), url(assets/squirrel.jpg);
+ background-color: #dbdbdd;
+ height: 475px;
+ top: 0;
+ position: absolute;
+ right: 0;
+ width: 100%;
+ }
+
+ @media (min-width: 992px) {
+ .hero-banner > .bg {
+ background-image: linear-gradient(to left, rgba(219, 219, 221, 0) 0%, rgba(219, 219, 221, 0) 20%, rgba(219, 219, 221, 0.5) 40%), url(assets/squirrel.jpg);
+ }
+ }
+
+ .no-decoration-anchor {
+ text-decoration: inherit;
+ color: inherit;
+ }
+ </style>
+</html>
diff --git a/lib/termynal.css b/lib/termynal.css
new file mode 100644
index 000000000..f7fbdd14b
--- /dev/null
+++ b/lib/termynal.css
@@ -0,0 +1,101 @@
+/**
+ * termynal.js
+ *
+ * @author Ines Montani <in...@ines.io>
+ * @version 0.0.1
+ * @license MIT
+ */
+
+ :root {
+ --color-bg: #252a33;
+ --color-text: #eee;
+ --color-text-subtle: #a2a2a2;
+}
+
+[data-termynal] {
+ width: 750px;
+ max-width: 100%;
+ background: var(--color-bg);
+ color: var(--color-text);
+ font-size: 14px;
+ font-family: 'Fira Mono', Consolas, Menlo, Monaco, 'Courier New', Courier, monospace;
+ border-radius: 4px;
+ padding: 75px 45px 35px;
+ position: relative;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+[data-termynal]:before {
+ content: '';
+ position: absolute;
+ top: 15px;
+ left: 15px;
+ display: inline-block;
+ width: 15px;
+ height: 15px;
+ border-radius: 50%;
+ /* A little hack to display the window buttons in one pseudo element. */
+ background: #d9515d;
+ -webkit-box-shadow: 25px 0 0 #f4c025, 50px 0 0 #3ec930;
+ box-shadow: 25px 0 0 #f4c025, 50px 0 0 #3ec930;
+}
+
+[data-termynal]:after {
+ content: 'Flink SQL Client';
+ position: absolute;
+ color: var(--color-text-subtle);
+ top: 5px;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+
+[data-ty] {
+ display: block;
+ line-height: 1.5;
+}
+
+[data-ty]:before {
+ /* Set up defaults and ensure empty lines are displayed. */
+ content: '';
+ display: inline-block;
+ vertical-align: middle;
+}
+
+[data-ty="input"]:before,
+[data-ty-prompt]:before {
+ margin-right: 0.75em;
+ color: var(--color-text-subtle);
+}
+
+[data-ty="input"]:before {
+ content: '$';
+}
+
+[data-ty][data-ty-prompt]:before {
+ content: attr(data-ty-prompt);
+}
+
+[data-ty-cursor]:after {
+ content: attr(data-ty-cursor);
+ font-family: monospace;
+ margin-left: 0.5em;
+ -webkit-animation: blink 1s infinite;
+ animation: blink 1s infinite;
+}
+
+
+/* Cursor animation */
+
+@-webkit-keyframes blink {
+ 50% {
+ opacity: 0;
+ }
+}
+
+@keyframes blink {
+ 50% {
+ opacity: 0;
+ }
+}
diff --git a/lib/termynal.js b/lib/termynal.js
new file mode 100644
index 000000000..7d1649b36
--- /dev/null
+++ b/lib/termynal.js
@@ -0,0 +1,197 @@
+/**
+ * termynal.js
+ * A lightweight, modern and extensible animated terminal window, using
+ * async/await.
+ *
+ * @author Ines Montani <in...@ines.io>
+ * @version 0.0.1
+ * @license MIT
+ */
+
+ 'use strict';
+
+ /** Generate a terminal widget. */
+ class Termynal {
+ /**
+ * Construct the widget's settings.
+ * @param {(string|Node)=} container - Query selector or container element.
+ * @param {Object=} options - Custom settings.
+ * @param {string} options.prefix - Prefix to use for data attributes.
+ * @param {number} options.startDelay - Delay before animation, in ms.
+ * @param {number} options.typeDelay - Delay between each typed character, in ms.
+ * @param {number} options.lineDelay - Delay between each line, in ms.
+ * @param {number} options.progressLength - Number of characters displayed as progress bar.
+ * @param {string} options.progressChar – Character to use for progress bar, defaults to █.
+ * @param {number} options.progressPercent - Max percent of progress.
+ * @param {string} options.cursor – Character to use for cursor, defaults to ▋.
+ * @param {Object[]} lineData - Dynamically loaded line data objects.
+ * @param {boolean} options.noInit - Don't initialise the animation.
+ */
+ constructor(container = '#termynal', options = {}) {
+ this.container = (typeof container === 'string') ? document.querySelector(container) : container;
+ this.pfx = `data-${options.prefix || 'ty'}`;
+ this.startDelay = options.startDelay
+ || parseFloat(this.container.getAttribute(`${this.pfx}-startDelay`)) || 600;
+ this.typeDelay = options.typeDelay
+ || parseFloat(this.container.getAttribute(`${this.pfx}-typeDelay`)) || 90;
+ this.lineDelay = options.lineDelay
+ || parseFloat(this.container.getAttribute(`${this.pfx}-lineDelay`)) || 1500;
+ this.progressLength = options.progressLength
+ || parseFloat(this.container.getAttribute(`${this.pfx}-progressLength`)) || 40;
+ this.progressChar = options.progressChar
+ || this.container.getAttribute(`${this.pfx}-progressChar`) || '█';
+ this.progressPercent = options.progressPercent
+ || parseFloat(this.container.getAttribute(`${this.pfx}-progressPercent`)) || 100;
+ this.cursor = options.cursor
+ || this.container.getAttribute(`${this.pfx}-cursor`) || '▋';
+ this.lineData = this.lineDataToElements(options.lineData || []);
+ if (!options.noInit) this.init()
+ }
+
+ /**
+ * Initialise the widget, get lines, clear container and start animation.
+ */
+ init() {
+ // Appends dynamically loaded lines to existing line elements.
+ this.lines = [...this.container.querySelectorAll(`[${this.pfx}]`)].concat(this.lineData);
+
+ /**
+ * Calculates width and height of Termynal container.
+ * If container is empty and lines are dynamically loaded, defaults to browser `auto` or CSS.
+ */
+ const containerStyle = getComputedStyle(this.container);
+ this.container.style.width = containerStyle.width !== '0px' ?
+ containerStyle.width : undefined;
+ this.container.style.minHeight = containerStyle.height !== '0px' ?
+ containerStyle.height : undefined;
+
+ this.container.setAttribute('data-termynal', '');
+ this.container.innerHTML = '';
+ this.start();
+ }
+
+ /**
+ * Start the animation and rener the lines depending on their data attributes.
+ */
+ async start() {
+ await this._wait(this.startDelay);
+
+ for (let line of this.lines) {
+ const type = line.getAttribute(this.pfx);
+ const delay = line.getAttribute(`${this.pfx}-delay`) || this.lineDelay;
+
+ if (type == 'input') {
+ line.setAttribute(`${this.pfx}-cursor`, this.cursor);
+ await this.type(line);
+ await this._wait(delay);
+ }
+
+ else if (type == 'progress') {
+ await this.progress(line);
+ await this._wait(delay);
+ }
+
+ else {
+ this.container.appendChild(line);
+ await this._wait(delay);
+ }
+
+ line.removeAttribute(`${this.pfx}-cursor`);
+ }
+ }
+
+ /**
+ * Animate a typed line.
+ * @param {Node} line - The line element to render.
+ */
+ async type(line) {
+ const chars = [...line.textContent];
+ const delay = line.getAttribute(`${this.pfx}-typeDelay`) || this.typeDelay;
+ line.textContent = '';
+ this.container.appendChild(line);
+
+ for (let char of chars) {
+ await this._wait(delay);
+ line.textContent += char;
+ }
+ }
+
+ /**
+ * Animate a progress bar.
+ * @param {Node} line - The line element to render.
+ */
+ async progress(line) {
+ const progressLength = line.getAttribute(`${this.pfx}-progressLength`)
+ || this.progressLength;
+ const progressChar = line.getAttribute(`${this.pfx}-progressChar`)
+ || this.progressChar;
+ const chars = progressChar.repeat(progressLength);
+ const progressPercent = line.getAttribute(`${this.pfx}-progressPercent`)
+ || this.progressPercent;
+ line.textContent = '';
+ this.container.appendChild(line);
+
+ for (let i = 1; i < chars.length + 1; i++) {
+ await this._wait(this.typeDelay);
+ const percent = Math.round(i / chars.length * 100);
+ line.textContent = `${chars.slice(0, i)} ${percent}%`;
+ if (percent>progressPercent) {
+ break;
+ }
+ }
+ }
+
+ /**
+ * Helper function for animation delays, called with `await`.
+ * @param {number} time - Timeout, in ms.
+ */
+ _wait(time) {
+ return new Promise(resolve => setTimeout(resolve, time));
+ }
+
+ /**
+ * Converts line data objects into line elements.
+ *
+ * @param {Object[]} lineData - Dynamically loaded lines.
+ * @param {Object} line - Line data object.
+ * @returns {Element[]} - Array of line elements.
+ */
+ lineDataToElements(lineData) {
+ return lineData.map(line => {
+ let div = document.createElement('div');
+ div.innerHTML = `<span ${this._attributes(line)}>${line.value || ''}</span>`;
+
+ return div.firstElementChild;
+ });
+ }
+
+ /**
+ * Helper function for generating attributes string.
+ *
+ * @param {Object} line - Line data object.
+ * @returns {string} - String of attributes.
+ */
+ _attributes(line) {
+ let attrs = '';
+ for (let prop in line) {
+ attrs += this.pfx;
+
+ if (prop === 'type') {
+ attrs += `="${line[prop]}" `
+ } else if (prop !== 'value') {
+ attrs += `-${prop}="${line[prop]}" `
+ }
+ }
+
+ return attrs;
+ }
+ }
+
+ /**
+ * HTML API: If current script has container(s) specified, initialise Termynal.
+ */
+ if (document.currentScript.hasAttribute('data-termynal-container')) {
+ const containers = document.currentScript.getAttribute('data-termynal-container');
+ containers.split('|')
+ .forEach(container => new Termynal(container))
+ }
diff --git a/licenses/LICENSE.termynal b/licenses/LICENSE.termynal
new file mode 100644
index 000000000..1c32b5e1b
--- /dev/null
+++ b/licenses/LICENSE.termynal
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (C) 2017 Ines Montani
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/master/.buildinfo b/master/.buildinfo
new file mode 100644
index 000000000..79f8b7462
--- /dev/null
+++ b/master/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 9bda4a4a56733bc3066f57a11134d293
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/master/.doctrees/README.doctree b/master/.doctrees/README.doctree
new file mode 100644
index 000000000..2e48a1be1
Binary files /dev/null and b/master/.doctrees/README.doctree differ
diff --git a/master/.doctrees/content/connectors/db2-cdc.doctree b/master/.doctrees/content/connectors/db2-cdc.doctree
new file mode 100644
index 000000000..7f45b84bc
Binary files /dev/null and b/master/.doctrees/content/connectors/db2-cdc.doctree differ
diff --git a/master/.doctrees/content/connectors/index.doctree b/master/.doctrees/content/connectors/index.doctree
new file mode 100644
index 000000000..e8af40921
Binary files /dev/null and b/master/.doctrees/content/connectors/index.doctree differ
diff --git a/master/.doctrees/content/connectors/mongodb-cdc(ZH).doctree b/master/.doctrees/content/connectors/mongodb-cdc(ZH).doctree
new file mode 100644
index 000000000..ffc2b4537
Binary files /dev/null and b/master/.doctrees/content/connectors/mongodb-cdc(ZH).doctree differ
diff --git a/master/.doctrees/content/connectors/mongodb-cdc.doctree b/master/.doctrees/content/connectors/mongodb-cdc.doctree
new file mode 100644
index 000000000..469371e55
Binary files /dev/null and b/master/.doctrees/content/connectors/mongodb-cdc.doctree differ
diff --git a/master/.doctrees/content/connectors/mysql-cdc(ZH).doctree b/master/.doctrees/content/connectors/mysql-cdc(ZH).doctree
new file mode 100644
index 000000000..279965803
Binary files /dev/null and b/master/.doctrees/content/connectors/mysql-cdc(ZH).doctree differ
diff --git a/master/.doctrees/content/connectors/mysql-cdc.doctree b/master/.doctrees/content/connectors/mysql-cdc.doctree
new file mode 100644
index 000000000..33f1ebbd5
Binary files /dev/null and b/master/.doctrees/content/connectors/mysql-cdc.doctree differ
diff --git a/master/.doctrees/content/connectors/oceanbase-cdc(ZH).doctree b/master/.doctrees/content/connectors/oceanbase-cdc(ZH).doctree
new file mode 100644
index 000000000..795cbdba0
Binary files /dev/null and b/master/.doctrees/content/connectors/oceanbase-cdc(ZH).doctree differ
diff --git a/master/.doctrees/content/connectors/oceanbase-cdc.doctree b/master/.doctrees/content/connectors/oceanbase-cdc.doctree
new file mode 100644
index 000000000..18e78bb2e
Binary files /dev/null and b/master/.doctrees/content/connectors/oceanbase-cdc.doctree differ
diff --git a/master/.doctrees/content/connectors/oracle-cdc.doctree b/master/.doctrees/content/connectors/oracle-cdc.doctree
new file mode 100644
index 000000000..9f39ba304
Binary files /dev/null and b/master/.doctrees/content/connectors/oracle-cdc.doctree differ
diff --git a/master/.doctrees/content/connectors/postgres-cdc.doctree b/master/.doctrees/content/connectors/postgres-cdc.doctree
new file mode 100644
index 000000000..f69f2d256
Binary files /dev/null and b/master/.doctrees/content/connectors/postgres-cdc.doctree differ
diff --git a/master/.doctrees/content/connectors/sqlserver-cdc.doctree b/master/.doctrees/content/connectors/sqlserver-cdc.doctree
new file mode 100644
index 000000000..8440ff45f
Binary files /dev/null and b/master/.doctrees/content/connectors/sqlserver-cdc.doctree differ
diff --git a/master/.doctrees/content/connectors/tidb-cdc.doctree b/master/.doctrees/content/connectors/tidb-cdc.doctree
new file mode 100644
index 000000000..c93b410ba
Binary files /dev/null and b/master/.doctrees/content/connectors/tidb-cdc.doctree differ
diff --git a/master/.doctrees/content/connectors/vitess-cdc.doctree b/master/.doctrees/content/connectors/vitess-cdc.doctree
new file mode 100644
index 000000000..39892bf5d
Binary files /dev/null and b/master/.doctrees/content/connectors/vitess-cdc.doctree differ
diff --git a/master/.doctrees/content/downloads.doctree b/master/.doctrees/content/downloads.doctree
new file mode 100644
index 000000000..9cd87d589
Binary files /dev/null and b/master/.doctrees/content/downloads.doctree differ
diff --git a/master/.doctrees/content/formats/changelog-json.doctree b/master/.doctrees/content/formats/changelog-json.doctree
new file mode 100644
index 000000000..cb4f74948
Binary files /dev/null and b/master/.doctrees/content/formats/changelog-json.doctree differ
diff --git a/master/.doctrees/content/formats/index.doctree b/master/.doctrees/content/formats/index.doctree
new file mode 100644
index 000000000..c669022b5
Binary files /dev/null and b/master/.doctrees/content/formats/index.doctree differ
diff --git a/master/.doctrees/content/githublink.doctree b/master/.doctrees/content/githublink.doctree
new file mode 100644
index 000000000..0dd67091f
Binary files /dev/null and b/master/.doctrees/content/githublink.doctree differ
diff --git a/master/.doctrees/content/overview/cdc-connectors.doctree b/master/.doctrees/content/overview/cdc-connectors.doctree
new file mode 100644
index 000000000..7e41bfd10
Binary files /dev/null and b/master/.doctrees/content/overview/cdc-connectors.doctree differ
diff --git a/master/.doctrees/content/overview/cdc-pipeline.doctree b/master/.doctrees/content/overview/cdc-pipeline.doctree
new file mode 100644
index 000000000..29f6ad288
Binary files /dev/null and b/master/.doctrees/content/overview/cdc-pipeline.doctree differ
diff --git a/master/.doctrees/content/overview/index.doctree b/master/.doctrees/content/overview/index.doctree
new file mode 100644
index 000000000..b01230874
Binary files /dev/null and b/master/.doctrees/content/overview/index.doctree differ
diff --git a/master/.doctrees/content/pipelines/doris-pipeline(ZH).doctree b/master/.doctrees/content/pipelines/doris-pipeline(ZH).doctree
new file mode 100644
index 000000000..8e49d6023
Binary files /dev/null and b/master/.doctrees/content/pipelines/doris-pipeline(ZH).doctree differ
diff --git a/master/.doctrees/content/pipelines/doris-pipeline.doctree b/master/.doctrees/content/pipelines/doris-pipeline.doctree
new file mode 100644
index 000000000..da37f99e7
Binary files /dev/null and b/master/.doctrees/content/pipelines/doris-pipeline.doctree differ
diff --git a/master/.doctrees/content/pipelines/index.doctree b/master/.doctrees/content/pipelines/index.doctree
new file mode 100644
index 000000000..4b14c487d
Binary files /dev/null and b/master/.doctrees/content/pipelines/index.doctree differ
diff --git a/master/.doctrees/content/pipelines/mysql-pipeline(ZH).doctree b/master/.doctrees/content/pipelines/mysql-pipeline(ZH).doctree
new file mode 100644
index 000000000..ebc992e3e
Binary files /dev/null and b/master/.doctrees/content/pipelines/mysql-pipeline(ZH).doctree differ
diff --git a/master/.doctrees/content/pipelines/mysql-pipeline.doctree b/master/.doctrees/content/pipelines/mysql-pipeline.doctree
new file mode 100644
index 000000000..5bef8fd10
Binary files /dev/null and b/master/.doctrees/content/pipelines/mysql-pipeline.doctree differ
diff --git a/master/.doctrees/content/pipelines/starrocks-pipeline(ZH).doctree b/master/.doctrees/content/pipelines/starrocks-pipeline(ZH).doctree
new file mode 100644
index 000000000..ce310aadf
Binary files /dev/null and b/master/.doctrees/content/pipelines/starrocks-pipeline(ZH).doctree differ
diff --git a/master/.doctrees/content/pipelines/starrocks-pipeline.doctree b/master/.doctrees/content/pipelines/starrocks-pipeline.doctree
new file mode 100644
index 000000000..dc4d5a67c
Binary files /dev/null and b/master/.doctrees/content/pipelines/starrocks-pipeline.doctree differ
diff --git a/master/.doctrees/content/quickstart/build-real-time-data-lake-tutorial.doctree b/master/.doctrees/content/quickstart/build-real-time-data-lake-tutorial.doctree
new file mode 100644
index 000000000..e1d89fcc5
Binary files /dev/null and b/master/.doctrees/content/quickstart/build-real-time-data-lake-tutorial.doctree differ
diff --git a/master/.doctrees/content/quickstart/datastream-api-package-guidance.doctree b/master/.doctrees/content/quickstart/datastream-api-package-guidance.doctree
new file mode 100644
index 000000000..70f3440bb
Binary files /dev/null and b/master/.doctrees/content/quickstart/datastream-api-package-guidance.doctree differ
diff --git a/master/.doctrees/content/quickstart/db2-tutorial.doctree b/master/.doctrees/content/quickstart/db2-tutorial.doctree
new file mode 100644
index 000000000..c6b74dbe6
Binary files /dev/null and b/master/.doctrees/content/quickstart/db2-tutorial.doctree differ
diff --git a/master/.doctrees/content/quickstart/index.doctree b/master/.doctrees/content/quickstart/index.doctree
new file mode 100644
index 000000000..c59cc738d
Binary files /dev/null and b/master/.doctrees/content/quickstart/index.doctree differ
diff --git a/master/.doctrees/content/quickstart/mongodb-tutorial.doctree b/master/.doctrees/content/quickstart/mongodb-tutorial.doctree
new file mode 100644
index 000000000..abaed018c
Binary files /dev/null and b/master/.doctrees/content/quickstart/mongodb-tutorial.doctree differ
diff --git a/master/.doctrees/content/quickstart/mysql-doris-pipeline-tutorial.doctree b/master/.doctrees/content/quickstart/mysql-doris-pipeline-tutorial.doctree
new file mode 100644
index 000000000..d8fd0bca0
Binary files /dev/null and b/master/.doctrees/content/quickstart/mysql-doris-pipeline-tutorial.doctree differ
diff --git a/master/.doctrees/content/quickstart/mysql-postgres-tutorial.doctree b/master/.doctrees/content/quickstart/mysql-postgres-tutorial.doctree
new file mode 100644
index 000000000..60fa3a2b2
Binary files /dev/null and b/master/.doctrees/content/quickstart/mysql-postgres-tutorial.doctree differ
diff --git a/master/.doctrees/content/quickstart/mysql-starrocks-pipeline-tutorial.doctree b/master/.doctrees/content/quickstart/mysql-starrocks-pipeline-tutorial.doctree
new file mode 100644
index 000000000..1bb7d70d4
Binary files /dev/null and b/master/.doctrees/content/quickstart/mysql-starrocks-pipeline-tutorial.doctree differ
diff --git a/master/.doctrees/content/quickstart/oceanbase-tutorial.doctree b/master/.doctrees/content/quickstart/oceanbase-tutorial.doctree
new file mode 100644
index 000000000..68eb01076
Binary files /dev/null and b/master/.doctrees/content/quickstart/oceanbase-tutorial.doctree differ
diff --git a/master/.doctrees/content/quickstart/oracle-tutorial.doctree b/master/.doctrees/content/quickstart/oracle-tutorial.doctree
new file mode 100644
index 000000000..88058ad0b
Binary files /dev/null and b/master/.doctrees/content/quickstart/oracle-tutorial.doctree differ
diff --git a/master/.doctrees/content/quickstart/polardbx-tutorial.doctree b/master/.doctrees/content/quickstart/polardbx-tutorial.doctree
new file mode 100644
index 000000000..a97cdde45
Binary files /dev/null and b/master/.doctrees/content/quickstart/polardbx-tutorial.doctree differ
diff --git a/master/.doctrees/content/quickstart/sqlserver-tutorial.doctree b/master/.doctrees/content/quickstart/sqlserver-tutorial.doctree
new file mode 100644
index 000000000..768a59b48
Binary files /dev/null and b/master/.doctrees/content/quickstart/sqlserver-tutorial.doctree differ
diff --git a/master/.doctrees/content/quickstart/tidb-tutorial.doctree b/master/.doctrees/content/quickstart/tidb-tutorial.doctree
new file mode 100644
index 000000000..313e94dc7
Binary files /dev/null and b/master/.doctrees/content/quickstart/tidb-tutorial.doctree differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/build-real-time-data-lake-tutorial-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/build-real-time-data-lake-tutorial-zh.doctree"
new file mode 100644
index 000000000..650c7e7c2
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/build-real-time-data-lake-tutorial-zh.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/datastream-api-package-guidance-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/datastream-api-package-guidance-zh.doctree"
new file mode 100644
index 000000000..d0463ecbe
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/datastream-api-package-guidance-zh.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/index.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/index.doctree"
new file mode 100644
index 000000000..b17dadddb
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/index.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mongodb-tutorial-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mongodb-tutorial-zh.doctree"
new file mode 100644
index 000000000..c09404729
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mongodb-tutorial-zh.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mysql-doris-pipeline-tutorial-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mysql-doris-pipeline-tutorial-zh.doctree"
new file mode 100644
index 000000000..79021d872
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mysql-doris-pipeline-tutorial-zh.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mysql-postgres-tutorial-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mysql-postgres-tutorial-zh.doctree"
new file mode 100644
index 000000000..e22435296
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mysql-postgres-tutorial-zh.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mysql-starrocks-pipeline-tutorial-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mysql-starrocks-pipeline-tutorial-zh.doctree"
new file mode 100644
index 000000000..7f980b55a
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/mysql-starrocks-pipeline-tutorial-zh.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/oceanbase-tutorial-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/oceanbase-tutorial-zh.doctree"
new file mode 100644
index 000000000..a6a155899
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/oceanbase-tutorial-zh.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/oracle-tutorial-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/oracle-tutorial-zh.doctree"
new file mode 100644
index 000000000..56fff808b
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/oracle-tutorial-zh.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/polardbx-tutorial-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/polardbx-tutorial-zh.doctree"
new file mode 100644
index 000000000..cb78f58a6
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/polardbx-tutorial-zh.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/sqlserver-tutorial-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/sqlserver-tutorial-zh.doctree"
new file mode 100644
index 000000000..5121efef9
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/sqlserver-tutorial-zh.doctree" differ
diff --git "a/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/tidb-tutorial-zh.doctree" "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/tidb-tutorial-zh.doctree"
new file mode 100644
index 000000000..956011664
Binary files /dev/null and "b/master/.doctrees/content/\345\277\253\351\200\237\344\270\212\346\211\213/tidb-tutorial-zh.doctree" differ
diff --git a/master/.doctrees/environment.pickle b/master/.doctrees/environment.pickle
new file mode 100644
index 000000000..6c68d8309
Binary files /dev/null and b/master/.doctrees/environment.pickle differ
diff --git a/master/.doctrees/index.doctree b/master/.doctrees/index.doctree
new file mode 100644
index 000000000..55417748c
Binary files /dev/null and b/master/.doctrees/index.doctree differ
diff --git a/master/.nojekyll b/master/.nojekyll
new file mode 100644
index 000000000..e69de29bb
diff --git a/master/README.html b/master/README.html
new file mode 100644
index 000000000..142933aad
--- /dev/null
+++ b/master/README.html
@@ -0,0 +1,339 @@
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+ <meta charset="utf-8" />
+ <meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+
+ <title>Build the site locally — CDC Connectors for Apache Flink® documentation</title>
+
+
+
+ <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+ <link rel="stylesheet" href="_static/theme_overrides.css" type="text/css" />
+
+
+
+ <link rel="shortcut icon" href="_static/favicon.png"/>
+
+
+
+
+
+
+
+
+ <!--[if lt IE 9]>
+ <script src="_static/js/html5shiv.min.js"></script>
+ <![endif]-->
+
+
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/doctools.js"></script>
+
+ <script type="text/javascript" src="_static/js/theme.js"></script>
+
+
+ <link rel="index" title="Index" href="genindex.html" />
+ <link rel="search" title="Search" href="search.html" />
+</head>
+
+<body class="wy-body-for-nav">
+
+
+ <div class="wy-grid-for-nav">
+
+ <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+ <div class="wy-side-scroll">
+ <div class="wy-side-nav-search" >
+
+
+
+ <a href="index.html" class="icon icon-home"> CDC Connectors for Apache Flink®
+
+
+
+ </a>
+
+
+
+
+ <div class="version">
+ master
+ </div>
+
+
+
+
+<div role="search">
+ <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+ <input type="text" name="q" placeholder="Search docs" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+</div>
+
+
+ </div>
+
+
+ <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+
+
+
+
+
+
+ <p class="caption" role="heading"><span class="caption-text">Contents</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="content/overview/index.html">Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" href="content/quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1"><a class="reference internal" href="content/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B/index.html">快速上手</a></li>
+<li class="toctree-l1"><a class="reference internal" href="content/connectors/index.html">Connectors</a></li>
+<li class="toctree-l1"><a class="reference internal" href="content/pipelines/index.html">Pipeline Connectors</a></li>
+<li class="toctree-l1"><a class="reference internal" href="content/formats/index.html">Formats</a></li>
+<li class="toctree-l1"><a class="reference internal" href="content/downloads.html">Downloads</a></li>
+<li class="toctree-l1"><a class="reference internal" href="content/githublink.html"><a class="github-button" href="https://github.com/ververica/flink-cdc-connectors" data-color-scheme="no-preference: dark_high_contrast; light: dark_high_contrast; dark: dark_high_contrast;" data-size="large" data-show-count="true" aria-label="Star ververica/flink-cdc-connectors on GitHub">Star</a></a></li>
+</ul>
+
+
+
+ </div>
+
+ </div>
+ </nav>
+
+ <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+
+ <nav class="wy-nav-top" aria-label="top navigation">
+
+ <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+ <a href="index.html">CDC Connectors for Apache Flink®</a>
+
+ </nav>
+
+
+ <div class="wy-nav-content">
+
+ <div class="rst-content">
+
+ <!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<!-- Extend the RTD template to support user defined "Edit on Github" URL -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+ <ul class="wy-breadcrumbs">
+
+ <li><a href="index.html" class="icon icon-home"></a> »</li>
+
+ <li>Build the site locally</li>
+
+
+ <li class="wy-breadcrumbs-aside">
+
+
+ <a href="http://github.com/ververica/flink-cdc-connectors/blob/master/docs/README.md" class="fa fa-github"> Edit on GitHub</a>
+
+
+ </li>
+
+ </ul>
+
+
+ <hr/>
+</div>
+ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+ <div itemprop="articleBody">
+
+ <!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<p>This README gives an overview of how to build the documentation of Flink CDC.</p>
+<section id="build-the-site-locally">
+<h1>Build the site locally<a class="headerlink" href="#build-the-site-locally" title="Permalink to this headline">¶</a></h1>
+<p>Make sure you have installed <a class="reference external" href="https://docs.docker.com/engine/install/">Docker</a> and started it on you local environment.</p>
+<p>From the directory of this module (<code class="docutils literal notranslate"><span class="pre">docs</span></code>), use the following command to start the site.</p>
+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>./docs_site.sh start
+</pre></div>
+</div>
+<p>Then the site will run and can be viewed at http://localhost:8001, any update on the <code class="docutils literal notranslate"><span class="pre">docs</span></code> will be shown in the site without restarting.</p>
+<p>Of course, you can use the following command to stop the site.</p>
+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>./docs_site.sh stop
+</pre></div>
+</div>
+</section>
+
+
+ </div>
+
+ </div>
+ <footer>
+
+ <hr/>
+
+ <div role="contentinfo">
+ <p>
+ © Copyright 2024, Ververica GmbH; Apache Flink, Flink®, Apache®, the squirrel logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation.
+
+ </p>
+ </div>
+
+
+
+ Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+
+ <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+
+ provided by <a href="https://readthedocs.org">Read the Docs</a>.
+
+</footer>
+ </div>
+ </div>
+
+ </section>
+
+ </div>
+ <!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+
+
+<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
+ <span class="rst-current-version" data-toggle="rst-current-version">
+ <span class="fa fa-book"> Read the Docs</span>
+ version: master
+ <span class="fa fa-caret-down"></span>
+ </span>
+ <div class="rst-other-versions">
+
+ <dl>
+ <dt>Versions</dt>
+
+ <strong>
+ <dd><a href="/flink-cdc/master/">master</a></dd>
+ </strong>
+
+
+ <dd><a href="/flink-cdc/release-1.4/">release-1.4</a></dd>
+
+
+
+ <dd><a href="/flink-cdc/release-2.0/">release-2.0</a></dd>
+
+
+
+ <dd><a href="/flink-cdc/release-2.1/">release-2.1</a></dd>
+
+
+
+ <dd><a href="/flink-cdc/release-2.2/">release-2.2</a></dd>
+
+
+
+ <dd><a href="/flink-cdc/release-2.3/">release-2.3</a></dd>
+
+
+
+ <dd><a href="/flink-cdc/release-2.4/">release-2.4</a></dd>
+
+
+
+ <dd><a href="/flink-cdc/release-3.0/">release-3.0</a></dd>
+
+
+ </dl>
+
+
+ <hr/>
+ Free document hosting provided by <a href="http://www.readthedocs.org">Read the
+ Docs</a>.
+
+ </div>
+</div>
+
+<!-- Place this tag in your head or just before your close body tag. -->
+<script async defer
+ src="https://ververica.github.io/flink-cdc-connectors/master/_static/button.js"></script>
+
+ <script type="text/javascript">
+ jQuery(function () {
+ SphinxRtdTheme.Navigation.enable(true);
+ });
+ </script>
+
+
+
+
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/master/_images/architecture.png b/master/_images/architecture.png
new file mode 100644
index 000000000..f16458cec
Binary files /dev/null and b/master/_images/architecture.png differ
diff --git a/master/_images/check_branch.png b/master/_images/check_branch.png
new file mode 100644
index 000000000..191e3964f
Binary files /dev/null and b/master/_images/check_branch.png differ
diff --git a/master/_images/data_in_iceberg.png b/master/_images/data_in_iceberg.png
new file mode 100644
index 000000000..5c675c284
Binary files /dev/null and b/master/_images/data_in_iceberg.png differ
diff --git a/master/_images/design.png b/master/_images/design.png
new file mode 100644
index 000000000..b1748d90e
Binary files /dev/null and b/master/_images/design.png differ
diff --git a/master/_images/doris-create-table.png b/master/_images/doris-create-table.png
new file mode 100644
index 000000000..8d248afba
Binary files /dev/null and b/master/_images/doris-create-table.png differ
diff --git a/master/_images/doris-ui.png b/master/_images/doris-ui.png
new file mode 100644
index 000000000..620e2fb01
Binary files /dev/null and b/master/_images/doris-ui.png differ
diff --git a/master/_images/doris_display_data.png b/master/_images/doris_display_data.png
new file mode 100644
index 000000000..5ac24bc40
Binary files /dev/null and b/master/_images/doris_display_data.png differ
diff --git a/master/_images/doris_display_result.png b/master/_images/doris_display_result.png
new file mode 100644
index 000000000..49c45f9c6
Binary files /dev/null and b/master/_images/doris_display_result.png differ
diff --git a/master/_images/files-in-iceberg.png b/master/_images/files-in-iceberg.png
new file mode 100644
index 000000000..2390f2a4f
Binary files /dev/null and b/master/_images/files-in-iceberg.png differ
diff --git a/master/_images/final-data-in-iceberg.png b/master/_images/final-data-in-iceberg.png
new file mode 100644
index 000000000..8222db743
Binary files /dev/null and b/master/_images/final-data-in-iceberg.png differ
diff --git a/master/_images/flink-cdc-iceberg-running-job.png b/master/_images/flink-cdc-iceberg-running-job.png
new file mode 100644
index 000000000..6222b2cba
Binary files /dev/null and b/master/_images/flink-cdc-iceberg-running-job.png differ
diff --git a/master/_images/flink-cdc-streaming-etl.png b/master/_images/flink-cdc-streaming-etl.png
new file mode 100644
index 000000000..c186677a9
Binary files /dev/null and b/master/_images/flink-cdc-streaming-etl.png differ
diff --git a/master/_images/flink-sql-client.png b/master/_images/flink-sql-client.png
new file mode 100644
index 000000000..f548c5917
Binary files /dev/null and b/master/_images/flink-sql-client.png differ
diff --git a/master/_images/flink-sql-client1.png b/master/_images/flink-sql-client1.png
new file mode 100644
index 000000000..f548c5917
Binary files /dev/null and b/master/_images/flink-sql-client1.png differ
diff --git a/master/_images/flink-ui.png b/master/_images/flink-ui.png
new file mode 100644
index 000000000..982db87b9
Binary files /dev/null and b/master/_images/flink-ui.png differ
diff --git a/master/_images/flink-ui1.png b/master/_images/flink-ui1.png
new file mode 100644
index 000000000..982db87b9
Binary files /dev/null and b/master/_images/flink-ui1.png differ
diff --git a/master/_images/flink-ui2.png b/master/_images/flink-ui2.png
new file mode 100644
index 000000000..982db87b9
Binary files /dev/null and b/master/_images/flink-ui2.png differ
diff --git a/master/_images/flink-ui3.png b/master/_images/flink-ui3.png
new file mode 100644
index 000000000..982db87b9
Binary files /dev/null and b/master/_images/flink-ui3.png differ
diff --git a/master/_images/flinkcdc.png b/master/_images/flinkcdc.png
new file mode 100644
index 000000000..a8fe69a93
Binary files /dev/null and b/master/_images/flinkcdc.png differ
diff --git a/master/_images/fork.png b/master/_images/fork.png
new file mode 100644
index 000000000..dce33077a
Binary files /dev/null and b/master/_images/fork.png differ
diff --git a/master/_images/kibana-create-index-pattern.png b/master/_images/kibana-create-index-pattern.png
new file mode 100644
index 000000000..c446cf459
Binary files /dev/null and b/master/_images/kibana-create-index-pattern.png differ
diff --git a/master/_images/kibana-detailed-orders-changes.gif b/master/_images/kibana-detailed-orders-changes.gif
new file mode 100644
index 000000000..3ec82f36d
Binary files /dev/null and b/master/_images/kibana-detailed-orders-changes.gif differ
diff --git a/master/_images/kibana-detailed-orders.png b/master/_images/kibana-detailed-orders.png
new file mode 100644
index 000000000..893a8b257
Binary files /dev/null and b/master/_images/kibana-detailed-orders.png differ
diff --git a/master/_images/mysql-to-doris.png b/master/_images/mysql-to-doris.png
new file mode 100644
index 000000000..38f5e7f83
Binary files /dev/null and b/master/_images/mysql-to-doris.png differ
diff --git a/master/_images/mysql-to-starrocks.png b/master/_images/mysql-to-starrocks.png
new file mode 100644
index 000000000..1529a4866
Binary files /dev/null and b/master/_images/mysql-to-starrocks.png differ
diff --git a/master/_images/open_pr.png b/master/_images/open_pr.png
new file mode 100644
index 000000000..776e6e71d
Binary files /dev/null and b/master/_images/open_pr.png differ
diff --git a/master/_images/real-time-data-lake-tutorial.png b/master/_images/real-time-data-lake-tutorial.png
new file mode 100644
index 000000000..4d5120813
Binary files /dev/null and b/master/_images/real-time-data-lake-tutorial.png differ
diff --git a/master/_images/starrocks-display-data.png b/master/_images/starrocks-display-data.png
new file mode 100644
index 000000000..f516bb348
Binary files /dev/null and b/master/_images/starrocks-display-data.png differ
diff --git a/master/_images/starrocks-display-result.png b/master/_images/starrocks-display-result.png
new file mode 100644
index 000000000..78cd34740
Binary files /dev/null and b/master/_images/starrocks-display-result.png differ
diff --git a/master/_sources/README.md.txt b/master/_sources/README.md.txt
new file mode 100644
index 000000000..d12f6534d
--- /dev/null
+++ b/master/_sources/README.md.txt
@@ -0,0 +1,36 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+This README gives an overview of how to build the documentation of Flink CDC.
+
+### Build the site locally
+Make sure you have installed [Docker](https://docs.docker.com/engine/install/) and started it on you local environment.
+
+From the directory of this module (`docs`), use the following command to start the site.
+
+```sh
+./docs_site.sh start
+```
+Then the site will run and can be viewed at http://localhost:8001, any update on the `docs` will be shown in the site without restarting.
+
+Of course, you can use the following command to stop the site.
+
+```sh
+./docs_site.sh stop
+```
diff --git a/master/_sources/content/connectors/db2-cdc.md.txt b/master/_sources/content/connectors/db2-cdc.md.txt
new file mode 100644
index 000000000..fbb3ae365
--- /dev/null
+++ b/master/_sources/content/connectors/db2-cdc.md.txt
@@ -0,0 +1,386 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# Db2 CDC Connector
+
+The Db2 CDC connector allows for reading snapshot data and incremental data from Db2 database. This document
+describes how to setup the db2 CDC connector to run SQL queries against Db2 databases.
+
+
+## Supported Databases
+
+| Connector | Database | Driver |
+|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------|
+| [Db2-cdc](db2-cdc.md) | <li> [Db2](https://www.ibm.com/products/db2): 11.5 | Db2 Driver: 11.5.0.0 |
+
+Dependencies
+------------
+
+In order to set up the Db2 CDC connector, the following table provides dependency information for both projects
+using a build automation tool (such as Maven or SBT) and SQL Client with SQL JAR bundles.
+
+### Maven dependency
+
+```
+<dependency>
+ <groupId>com.ververica</groupId>
+ <artifactId>flink-connector-db2-cdc</artifactId>
+ <!-- The dependency is available only for stable releases, SNAPSHOT dependencies need to be built based on master or release- branches by yourself. -->
+ <version>3.0-SNAPSHOT</version>
+</dependency>
+```
+
+### SQL Client JAR
+
+```Download link is available only for stable releases.```
+
+Download flink-sql-connector-db2-cdc-3.0-SNAPSHOT.jar and
+put it under `<FLINK_HOME>/lib/`.
+
+**Note:** flink-sql-connector-db2-cdc-XXX-SNAPSHOT version is the code corresponding to the development branch. Users
+need to download the source code and compile the corresponding jar. Users should use the released version, such as
+[flink-sql-connector-db2-cdc-2.3.0.jar](https://mvnrepository.com/artifact/com.ververica/flink-connector-db2-cdc),
+the released version will be available in the Maven central warehouse.
+
+Setup Db2 server
+----------------
+
+Follow the steps in the [Debezium Db2 Connector](https://debezium.io/documentation/reference/1.9/connectors/db2.html#setting-up-db2).
+
+
+Notes
+----------------
+
+### Not support BOOLEAN type in SQL Replication on Db2
+
+Only snapshots can be taken from tables with BOOLEAN type columns. Currently, SQL Replication on Db2 does not support BOOLEAN, so Debezium can not perform CDC on those tables.
+Consider using another type to replace BOOLEAN type.
+
+
+How to create a Db2 CDC table
+----------------
+
+The Db2 CDC table can be defined as following:
+
+```sql
+-- checkpoint every 3 seconds
+Flink SQL> SET 'execution.checkpointing.interval' = '3s';
+
+-- register a Db2 table 'products' in Flink SQL
+Flink SQL> CREATE TABLE products (
+ ID INT NOT NULL,
+ NAME STRING,
+ DESCRIPTION STRING,
+ WEIGHT DECIMAL(10,3)
+ ) WITH (
+ 'connector' = 'db2-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '50000',
+ 'username' = 'root',
+ 'password' = '123456',
+ 'database-name' = 'mydb',
+ 'schema-name' = 'myschema',
+ 'table-name' = 'products');
+
+-- read snapshot and binlogs from products table
+Flink SQL> SELECT * FROM products;
+```
+
+Connector Options
+----------------
+
+<div class="highlight">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 10%">Option</th>
+ <th class="text-left" style="width: 8%">Required</th>
+ <th class="text-left" style="width: 7%">Default</th>
+ <th class="text-left" style="width: 10%">Type</th>
+ <th class="text-left" style="width: 65%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>connector</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Specify what connector to use, here should be <code>'db2-cdc'</code>.</td>
+ </tr>
+ <tr>
+ <td>hostname</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>IP address or hostname of the Db2 database server.</td>
+ </tr>
+ <tr>
+ <td>username</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Name of the Db2 database to use when connecting to the Db2 database server.</td>
+ </tr>
+ <tr>
+ <td>password</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Password to use when connecting to the Db2 database server.</td>
+ </tr>
+ <tr>
+ <td>database-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Database name of the Db2 server to monitor.</td>
+ </tr>
+ <tr>
+ <td>schema-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Schema name of the Db2 database to monitor.</td>
+ </tr>
+ <tr>
+ <td>table-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Table name of the Db2 database to monitor.</td>
+ </tr>
+ <tr>
+ <td>port</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">50000</td>
+ <td>Integer</td>
+ <td>Integer port number of the Db2 database server.</td>
+ </tr>
+ <tr>
+ <td>scan.startup.mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">initial</td>
+ <td>String</td>
+ <td>Optional startup mode for Db2 CDC consumer, valid enumerations are "initial"
+ and "latest-offset". Please see <a href="#startup-reading-position">Startup Reading Position</a> section
+for more detailed information.</td>
+ </tr>
+ <tr>
+ <td>server-time-zone</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>The session time zone in database server, e.g. "Asia/Shanghai".
+ It controls how the TIMESTAMP type in Db2 converted to STRING.
+ See more <a href="https://debezium.io/documentation/reference/1.9/connectors/db2.html#db2-temporal-types">here</a>.
+ If not set, then ZoneId.systemDefault() is used to determine the server time zone.
+ </td>
+ </tr>
+ <tr>
+ <td>debezium.*</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Pass-through Debezium's properties to Debezium Embedded Engine which is used to capture data changes from
+Db2 server.
+ For example: <code>'debezium.snapshot.mode' = 'never'</code>.
+ See more about the <a href="https://debezium.io/documentation/reference/1.9/connectors/db2.html#db2-connector-properties">Debezium's Db2 Connector properties</a></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+Features
+--------
+### Startup Reading Position
+
+The config option `scan.startup.mode` specifies the startup mode for DB2 CDC consumer. The valid enumerations are:
+
+- `initial` (default): Performs an initial snapshot on the monitored database tables upon first startup, and continue to read the latest binlog.
+- `latest-offset`: Never to perform snapshot on the monitored database tables upon first startup, just read from
+ the end of the binlog which means only have the changes since the connector was started.
+
+_Note: the mechanism of `scan.startup.mode` option relying on Debezium's `snapshot.mode` configuration. So please do not using them together. If you speicifying both `scan.startup.mode` and `debezium.snapshot.mode` options in the table DDL, it may make `scan.startup.mode` doesn't work._
+
+### DataStream Source
+
+```java
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.streaming.api.functions.source.SourceFunction;
+
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+
+public class Db2SourceExample {
+ public static void main(String[] args) throws Exception {
+ SourceFunction<String> db2Source =
+ Db2Source.<String>builder()
+ .hostname("yourHostname")
+ .port(50000)
+ .database("yourDatabaseName") // set captured database
+ .tableList("yourSchemaName.yourTableName") // set captured table
+ .username("yourUsername")
+ .password("yourPassword")
+ .deserializer(
+ new JsonDebeziumDeserializationSchema()) // converts SourceRecord to
+ // JSON String
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+ // enable checkpoint
+ env.enableCheckpointing(3000);
+
+ env.addSource(db2Source)
+ .print()
+ .setParallelism(1); // use parallelism 1 for sink to keep message ordering
+
+ env.execute("Print Db2 Snapshot + Change Stream");
+ }
+}
+```
+
+**Note:** Please refer [Deserialization](../about.html#deserialization) for more details about the JSON deserialization.
+
+Data Type Mapping
+----------------
+
+<div class="wy-table-responsive">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width:30%;"><a href="https://www.ibm.com/docs/en/db2/11.5?topic=elements-data-types">Db2 type</a></th>
+ <th class="text-left" style="width:10%;">Flink SQL type<a href="{% link dev/table/types.md %}"></a></th>
+ <th class="text-left" style="width:60%;">NOTE</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ SMALLINT<br>
+ </td>
+ <td>SMALLINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ INTEGER
+ </td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BIGINT
+ </td>
+ <td>BIGINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ REAL
+ </td>
+ <td>FLOAT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ DOUBLE
+ </td>
+ <td>DOUBLE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ NUMERIC(p, s)<br>
+ DECIMAL(p, s)
+ </td>
+ <td>DECIMAL(p, s)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>DATE</td>
+ <td>DATE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TIME</td>
+ <td>TIME</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TIMESTAMP [(p)]
+ </td>
+ <td>TIMESTAMP [(p)]
+ </td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ CHARACTER(n)
+ </td>
+ <td>CHAR(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ VARCHAR(n)
+ </td>
+ <td>VARCHAR(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BINARY(n)
+ </td>
+ <td>BINARY(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ VARBINARY(N)
+ </td>
+ <td>VARBINARY(N)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BLOB<br>
+ CLOB<br>
+ DBCLOB<br>
+ </td>
+ <td>BYTES</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ VARGRAPHIC<br>
+ XML
+ </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+FAQ
+--------
+* [FAQ(English)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ)
+* [FAQ(中文)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ(ZH))
diff --git a/master/_sources/content/connectors/index.md.txt b/master/_sources/content/connectors/index.md.txt
new file mode 100644
index 000000000..a9e59a647
--- /dev/null
+++ b/master/_sources/content/connectors/index.md.txt
@@ -0,0 +1,37 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# Connectors
+
+```{toctree}
+:maxdepth: 2
+
+mongodb-cdc
+mongodb-cdc(ZH)
+mysql-cdc
+mysql-cdc(ZH)
+oceanbase-cdc
+oceanbase-cdc(ZH)
+oracle-cdc
+postgres-cdc
+sqlserver-cdc
+tidb-cdc
+db2-cdc
+vitess-cdc
+```
diff --git a/master/_sources/content/connectors/mongodb-cdc(ZH).md.txt b/master/_sources/content/connectors/mongodb-cdc(ZH).md.txt
new file mode 100644
index 000000000..b341e62cd
--- /dev/null
+++ b/master/_sources/content/connectors/mongodb-cdc(ZH).md.txt
@@ -0,0 +1,685 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# MongoDB CDC 连接器
+
+MongoDB CDC 连接器允许从 MongoDB 读取快照数据和增量数据。 本文档描述了如何设置 MongoDB CDC 连接器以针对 MongoDB 运行 SQL 查询。
+
+依赖
+------------
+
+为了设置 MongoDB CDC 连接器, 下表提供了使用构建自动化工具(如 Maven 或 SBT )和带有 SQLJar 捆绑包的 SQLClient 的两个项目的依赖关系信息。
+
+### Maven dependency
+```
+<dependency>
+ <groupId>com.ververica</groupId>
+ <artifactId>flink-connector-mongodb-cdc</artifactId>
+ <!-- 依赖项仅适用于稳定版本,SNAPSHOT依赖项需要自己构建。 -->
+ <version>3.0-SNAPSHOT</version>
+</dependency>
+```
+
+### SQL Client JAR
+
+```下载链接仅适用于稳定版本。```
+
+下载 [flink-sql-connector-mongodb-cdc-3.0-SNAPSHOT.jar](https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mongodb-cdc/3.0-SNAPSHOT/flink-sql-connector-mongodb-cdc-3.0-SNAPSHOT.jar) 把它放在 `<FLINK_HOME>/lib/`.
+
+**注意:** flink-sql-connector-mongodb-cdc-XXX-SNAPSHOT 版本是与开发分支相对应的代码。 用户需要下载源代码并编译相应的jar。 用户应使用已发布的版本,例如 [flink-sql-connector-mongodb-cdc-2.3.0.jar](https://mvnrepository.com/artifact/com.ververica/flink-sql-connector-mongodb-cdc), 发布的版本将在 Maven 中央仓库中提供。
+
+设置 MongoDB
+----------------
+
+### 可用性
+- MongoDB 版本
+
+ MongoDB 版本 >= 3.6 <br>
+ 我们使用 [更改流](https://docs.mongodb.com/manual/changeStreams/) 功能(3.6 版中新增),以捕获更改数据。
+
+- 集群部署
+
+ [副本集](https://docs.mongodb.com/manual/replication/) 或者 [分片集群](https://docs.mongodb.com/manual/sharding/) 是必需的。
+
+- 存储引擎
+
+ [WiredTiger](https://docs.mongodb.com/manual/core/wiredtiger/#std-label-storage-wiredtiger) 存储引擎是必需的。
+
+- [副本集协议版本](https://docs.mongodb.com/manual/reference/replica-configuration/#mongodb-rsconf-rsconf.protocolVersion)
+
+ 副本集协议版本 1 [(pv1)](https://docs.mongodb.com/manual/reference/replica-configuration/#mongodb-rsconf-rsconf.protocolVersion) 是必需的。 <br>
+ 从 4.0 版本开始,MongoDB 只支持pv1。 pv1 是使用 MongoDB 3.2 或更高版本创建的所有新副本集的默认值。
+
+- 权限
+
+ `changeStream` and `read` 是 MongoDB Kafka Connector 必需权限。
+
+ 你可以使用以下示例进行简单的授权。<br>
+ 有关更详细的授权, 请参照 [MongoDB 数据库用户角色](https://docs.mongodb.com/manual/reference/built-in-roles/#database-user-roles).
+
+ ```javascript
+ use admin;
+ db.createRole(
+ {
+ role: "flinkrole",
+ privileges: [{
+ // 所有数据库中所有非系统集合的 grant 权限
+ resource: { db: "", collection: "" },
+ actions: [
+ "splitVector",
+ "listDatabases",
+ "listCollections",
+ "collStats",
+ "find",
+ "changeStream" ]
+ }],
+ roles: [
+ // 阅读 config.collections 和 config.chunks
+ // 用于分片集群快照拆分。
+ { role: 'read', db: 'config' }
+ ]
+ }
+ );
+
+ db.createUser(
+ {
+ user: 'flinkuser',
+ pwd: 'flinkpw',
+ roles: [
+ { role: 'flinkrole', db: 'admin' }
+ ]
+ }
+ );
+ ```
+
+
+如何创建 MongoDB CDC 表
+----------------
+
+MongoDB CDC 表可以定义如下:
+
+```sql
+-- 在 Flink SQL 中注册 MongoDB 表 `products`
+CREATE TABLE products (
+ _id STRING, // 必须声明
+ name STRING,
+ weight DECIMAL(10,3),
+ tags ARRAY<STRING>, -- array
+ price ROW<amount DECIMAL(10,2), currency STRING>, -- 嵌入式文档
+ suppliers ARRAY<ROW<name STRING, address STRING>>, -- 嵌入式文档
+ PRIMARY KEY(_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'mongodb-cdc',
+ 'hosts' = 'localhost:27017,localhost:27018,localhost:27019',
+ 'username' = 'flinkuser',
+ 'password' = 'flinkpw',
+ 'database' = 'inventory',
+ 'collection' = 'products'
+);
+
+-- 从 `products` 集合中读取快照和更改事件
+SELECT * FROM products;
+```
+
+**请注意**
+
+MongoDB 的更改事件记录在消息之前没有更新。因此,我们只能将其转换为 Flink 的 UPSERT 更改日志流。
+upstart 流需要一个唯一的密钥,所以我们必须声明 `_id` 作为主键。
+我们不能将其他列声明为主键, 因为删除操作不包含除 `_id` 和 `sharding key` 之外的键和值。
+
+连接器选项
+----------------
+
+<div class="highlight">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 25%">Option</th>
+ <th class="text-left" style="width: 8%">Required</th>
+ <th class="text-left" style="width: 7%">Default</th>
+ <th class="text-left" style="width: 10%">Type</th>
+ <th class="text-left" style="width: 50%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>connector</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>指定要使用的连接器,此处应为 <code>mongodb-cdc</code>.</td>
+ </tr>
+ <tr>
+ <td>scheme</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">mongodb</td>
+ <td>String</td>
+ <td>指定 MongoDB 连接协议。 eg. <code>mongodb or mongodb+srv.</code></td>
+ </tr>
+ <tr>
+ <td>hosts</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>MongoDB 服务器的主机名和端口对的逗号分隔列表。<br>
+ eg. <code>localhost:27017,localhost:27018</code>
+ </td>
+ </tr>
+ <tr>
+ <td>username</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>连接到 MongoDB 时要使用的数据库用户的名称。<br>
+ 只有当 MongoDB 配置为使用身份验证时,才需要这样做。
+ </td>
+ </tr>
+ <tr>
+ <td>password</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>连接到 MongoDB 时要使用的密码。<br>
+ 只有当 MongoDB 配置为使用身份验证时,才需要这样做。
+ </td>
+ </tr>
+ <tr>
+ <td>database</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>要监视更改的数据库的名称。 如果未设置,则将捕获所有数据库。 <br>
+ 该数据库还支持正则表达式来监视与正则表达式匹配的多个数据库。</td>
+ </tr>
+ <tr>
+ <td>collection</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>数据库中要监视更改的集合的名称。 如果未设置,则将捕获所有集合。<br>
+ 该集合还支持正则表达式来监视与完全限定的集合标识符匹配的多个集合。</td>
+ </tr>
+ <tr>
+ <td>connection.options</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td><a href="https://docs.mongodb.com/manual/reference/connection-string/#std-label-connections-connection-options">MongoDB连接选项</a>。 例如: <br>
+ <code>replicaSet=test&connectTimeoutMS=300000</code>
+ </td>
+ </tr>
+ <tr>
+ <td>scan.startup.mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">initial</td>
+ <td>String</td>
+ <td> MongoDB CDC 消费者可选的启动模式,
+ 合法的模式为 "initial","latest-offset" 和 "timestamp"。
+ 请查阅 <a href="#a-name-id-002-a">启动模式</a> 章节了解更多详细信息。</td>
+ </tr>
+ <tr>
+ <td>scan.startup.timestamp-millis</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Long</td>
+ <td>起始毫秒数, 仅适用于 <code>'timestamp'</code> 启动模式.</td>
+ </tr>
+ <tr>
+ <td>batch.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1024</td>
+ <td>Integer</td>
+ <td>Cursor 批次大小。</td>
+ </tr>
+ <tr>
+ <td>poll.max.batch.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1024</td>
+ <td>Integer</td>
+ <td>轮询新数据时,单个批处理中要包含的更改流文档的最大数量。</td>
+ </tr>
+ <tr>
+ <td>poll.await.time.ms</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1000</td>
+ <td>Integer</td>
+ <td>在更改流上检查新结果之前等待的时间。</td>
+ </tr>
+ <tr>
+ <td>heartbeat.interval.ms</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">0</td>
+ <td>Integer</td>
+ <td>心跳间隔(毫秒)。使用 0 禁用。</td>
+ </tr>
+ <tr>
+ <td>scan.full-changelog</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>是否尝试使用 MongoDB 前像/后像产生完整事件流。请查阅 <a href="#a-name-id-003-a">完整事件流</a> 章节了解更多详细信息。该功能仅支持 MongoDB 6.0 之后的版本。</td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>是否启用增量快照。增量快照功能仅支持 MongoDB 4.0 之后的版本。</td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.chunk.size.mb</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">64</td>
+ <td>Integer</td>
+ <td>增量快照的区块大小 mb。</td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.chunk.samples</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">20</td>
+ <td>Integer</td>
+ <td>采样分片策略,每个chunk采样的数据条数。</td>
+ </tr>
+ <tr>
+ <td>scan.incremental.close-idle-reader.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>是否在快照结束后关闭空闲的 Reader。 此特性需要 flink 版本大于等于 1.14 并且 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' 需要设置为 true。<br>
+ 若 flink 版本大于等于 1.15,'execution.checkpointing.checkpoints-after-tasks-finish.enabled' 默认值变更为 true,可以不用显式配置 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' = true。</td>
+ </tr>
+ <tr>
+ <td>scan.cursor.no-timeout</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">true</td>
+ <td>Boolean</td>
+ <td>MongoDB 服务端通常会将空闲时间超过 10 分钟的 cursor 关闭,来节省内存开销。将这个参数设置为 true 可以防止 cursor 因为读取时间过长或者背压导致的空闲而关闭。仅在增量快照模式下生效。</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+注意: `heartbeat.interval.ms` 强烈建议设置一个大于 0 的适当值 **如果集合更改缓慢**.
+当我们从检查点或保存点恢复 Flink 作业时,心跳事件可以向前推送 `resumeToken`,以避免 `resumeToken` 过期。
+
+可用元数据
+----------------
+
+以下格式元数据可以在表定义中公开为只读(VIRTUAL)列。
+
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 15%">Key</th>
+ <th class="text-left" style="width: 30%">DataType</th>
+ <th class="text-left" style="width: 55%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>database_name</td>
+ <td>STRING NOT NULL</td>
+ <td>包含该行的数据库的名称。</td>
+ </tr>
+ <tr>
+ <td>collection_name</td>
+ <td>STRING NOT NULL</td>
+ <td>包含该行的集合的名称。</td>
+ </tr>
+ <tr>
+ <td>op_ts</td>
+ <td>TIMESTAMP_LTZ(3) NOT NULL</td>
+ <td>它指示在数据库中进行更改的时间。 <br>如果记录是从表的快照而不是改变流中读取的,该值将始终为0。</td>
+ </tr>
+ </tbody>
+</table>
+
+扩展的 CREATE TABLE 示例演示了用于公开这些元数据字段的语法:
+```sql
+CREATE TABLE products (
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ collection_name STRING METADATA FROM 'collection_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ _id STRING, // 必须声明
+ name STRING,
+ weight DECIMAL(10,3),
+ tags ARRAY<STRING>, -- array
+ price ROW<amount DECIMAL(10,2), currency STRING>, -- 嵌入式文档
+ suppliers ARRAY<ROW<name STRING, address STRING>>, -- 嵌入式文档
+ PRIMARY KEY(_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'mongodb-cdc',
+ 'hosts' = 'localhost:27017,localhost:27018,localhost:27019',
+ 'username' = 'flinkuser',
+ 'password' = 'flinkpw',
+ 'database' = 'inventory',
+ 'collection' = 'products'
+);
+```
+
+特性
+--------
+
+### 精确一次处理
+
+MongoDB CDC 连接器是一个 Flink Source 连接器,它将首先读取数据库快照,然后在处理**甚至失败时继续读取带有**的更改流事件。
+
+### 启动模式<a name="启动模式" id="002" ></a>
+
+配置选项```scan.startup.mode```指定 MySQL CDC 使用者的启动模式。有效枚举包括:
+
+- `initial` (默认):在第一次启动时对受监视的数据库表执行初始快照,并继续读取最新的 oplog。
+- `latest-offset`:首次启动时,从不对受监视的数据库表执行快照, 连接器仅从 oplog 的结尾处开始读取,这意味着连接器只能读取在连接器启动之后的数据更改。
+- `timestamp`:跳过快照阶段,从指定的时间戳开始读取 oplog 事件。
+
+例如使用 DataStream API:
+```java
+MongoDBSource.builder()
+ .startupOptions(StartupOptions.latest()) // Start from latest offset
+ .startupOptions(StartupOptions.timestamp(1667232000000L) // Start from timestamp
+ .build()
+```
+
+and with SQL:
+
+```SQL
+CREATE TABLE mongodb_source (...) WITH (
+ 'connector' = 'mongodb-cdc',
+ 'scan.startup.mode' = 'latest-offset', -- 从最晚位点启动
+ ...
+ 'scan.startup.mode' = 'timestamp', -- 指定时间戳启动模式
+ 'scan.startup.timestamp-millis' = '1667232000000' -- 启动毫秒时间
+ ...
+)
+```
+
+### 更改流
+
+我们将 [MongoDB's official Kafka Connector](https://docs.mongodb.com/kafka-connector/current/kafka-source/) 从 MongoDB 中读取快照或更改事件,并通过 Debezium 的 `EmbeddedEngine` 进行驱动。
+
+Debezium 的 `EmbeddedEngine` 提供了一种在应用程序进程中运行单个 Kafka Connect `SourceConnector` 的机制,并且它可以正确地驱动任何标准的 Kafka Connect `SourceConnector`,即使它不是由 Debezium 提供的。
+
+我们选择 **MongoDB 的官方 Kafka连接器**,而不是 **Debezium 的MongoDB 连接器**,因为它们使用了不同的更改数据捕获机制。
+
+- 对于 Debezium 的 MongoDB 连接器,它读取每个复制集主节点的 `oplog.rs` 集合。
+- 对于 MongoDB 的 Kafka 连接器,它订阅了 MongoDB 的 `更改流`。
+
+MongoDB 的`oplog.rs` 集合没有在状态之前保持更改记录的更新, 因此,很难通过单个 `oplog.rs` 记录提取完整的文档状态,并将其转换为 Flink 接受的更改日志流(Insert Only,Upsert,All)。
+此外,MongoDB 5(2021 7月发布)改变了 oplog 格式,因此当前的 Debezium 连接器不能与其一起使用。
+
+**Change Stream**是 MongoDB 3.6 为副本集和分片集群提供的一项新功能,它允许应用程序访问实时数据更改,而不会带来跟踪操作日志的复杂性和风险。<br>
+应用程序可以使用更改流来订阅单个集合上的所有数据更改, 数据库或整个部署,并立即对其做出反应。
+
+**查找更新操作的完整文档**是**变更流**提供的一项功能,它可以配置变更流以返回更新文档的最新多数提交版本。由于该功能,我们可以轻松收集最新的完整文档,并将更改日志转换为 Flink 的**Upsert Changelog Stream**。
+
+顺便说一句,[DBZ-435](https://issues.redhat.com/browse/DBZ-435)提到的Debezium的MongoDB变更流探索,正在制定路线图。<br>
+如果完成了,我们可以考虑集成两种源连接器供用户选择。
+
+### DataStream Source
+
+MongoDB CDC 连接器也可以是一个数据流源。 你可以创建 SourceFunction,如下所示:
+
+```java
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.streaming.api.functions.source.SourceFunction;
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+import org.apache.flink.cdc.connectors.mongodb.MongoDBSource;
+
+public class MongoDBSourceExample {
+ public static void main(String[] args) throws Exception {
+ SourceFunction<String> sourceFunction = MongoDBSource.<String>builder()
+ .hosts("localhost:27017")
+ .username("flink")
+ .password("flinkpw")
+ .databaseList("inventory") // 设置捕获的数据库,支持正则表达式
+ .collectionList("inventory.products", "inventory.orders") //设置捕获的集合,支持正则表达式
+ .deserializer(new JsonDebeziumDeserializationSchema())
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+ env.addSource(sourceFunction)
+ .print().setParallelism(1); // 对 sink 使用并行度 1 以保持消息顺序
+
+ env.execute();
+ }
+}
+```
+
+MongoDB CDC 增量连接器(2.3.0 之后)可以使用,如下所示:
+```java
+import org.apache.flink.api.common.eventtime.WatermarkStrategy;
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.cdc.connectors.mongodb.source.MongoDBSource;
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+
+public class MongoDBIncrementalSourceExample {
+ public static void main(String[] args) throws Exception {
+ MongoDBSource<String> mongoSource =
+ MongoDBSource.<String>builder()
+ .hosts("localhost:27017")
+ .databaseList("inventory") // 设置捕获的数据库,支持正则表达式
+ .collectionList("inventory.products", "inventory.orders") //设置捕获的集合,支持正则表达式
+ .username("flink")
+ .password("flinkpw")
+ .deserializer(new JsonDebeziumDeserializationSchema())
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+ // 启用检查点
+ env.enableCheckpointing(3000);
+ // 将 source 并行度设置为 2
+ env.fromSource(mongoSource, WatermarkStrategy.noWatermarks(), "MongoDBIncrementalSource")
+ .setParallelism(2)
+ .print()
+ .setParallelism(1);
+
+ env.execute("Print MongoDB Snapshot + Change Stream");
+ }
+}
+```
+
+**注意:**
+- 如果使用数据库正则表达式,则需要 `readAnyDatabase` 角色。
+- 增量快照功能仅支持 MongoDB 4.0 之后的版本。
+
+### 完整事件流<a name="完整事件流" id="003" ></a>
+
+MongoDB 6.0 及以上版本支持在输出的更改流事件中携带对应更改前及更改后的文档版本(分别称为前像和后像)。
+
+- 前像(Pre-image)是被该变更替换、更新或删除的文档。插入事件不存在对应的前像。
+
+- 后像(Post-image)是该变更插入、替换或更新的文档。删除事件不存在对应的后像。
+
+MongoDB CDC 能够借助上述前像和后像信息,产生完整的、包含 Insert、Update Before、Update After、Delete 数据行的事件流,从而避免下游 Flink 增加额外的 `ChangelogNormalize` 节点。
+
+为了启用这一功能,您需要确保:
+
+- MongoDB 数据库版本不低于 6.0;
+- 在数据库层面启用前像/后像记录功能:
+```javascript
+db.runCommand({
+ setClusterParameter: {
+ changeStreamOptions: {
+ preAndPostImages: {
+ expireAfterSeconds: 'off' // 自定义前像后像的过期时间
+ }
+ }
+ }
+})
+```
+- 为需要监控的集合开启前像/后像记录功能:
+```javascript
+db.runCommand({
+ collMod: "<< 集合名称 >>",
+ changeStreamPreAndPostImages: {
+ enabled: true
+ }
+})
+```
+- 打开 MongoDB CDC 的 `scan.full-changelog` 开关:
+
+```java
+MongoDBSource.builder()
+ .scanFullChangelog(true)
+ ...
+ .build()
+```
+
+或者使用 Flink SQL:
+
+```SQL
+CREATE TABLE mongodb_source (...) WITH (
+ 'connector' = 'mongodb-cdc',
+ 'scan.full-changelog' = 'true',
+ ...
+)
+```
+
+数据类型映射
+----------------
+[BSON](https://docs.mongodb.com/manual/reference/bson-types/) **二进制 JSON**的缩写是一种类似 JSON 格式的二进制编码序列,用于在 MongoDB 中存储文档和进行远程过程调用。
+
+[Flink SQL Data Type](https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/dev/table/types/) 类似于 SQL 标准的数据类型术语,该术语描述了表生态系统中值的逻辑类型。它可以用于声明操作的输入和/或输出类型。
+
+为了使 Flink SQL 能够处理来自异构数据源的数据,异构数据源的数据类型需要统一转换为 Flink SQL 数据类型。
+
+以下是 BSON 类型和 Flink SQL 类型的映射。
+
+
+<div class="wy-table-responsive">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left">BSON type<a href="https://docs.mongodb.com/manual/reference/bson-types/"></a></th>
+ <th class="text-left">Flink SQL type<a href="{% link dev/table/types.md %}"></a></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td></td>
+ <td>TINYINT</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>SMALLINT</td>
+ </tr>
+ <tr>
+ <td>
+ Int<br>
+ <td>INT</td>
+ </tr>
+ <tr>
+ <td>Long</td>
+ <td>BIGINT</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>FLOAT</td>
+ </tr>
+ <tr>
+ <td>Double</td>
+ <td>DOUBLE</td>
+ </tr>
+ <tr>
+ <td>Decimal128</td>
+ <td>DECIMAL(p, s)</td>
+ </tr>
+ <tr>
+ <td>Boolean</td>
+ <td>BOOLEAN</td>
+ </tr>
+ <tr>
+ <td>Date</br>Timestamp</td>
+ <td>DATE</td>
+ </tr>
+ <tr>
+ <td>Date</br>Timestamp</td>
+ <td>TIME</td>
+ </tr>
+ <tr>
+ <td>Date</td>
+ <td>TIMESTAMP(3)</br>TIMESTAMP_LTZ(3)</td>
+ </tr>
+ <tr>
+ <td>Timestamp</td>
+ <td>TIMESTAMP(0)</br>TIMESTAMP_LTZ(0)
+ </td>
+ </tr>
+ <tr>
+ <td>
+ String<br>
+ ObjectId<br>
+ UUID<br>
+ Symbol<br>
+ MD5<br>
+ JavaScript</br>
+ Regex</td>
+ <td>STRING</td>
+ </tr>
+ <tr>
+ <td>BinData</td>
+ <td>BYTES</td>
+ </tr>
+ <tr>
+ <td>Object</td>
+ <td>ROW</td>
+ </tr>
+ <tr>
+ <td>Array</td>
+ <td>ARRAY</td>
+ </tr>
+ <tr>
+ <td>DBPointer</td>
+ <td>ROW<$ref STRING, $id STRING></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="https://docs.mongodb.com/manual/reference/geojson/">GeoJSON</a>
+ </td>
+ <td>
+ Point : ROW<type STRING, coordinates ARRAY<DOUBLE>></br>
+ Line : ROW<type STRING, coordinates ARRAY<ARRAY< DOUBLE>>></br>
+ ...
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+
+参考
+--------
+
+- [MongoDB Kafka Connector](https://docs.mongodb.com/kafka-connector/current/kafka-source/)
+- [Change Streams](https://docs.mongodb.com/manual/changeStreams/)
+- [Replication](https://docs.mongodb.com/manual/replication/)
+- [Sharding](https://docs.mongodb.com/manual/sharding/)
+- [Database User Roles](https://docs.mongodb.com/manual/reference/built-in-roles/#database-user-roles)
+- [WiredTiger](https://docs.mongodb.com/manual/core/wiredtiger/#std-label-storage-wiredtiger)
+- [Replica set protocol](https://docs.mongodb.com/manual/reference/replica-configuration/#mongodb-rsconf-rsconf.protocolVersion)
+- [Connection String Options](https://docs.mongodb.com/manual/reference/connection-string/#std-label-connections-connection-options)
+- [Document Pre- and Post-Images](https://www.mongodb.com/docs/v6.0/changeStreams/#change-streams-with-document-pre--and-post-images)
+- [BSON Types](https://docs.mongodb.com/manual/reference/bson-types/)
+- [Flink DataTypes](https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/dev/table/types/)
+
+FAQ
+--------
+* [FAQ(English)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ)
+* [FAQ(中文)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ(ZH))
\ No newline at end of file
diff --git a/master/_sources/content/connectors/mongodb-cdc.md.txt b/master/_sources/content/connectors/mongodb-cdc.md.txt
new file mode 100644
index 000000000..1158b6cc4
--- /dev/null
+++ b/master/_sources/content/connectors/mongodb-cdc.md.txt
@@ -0,0 +1,695 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# MongoDB CDC Connector
+
+The MongoDB CDC connector allows for reading snapshot data and incremental data from MongoDB. This document describes how to setup the MongoDB CDC connector to run SQL queries against MongoDB.
+
+Dependencies
+------------
+
+In order to setup the MongoDB CDC connector, the following table provides dependency information for both projects using a build automation tool (such as Maven or SBT) and SQL Client with SQL JAR bundles.
+
+### Maven dependency
+```
+<dependency>
+ <groupId>com.ververica</groupId>
+ <artifactId>flink-connector-mongodb-cdc</artifactId>
+ <!-- The dependency is available only for stable releases, SNAPSHOT dependencies need to be built based on master or release- branches by yourself. -->
+ <version>3.0-SNAPSHOT</version>
+</dependency>
+```
+
+### SQL Client JAR
+
+```Download link is available only for stable releases.```
+
+Download [flink-sql-connector-mongodb-cdc-3.0-SNAPSHOT.jar](https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mongodb-cdc/3.0-SNAPSHOT/flink-sql-connector-mongodb-cdc-3.0-SNAPSHOT.jar) and put it under `<FLINK_HOME>/lib/`.
+
+**Note:** flink-sql-connector-mongodb-cdc-XXX-SNAPSHOT version is the code corresponding to the development branch. Users need to download the source code and compile the corresponding jar. Users should use the released version, such as [flink-sql-connector-mongodb-cdc-2.2.1.jar](https://mvnrepository.com/artifact/com.ververica/flink-sql-connector-mongodb-cdc), the released version will be available in the Maven central warehouse.
+
+Setup MongoDB
+----------------
+
+### Availability
+- MongoDB version
+
+ MongoDB version >= 3.6 <br>
+We use [change streams](https://docs.mongodb.com/manual/changeStreams/) feature (new in version 3.6) to capture change data.
+
+- Cluster Deployment
+
+ [replica sets](https://docs.mongodb.com/manual/replication/) or [sharded clusters](https://docs.mongodb.com/manual/sharding/) is required.
+
+- Storage Engine
+
+ [WiredTiger](https://docs.mongodb.com/manual/core/wiredtiger/#std-label-storage-wiredtiger) storage engine is required.
+
+- [Replica set protocol version](https://docs.mongodb.com/manual/reference/replica-configuration/#mongodb-rsconf-rsconf.protocolVersion)
+
+ Replica set protocol version 1 [(pv1)](https://docs.mongodb.com/manual/reference/replica-configuration/#mongodb-rsconf-rsconf.protocolVersion) is required. <br>
+Starting in version 4.0, MongoDB only supports pv1. pv1 is the default for all new replica sets created with MongoDB 3.2 or later.
+
+- Privileges
+
+ `changeStream` and `read` privileges are required by MongoDB Kafka Connector.
+
+ You can use the following example for simple authorization.<br>
+ For more detailed authorization, please refer to [MongoDB Database User Roles](https://docs.mongodb.com/manual/reference/built-in-roles/#database-user-roles).
+
+ ```javascript
+ use admin;
+ db.createRole(
+ {
+ role: "flinkrole",
+ privileges: [{
+ // Grant privileges on all non-system collections in all databases
+ resource: { db: "", collection: "" },
+ actions: [
+ "splitVector",
+ "listDatabases",
+ "listCollections",
+ "collStats",
+ "find",
+ "changeStream" ]
+ }],
+ roles: [
+ // Read config.collections and config.chunks
+ // for sharded cluster snapshot splitting.
+ { role: 'read', db: 'config' }
+ ]
+ }
+ );
+
+ db.createUser(
+ {
+ user: 'flinkuser',
+ pwd: 'flinkpw',
+ roles: [
+ { role: 'flinkrole', db: 'admin' }
+ ]
+ }
+ );
+ ```
+
+
+How to create a MongoDB CDC table
+----------------
+
+The MongoDB CDC table can be defined as following:
+
+```sql
+-- register a MongoDB table 'products' in Flink SQL
+CREATE TABLE products (
+ _id STRING, // must be declared
+ name STRING,
+ weight DECIMAL(10,3),
+ tags ARRAY<STRING>, -- array
+ price ROW<amount DECIMAL(10,2), currency STRING>, -- embedded document
+ suppliers ARRAY<ROW<name STRING, address STRING>>, -- embedded documents
+ PRIMARY KEY(_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'mongodb-cdc',
+ 'hosts' = 'localhost:27017,localhost:27018,localhost:27019',
+ 'username' = 'flinkuser',
+ 'password' = 'flinkpw',
+ 'database' = 'inventory',
+ 'collection' = 'products'
+);
+
+-- read snapshot and change events from products collection
+SELECT * FROM products;
+```
+
+**Note that**
+
+MongoDB's change event record doesn't have updated before message. So, we can only convert it to Flink's UPSERT changelog stream.
+An upsert stream requires a unique key, so we must declare `_id` as primary key.
+We can't declare other column as primary key, because delete operation does not contain the key and value besides `_id` and `sharding key`.
+
+Connector Options
+----------------
+
+<div class="highlight">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 25%">Option</th>
+ <th class="text-left" style="width: 8%">Required</th>
+ <th class="text-left" style="width: 7%">Default</th>
+ <th class="text-left" style="width: 10%">Type</th>
+ <th class="text-left" style="width: 50%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>connector</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Specify what connector to use, here should be <code>mongodb-cdc</code>.</td>
+ </tr>
+ <tr>
+ <td>scheme</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">mongodb</td>
+ <td>String</td>
+ <td>The protocol connected to MongoDB. eg. <code>mongodb or mongodb+srv.</code></td>
+ </tr>
+ <tr>
+ <td>hosts</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>The comma-separated list of hostname and port pairs of the MongoDB servers.<br>
+ eg. <code>localhost:27017,localhost:27018</code>
+ </td>
+ </tr>
+ <tr>
+ <td>username</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Name of the database user to be used when connecting to MongoDB.<br>
+ This is required only when MongoDB is configured to use authentication.
+ </td>
+ </tr>
+ <tr>
+ <td>password</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Password to be used when connecting to MongoDB.<br>
+ This is required only when MongoDB is configured to use authentication.
+ </td>
+ </tr>
+ <tr>
+ <td>database</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Name of the database to watch for changes. If not set then all databases will be captured. <br>
+ The database also supports regular expressions to monitor multiple databases matching the regular expression.</td>
+ </tr>
+ <tr>
+ <td>collection</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Name of the collection in the database to watch for changes. If not set then all collections will be captured.<br>
+ The collection also supports regular expressions to monitor multiple collections matching fully-qualified collection identifiers.</td>
+ </tr>
+ <tr>
+ <td>connection.options</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>The ampersand-separated <a href="https://docs.mongodb.com/manual/reference/connection-string/#std-label-connections-connection-options">connection options</a> of MongoDB. eg. <br>
+ <code>replicaSet=test&connectTimeoutMS=300000</code>
+ </td>
+ </tr>
+ <tr>
+ <td>scan.startup.mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">initial</td>
+ <td>String</td>
+ <td>Optional startup mode for MongoDB CDC consumer, valid enumerations are "initial", "latest-offset" and "timestamp".
+ Please see <a href="#startup-reading-position">Startup Reading Position</a> section for more detailed information.</td>
+ </tr>
+ <tr>
+ <td>scan.startup.timestamp-millis</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Long</td>
+ <td>Timestamp in millis of the start point, only used for <code>'timestamp'</code> startup mode.</td>
+ </tr>
+ <tr>
+ <td>copy.existing.queue.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">10240</td>
+ <td>Integer</td>
+ <td>The max size of the queue to use when copying data.</td>
+ </tr>
+ <tr>
+ <td>batch.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1024</td>
+ <td>Integer</td>
+ <td>The cursor batch size.</td>
+ </tr>
+ <tr>
+ <td>poll.max.batch.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1024</td>
+ <td>Integer</td>
+ <td>Maximum number of change stream documents to include in a single batch when polling for new data.</td>
+ </tr>
+ <tr>
+ <td>poll.await.time.ms</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1000</td>
+ <td>Integer</td>
+ <td>The amount of time to wait before checking for new results on the change stream.</td>
+ </tr>
+ <tr>
+ <td>heartbeat.interval.ms</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">0</td>
+ <td>Integer</td>
+ <td>The length of time in milliseconds between sending heartbeat messages. Use 0 to disable.</td>
+ </tr>
+ <tr>
+ <td>scan.full-changelog</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>Whether try to generate full-mode changelog based on pre- and post-images in MongoDB. Refer to <a href="#a-name-id-003-a">Full Changelog</a> for more details. Supports MongoDB 6.0 and above only.</td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>Whether enable incremental snapshot. The incremental snapshot feature only supports after MongoDB 4.0.</td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.chunk.size.mb</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">64</td>
+ <td>Integer</td>
+ <td>The chunk size mb of incremental snapshot.</td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.chunk.samples</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">20</td>
+ <td>Integer</td>
+ <td>The samples count per chunk when using sample partition strategy during incremental snapshot.</td>
+ </tr>
+ <tr>
+ <td>scan.incremental.close-idle-reader.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>Whether to close idle readers at the end of the snapshot phase. <br>
+ The flink version is required to be greater than or equal to 1.14 when 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' is set to true.<br>
+ If the flink version is greater than or equal to 1.15, the default value of 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' has been changed to true,
+ so it does not need to be explicitly configured 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' = 'true'
+ </td>
+ </tr>
+ <tr>
+ <td>scan.cursor.no-timeout</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">true</td>
+ <td>Boolean</td>
+ <td>MongoDB server normally times out idle cursors after an inactivity period (10 minutes) to prevent excess memory use. Set this option to true to prevent that. Only available when parallelism snapshot is enabled.</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+Note: `heartbeat.interval.ms` is highly recommended setting a proper value larger than 0 **if the collection changes slowly**.
+The heartbeat event can push the `resumeToken` forward to avoid `resumeToken` being expired when we recover the Flink job from a checkpoint or savepoint.
+
+Available Metadata
+----------------
+
+The following format metadata can be exposed as read-only (VIRTUAL) columns in a table definition.
+
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 15%">Key</th>
+ <th class="text-left" style="width: 30%">DataType</th>
+ <th class="text-left" style="width: 55%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>database_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the database that contain the row.</td>
+ </tr>
+ <tr>
+ <td>collection_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the collection that contain the row.</td>
+ </tr>
+ <tr>
+ <td>op_ts</td>
+ <td>TIMESTAMP_LTZ(3) NOT NULL</td>
+ <td>It indicates the time that the change was made in the database. <br>If the record is read from snapshot of the table instead of the change stream, the value is always 0.</td>
+ </tr>
+ </tbody>
+</table>
+
+The extended CREATE TABLE example demonstrates the syntax for exposing these metadata fields:
+```sql
+CREATE TABLE products (
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ collection_name STRING METADATA FROM 'collection_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ _id STRING, // must be declared
+ name STRING,
+ weight DECIMAL(10,3),
+ tags ARRAY<STRING>, -- array
+ price ROW<amount DECIMAL(10,2), currency STRING>, -- embedded document
+ suppliers ARRAY<ROW<name STRING, address STRING>>, -- embedded documents
+ PRIMARY KEY(_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'mongodb-cdc',
+ 'hosts' = 'localhost:27017,localhost:27018,localhost:27019',
+ 'username' = 'flinkuser',
+ 'password' = 'flinkpw',
+ 'database' = 'inventory',
+ 'collection' = 'products'
+);
+```
+
+Features
+--------
+
+### Exactly-Once Processing
+
+The MongoDB CDC connector is a Flink Source connector which will read database snapshot first and then continues to read change stream events with **exactly-once processing** even failures happen.
+
+### Startup Reading Position
+
+The config option `scan.startup.mode` specifies the startup mode for MongoDB CDC consumer. The valid enumerations are:
+
+- `initial` (default): Performs an initial snapshot on the monitored database tables upon first startup, and continue to read the latest oplog.
+- `latest-offset`: Never to perform snapshot on the monitored database tables upon first startup, just read from
+ the end of the oplog which means only have the changes since the connector was started.
+- `timestamp`: Skip snapshot phase and start reading oplog events from a specific timestamp.
+
+For example in DataStream API:
+```java
+MongoDBSource.builder()
+ .startupOptions(StartupOptions.latest()) // Start from latest offset
+ .startupOptions(StartupOptions.timestamp(1667232000000L) // Start from timestamp
+ .build()
+```
+
+and with SQL:
+
+```SQL
+CREATE TABLE mongodb_source (...) WITH (
+ 'connector' = 'mongodb-cdc',
+ 'scan.startup.mode' = 'latest-offset', -- Start from latest offset
+ ...
+ 'scan.startup.mode' = 'timestamp', -- Start from timestamp
+ 'scan.startup.timestamp-millis' = '1667232000000' -- Timestamp under timestamp startup mode
+ ...
+)
+```
+
+### Change Streams
+
+We integrate the [MongoDB's official Kafka Connector](https://docs.mongodb.com/kafka-connector/current/kafka-source/) to read snapshot or change events from MongoDB and drive it by Debezium's `EmbeddedEngine`.
+
+Debezium's `EmbeddedEngine` provides a mechanism for running a single Kafka Connect `SourceConnector` within an application's process, and it can drive any standard Kafka Connect `SourceConnector` properly even which is not provided by Debezium.
+
+We choose **MongoDB's official Kafka Connector** instead of the **Debezium's MongoDB Connector** because they use a different change data capture mechanism.
+
+- For Debezium's MongoDB Connector, it reads the `oplog.rs` collection of each replica-set's master node.
+- For MongoDB's Kafka Connector, it subscribes `Change Stream` of MongoDB.
+
+MongoDB's `oplog.rs` collection doesn't keep the changed record's update before state, so it's hard to extract the full document state by a single `oplog.rs` record and convert it to change log stream accepted by Flink (Insert Only, Upsert, All).
+Additionally, MongoDB 5 (released in July 2021) has changed the oplog format, so the current Debezium connector cannot be used with it.
+
+**Change Stream** is a new feature provided by MongoDB 3.6 for replica sets and sharded clusters that allows applications to access real-time data changes without the complexity and risk of tailing the oplog.<br>
+Applications can use change streams to subscribe to all data changes on a single collection, a database, or an entire deployment, and immediately react to them.
+
+**Lookup Full Document for Update Operations** is a feature provided by **Change Stream** which can configure the change stream to return the most current majority-committed version of the updated document. Because of this feature, we can easily collect the latest full document and convert the change log to Flink's **Upsert Changelog Stream**.
+
+By the way, Debezium's MongoDB change streams exploration mentioned by [DBZ-435](https://issues.redhat.com/browse/DBZ-435) is on roadmap.<br>
+If it's done, we can consider integrating two kinds of source connector for users to choose.
+
+### DataStream Source
+
+The MongoDB CDC connector can also be a DataStream source. You can create a SourceFunction as the following shows:
+
+```java
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.streaming.api.functions.source.SourceFunction;
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+import org.apache.flink.cdc.connectors.mongodb.MongoDBSource;
+
+public class MongoDBSourceExample {
+ public static void main(String[] args) throws Exception {
+ SourceFunction<String> sourceFunction = MongoDBSource.<String>builder()
+ .hosts("localhost:27017")
+ .username("flink")
+ .password("flinkpw")
+ .databaseList("inventory") // set captured database, support regex
+ .collectionList("inventory.products", "inventory.orders") //set captured collections, support regex
+ .deserializer(new JsonDebeziumDeserializationSchema())
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+ env.addSource(sourceFunction)
+ .print().setParallelism(1); // use parallelism 1 for sink to keep message ordering
+
+ env.execute();
+ }
+}
+```
+
+The MongoDB CDC incremental connector (after 2.3.0) can be used as the following shows:
+```java
+import org.apache.flink.api.common.eventtime.WatermarkStrategy;
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.cdc.connectors.mongodb.source.MongoDBSource;
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+
+public class MongoDBIncrementalSourceExample {
+ public static void main(String[] args) throws Exception {
+ MongoDBSource<String> mongoSource =
+ MongoDBSource.<String>builder()
+ .hosts("localhost:27017")
+ .databaseList("inventory") // set captured database, support regex
+ .collectionList("inventory.products", "inventory.orders") //set captured collections, support regex
+ .username("flink")
+ .password("flinkpw")
+ .deserializer(new JsonDebeziumDeserializationSchema())
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+ // enable checkpoint
+ env.enableCheckpointing(3000);
+ // set the source parallelism to 2
+ env.fromSource(mongoSource, WatermarkStrategy.noWatermarks(), "MongoDBIncrementalSource")
+ .setParallelism(2)
+ .print()
+ .setParallelism(1);
+
+ env.execute("Print MongoDB Snapshot + Change Stream");
+ }
+}
+```
+
+**Note:**
+- If database regex is used, `readAnyDatabase` role is required.
+- The incremental snapshot feature only supports after MongoDB 4.0.
+
+### Full Changelog<a name="Full Changelog" id="003" ></a>
+
+MongoDB 6.0 and above supports emitting change stream events containing document before and after the change was made (aka. pre- and post-images).
+
+- The pre-image is the document before it was replaced, updated, or deleted. There is no pre-image for an inserted document.
+
+- The post-image is the document after it was inserted, replaced, or updated. There is no post-image for a deleted document.
+
+MongoDB CDC could make uses of pre-image and post-images to generate full-mode changelog stream including Insert, Update Before, Update After, and Delete data rows, thereby avoiding additional `ChangelogNormalize` downstream node.
+
+To enable this feature, here's some prerequisites:
+
+- MongoDB version must be 6.0 or above;
+- Enable `preAndPostImages` feature at the database level:
+```javascript
+db.runCommand({
+ setClusterParameter: {
+ changeStreamOptions: {
+ preAndPostImages: {
+ expireAfterSeconds: 'off' // replace with custom image expiration time
+ }
+ }
+ }
+})
+```
+- Enable `changeStreamPreAndPostImages` feature for collections to be monitored:
+```javascript
+db.runCommand({
+ collMod: "<< collection name >>",
+ changeStreamPreAndPostImages: {
+ enabled: true
+ }
+})
+```
+- Enable MongoDB CDC's `scan.full-changelog` feature:
+
+```java
+MongoDBSource.builder()
+ .scanFullChangelog(true)
+ ...
+ .build()
+```
+
+or with Flink SQL:
+
+```SQL
+CREATE TABLE mongodb_source (...) WITH (
+ 'connector' = 'mongodb-cdc',
+ 'scan.full-changelog' = 'true',
+ ...
+)
+```
+
+Data Type Mapping
+----------------
+[BSON](https://docs.mongodb.com/manual/reference/bson-types/) short for **Binary JSON** is a binary-encoded serialization of JSON-like format used to store documents and make remote procedure calls in MongoDB.
+
+[Flink SQL Data Type](https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/dev/table/types/) is similar to the SQL standard’s data type terminology which describes the logical type of a value in the table ecosystem. It can be used to declare input and/or output types of operations.
+
+In order to enable Flink SQL to process data from heterogeneous data sources, the data types of heterogeneous data sources need to be uniformly converted to Flink SQL data types.
+
+The following is the mapping of BSON type and Flink SQL type.
+
+
+<div class="wy-table-responsive">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left">BSON type<a href="https://docs.mongodb.com/manual/reference/bson-types/"></a></th>
+ <th class="text-left">Flink SQL type<a href="{% link dev/table/types.md %}"></a></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td></td>
+ <td>TINYINT</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>SMALLINT</td>
+ </tr>
+ <tr>
+ <td>
+ Int<br>
+ <td>INT</td>
+ </tr>
+ <tr>
+ <td>Long</td>
+ <td>BIGINT</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>FLOAT</td>
+ </tr>
+ <tr>
+ <td>Double</td>
+ <td>DOUBLE</td>
+ </tr>
+ <tr>
+ <td>Decimal128</td>
+ <td>DECIMAL(p, s)</td>
+ </tr>
+ <tr>
+ <td>Boolean</td>
+ <td>BOOLEAN</td>
+ </tr>
+ <tr>
+ <td>Date</br>Timestamp</td>
+ <td>DATE</td>
+ </tr>
+ <tr>
+ <td>Date</br>Timestamp</td>
+ <td>TIME</td>
+ </tr>
+ <tr>
+ <td>Date</td>
+ <td>TIMESTAMP(3)</br>TIMESTAMP_LTZ(3)</td>
+ </tr>
+ <tr>
+ <td>Timestamp</td>
+ <td>TIMESTAMP(0)</br>TIMESTAMP_LTZ(0)
+ </td>
+ </tr>
+ <tr>
+ <td>
+ String<br>
+ ObjectId<br>
+ UUID<br>
+ Symbol<br>
+ MD5<br>
+ JavaScript</br>
+ Regex</td>
+ <td>STRING</td>
+ </tr>
+ <tr>
+ <td>BinData</td>
+ <td>BYTES</td>
+ </tr>
+ <tr>
+ <td>Object</td>
+ <td>ROW</td>
+ </tr>
+ <tr>
+ <td>Array</td>
+ <td>ARRAY</td>
+ </tr>
+ <tr>
+ <td>DBPointer</td>
+ <td>ROW<$ref STRING, $id STRING></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="https://docs.mongodb.com/manual/reference/geojson/">GeoJSON</a>
+ </td>
+ <td>
+ Point : ROW<type STRING, coordinates ARRAY<DOUBLE>></br>
+ Line : ROW<type STRING, coordinates ARRAY<ARRAY< DOUBLE>>></br>
+ ...
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+
+Reference
+--------
+
+- [MongoDB Kafka Connector](https://docs.mongodb.com/kafka-connector/current/kafka-source/)
+- [Change Streams](https://docs.mongodb.com/manual/changeStreams/)
+- [Replication](https://docs.mongodb.com/manual/replication/)
+- [Sharding](https://docs.mongodb.com/manual/sharding/)
+- [Database User Roles](https://docs.mongodb.com/manual/reference/built-in-roles/#database-user-roles)
+- [WiredTiger](https://docs.mongodb.com/manual/core/wiredtiger/#std-label-storage-wiredtiger)
+- [Replica set protocol](https://docs.mongodb.com/manual/reference/replica-configuration/#mongodb-rsconf-rsconf.protocolVersion)
+- [Connection String Options](https://docs.mongodb.com/manual/reference/connection-string/#std-label-connections-connection-options)
+- [Document Pre- and Post-Images](https://www.mongodb.com/docs/v6.0/changeStreams/#change-streams-with-document-pre--and-post-images)
+- [BSON Types](https://docs.mongodb.com/manual/reference/bson-types/)
+- [Flink DataTypes](https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/dev/table/types/)
+
+FAQ
+--------
+* [FAQ(English)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ)
+* [FAQ(中文)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ(ZH))
\ No newline at end of file
diff --git a/master/_sources/content/connectors/mysql-cdc(ZH).md.txt b/master/_sources/content/connectors/mysql-cdc(ZH).md.txt
new file mode 100644
index 000000000..778cd4b78
--- /dev/null
+++ b/master/_sources/content/connectors/mysql-cdc(ZH).md.txt
@@ -0,0 +1,1099 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# MySQL CDC 连接器
+
+MySQL CDC 连接器允许从 MySQL 数据库读取快照数据和增量数据。本文描述了如何设置 MySQL CDC 连接器来对 MySQL 数据库运行 SQL 查询。
+
+## 支持的数据库
+
+| Connector | Database | Driver |
+|-----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------|
+| [mysql-cdc](mysql-cdc(ZH).md) | <li> [MySQL](https://dev.mysql.com/doc): 5.6, 5.7, 8.0.x <li> [RDS MySQL](https://www.aliyun.com/product/rds/mysql): 5.6, 5.7, 8.0.x <li> [PolarDB MySQL](https://www.aliyun.com/product/polardb): 5.6, 5.7, 8.0.x <li> [Aurora MySQL](https://aws.amazon.com/cn/rds/aurora): 5.6, 5.7, 8.0.x <li> [MariaDB](https://mariadb.org): 10.x <li> [PolarDB X](https://github.com/ApsaraDB/galaxysql): 2.0.1 | JDBC Driver: 8.0.27 |
+
+依赖
+------------
+
+为了设置 MySQL CDC 连接器,下表提供了使用构建自动化工具(如 Maven 或 SBT )和带有 SQL JAR 包的 SQL 客户端的两个项目的依赖关系信息。
+
+### Maven dependency
+
+```
+<dependency>
+ <groupId>com.ververica</groupId>
+ <artifactId>flink-connector-mysql-cdc</artifactId>
+ <!-- 请使用已发布的版本依赖,snapshot版本的依赖需要本地自行编译。 -->
+ <version>3.0-SNAPSHOT</version>
+</dependency>
+```
+
+### SQL Client JAR
+
+```下载链接仅在已发布版本可用,请在文档网站左下角选择浏览已发布的版本。```
+
+下载 flink-sql-connector-mysql-cdc-3.0-SNAPSHOT.jar 到 `<FLINK_HOME>/lib/` 目录下。
+
+**注意:** flink-sql-connector-mysql-cdc-XXX-SNAPSHOT 版本是开发分支`release-XXX`对应的快照版本,快照版本用户需要下载源代码并编译相应的 jar。用户应使用已经发布的版本,例如 [flink-sql-connector-mysql-cdc-2.2.1.jar](https://mvnrepository.com/artifact/com.ververica/flink-sql-connector-mysql-cdc) 当前已发布的所有版本都可以在 Maven 中央仓库获取。
+
+配置 MySQL 服务器
+----------------
+
+你必须定义一个 MySQL 用户,该用户对 MySQL CDC 连接器监视的所有数据库都应该具有所需的权限。
+
+1. 创建 MySQL 用户:
+
+```sql
+mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
+```
+
+2. 向用户授予所需的权限:
+
+```sql
+mysql> GRANT SELECT, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user' IDENTIFIED BY 'password';
+```
+**注意:** 在 `scan.incremental.snapshot.enabled` 参数已启用时(默认情况下已启用)时,不再需要授予 reload 权限。
+
+3. 刷新用户权限:
+
+```sql
+mysql> FLUSH PRIVILEGES;
+```
+
+查看更多用户权限问题请参考 [权限说明](https://debezium.io/documentation/reference/1.9/connectors/mysql.html#mysql-creating-user).
+
+
+注意事项
+----------------
+
+### 为每个 Reader 设置不同的 Server id
+
+每个用于读取 binlog 的 MySQL 数据库客户端都应该有一个唯一的 id,称为 Server id。 MySQL 服务器将使用此 id 来维护网络连接和 binlog 位置。 因此,如果不同的作业共享相同的 Server id, 则可能导致从错误的 binlog 位置读取数据。
+因此,建议通过为每个 Reader 设置不同的 Server id [SQL Hints](https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sql/hints.html),
+假设 Source 并行度为 4, 我们可以使用 `SELECT * FROM source_table /*+ OPTIONS('server-id'='5401-5404') */ ;` 来为 4 个 Source readers 中的每一个分配唯一的 Server id。
+
+
+### 设置 MySQL 会话超时时间
+
+当为大型数据库创建初始一致快照时,你建立的连接可能会在读取表时碰到超时问题。你可以通过在 MySQL 侧配置 interactive_timeout 和 wait_timeout 来缓解此类问题。
+- `interactive_timeout`: 服务器在关闭交互连接之前等待活动的秒数。 更多信息请参考 [MySQL documentations](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_interactive_timeout).
+- `wait_timeout`: 服务器在关闭非交互连接之前等待活动的秒数。 更多信息请参考 [MySQL documentations](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout).
+
+
+如何创建 MySQL CDC 表
+----------------
+
+MySQL CDC 表可以定义如下:
+
+```sql
+-- 每 3 秒做一次 checkpoint,用于测试,生产配置建议5到10分钟
+Flink SQL> SET 'execution.checkpointing.interval' = '3s';
+
+-- 在 Flink SQL中注册 MySQL 表 'orders'
+Flink SQL> CREATE TABLE orders (
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY(order_id) NOT ENFORCED
+ ) WITH (
+ 'connector' = 'mysql-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '3306',
+ 'username' = 'root',
+ 'password' = '123456',
+ 'database-name' = 'mydb',
+ 'table-name' = 'orders');
+
+-- 从订单表读取全量数据(快照)和增量数据(binlog)
+Flink SQL> SELECT * FROM orders;
+```
+
+连接器选项
+----------------
+
+<div class="highlight">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 10%">Option</th>
+ <th class="text-left" style="width: 8%">Required</th>
+ <th class="text-left" style="width: 7%">Default</th>
+ <th class="text-left" style="width: 10%">Type</th>
+ <th class="text-left" style="width: 65%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>connector</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>指定要使用的连接器, 这里应该是 <code>'mysql-cdc'</code>.</td>
+ </tr>
+ <tr>
+ <td>hostname</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td> MySQL 数据库服务器的 IP 地址或主机名。</td>
+ </tr>
+ <tr>
+ <td>username</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>连接到 MySQL 数据库服务器时要使用的 MySQL 用户的名称。</td>
+ </tr>
+ <tr>
+ <td>password</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>连接 MySQL 数据库服务器时使用的密码。</td>
+ </tr>
+ <tr>
+ <td>database-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>要监视的 MySQL 服务器的数据库名称。数据库名称还支持正则表达式,以监视多个与正则表达式匹配的表。</td>
+ </tr>
+ <tr>
+ <td>table-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>需要监视的 MySQL 数据库的表名。表名支持正则表达式,以监视满足正则表达式的多个表。注意:MySQL CDC 连接器在正则匹配表名时,会把用户填写的 database-name, table-name 通过字符串 `\\.` 连接成一个全路径的正则表达式,然后使用该正则表达式和 MySQL 数据库中表的全限定名进行正则匹配。</td>
+ </tr>
+ <tr>
+ <td>port</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">3306</td>
+ <td>Integer</td>
+ <td> MySQL 数据库服务器的整数端口号。</td>
+ </tr>
+ <tr>
+ <td>server-id</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>读取数据使用的 server id,server id 可以是个整数或者一个整数范围,比如 '5400' 或 '5400-5408',
+ 建议在 'scan.incremental.snapshot.enabled' 参数为启用时,配置成整数范围。因为在当前 MySQL 集群中运行的所有 slave 节点,标记每个 salve 节点的 id 都必须是唯一的。 所以当连接器加入 MySQL 集群作为另一个 slave 节点(并且具有唯一 id 的情况下),它就可以读取 binlog。 默认情况下,连接器会在 5400 和 6400 之间生成一个随机数,但是我们建议用户明确指定 Server id。
+ </td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">true</td>
+ <td>Boolean</td>
+ <td>增量快照是一种读取表快照的新机制,与旧的快照机制相比,
+ 增量快照有许多优点,包括:
+ (1)在快照读取期间,Source 支持并发读取,
+ (2)在快照读取期间,Source 支持进行 chunk 粒度的 checkpoint,
+ (3)在快照读取之前,Source 不需要数据库锁权限。
+ 如果希望 Source 并行运行,则每个并行 Readers 都应该具有唯一的 Server id,所以
+ Server id 必须是类似 `5400-6400` 的范围,并且该范围必须大于并行度。
+ 请查阅 <a href="#a-name-id-001-a">增量快照读取</a> 章节了解更多详细信息。
+ </td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.chunk.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">8096</td>
+ <td>Integer</td>
+ <td>表快照的块大小(行数),读取表的快照时,捕获的表被拆分为多个块。</td>
+ </tr>
+ <tr>
+ <td>scan.snapshot.fetch.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1024</td>
+ <td>Integer</td>
+ <td>读取表快照时每次读取数据的最大条数。</td>
+ </tr>
+ <tr>
+ <td>scan.startup.mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">initial</td>
+ <td>String</td>
+ <td> MySQL CDC 消费者可选的启动模式,
+ 合法的模式为 "initial","earliest-offset","latest-offset","specific-offset" 和 "timestamp"。
+ 请查阅 <a href="#a-name-id-002-a">启动模式</a> 章节了解更多详细信息。</td>
+ </tr>
+ <tr>
+ <td>scan.startup.specific-offset.file</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>在 "specific-offset" 启动模式下,启动位点的 binlog 文件名。</td>
+ </tr>
+ <tr>
+ <td>scan.startup.specific-offset.pos</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Long</td>
+ <td>在 "specific-offset" 启动模式下,启动位点的 binlog 文件位置。</td>
+ </tr>
+ <tr>
+ <td>scan.startup.specific-offset.gtid-set</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>在 "specific-offset" 启动模式下,启动位点的 GTID 集合。</td>
+ </tr>
+ <tr>
+ <td>scan.startup.specific-offset.skip-events</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Long</td>
+ <td>在指定的启动位点后需要跳过的事件数量。</td>
+ </tr>
+ <tr>
+ <td>scan.startup.specific-offset.skip-rows</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Long</td>
+ <td>在指定的启动位点后需要跳过的数据行数量。</td>
+ </tr>
+ <tr>
+ <td>server-time-zone</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>数据库服务器中的会话时区, 例如: "Asia/Shanghai".
+ 它控制 MYSQL 中的时间戳类型如何转换为字符串。
+ 更多请参考 <a href="https://debezium.io/documentation/reference/1.9/connectors/mysql.html#mysql-temporal-types"> 这里</a>.
+ 如果没有设置,则使用ZoneId.systemDefault()来确定服务器时区。
+ </td>
+ </tr>
+ <tr>
+ <td>debezium.min.row.
+ count.to.stream.result</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1000</td>
+ <td>Integer</td>
+ <td>
+ 在快照操作期间,连接器将查询每个包含的表,以生成该表中所有行的读取事件。 此参数确定 MySQL 连接是否将表的所有结果拉入内存(速度很快,但需要大量内存), 或者结果是否需要流式传输(传输速度可能较慢,但适用于非常大的表)。 该值指定了在连接器对结果进行流式处理之前,表必须包含的最小行数,默认值为1000。将此参数设置为`0`以跳过所有表大小检查,并始终在快照期间对所有结果进行流式处理。</td>
+ </tr>
+ <tr>
+ <td>connect.timeout</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">30s</td>
+ <td>Duration</td>
+ <td>连接器在尝试连接到 MySQL 数据库服务器后超时前应等待的最长时间。</td>
+ </tr>
+ <tr>
+ <td>connect.max-retries</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">3</td>
+ <td>Integer</td>
+ <td>连接器应重试以建立 MySQL 数据库服务器连接的最大重试次数。</td>
+ </tr>
+ <tr>
+ <td>connection.pool.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">20</td>
+ <td>Integer</td>
+ <td>连接池大小。</td>
+ </tr>
+ <tr>
+ <td>jdbc.properties.*</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">20</td>
+ <td>String</td>
+ <td>传递自定义 JDBC URL 属性的选项。用户可以传递自定义属性,如 'jdbc.properties.useSSL' = 'false'.</td>
+ </tr>
+ <tr>
+ <td>heartbeat.interval</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">30s</td>
+ <td>Duration</td>
+ <td>用于跟踪最新可用 binlog 偏移的发送心跳事件的间隔。</td>
+ </tr>
+ <tr>
+ <td>debezium.*</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>将 Debezium 的属性传递给 Debezium 嵌入式引擎,该引擎用于从 MySQL 服务器捕获数据更改。
+ 例如: <code>'debezium.snapshot.mode' = 'never'</code>.
+ 查看更多关于 <a href="https://debezium.io/documentation/reference/1.9/connectors/mysql.html#mysql-connector-properties"> Debezium 的 MySQL 连接器属性</a></td>
+ </tr>
+ <tr>
+ <td>scan.incremental.close-idle-reader.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>是否在快照结束后关闭空闲的 Reader。 此特性需要 flink 版本大于等于 1.14 并且 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' 需要设置为 true。<br>
+ 若 flink 版本大于等于 1.15,'execution.checkpointing.checkpoints-after-tasks-finish.enabled' 默认值变更为 true,可以不用显式配置 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' = true。</td>
+ </tr>
+ <tr>
+ <td>debezium.binary.handling.mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>debezium.binary.handling.mode 参数可以设置为以下值:
+ none:不进行任何处理,直接将二进制数据类型作为字节数组(byte array)传输。
+ base64:将二进制数据类型转换为 Base64 编码的字符串,然后传输。
+ hex:将二进制数据类型转换为十六进制编码的字符串,然后传输。
+ 默认值为 none。根据您的需求和数据类型,您可以选择合适的处理模式。如果您的数据库中包含大量二进制数据类型,建议使用 base64 或 hex 模式,以便在传输过程中更容易处理。
+ </tr>
+ </tbody>
+</table>
+</div>
+
+支持的元数据
+----------------
+
+下表中的元数据可以在 DDL 中作为只读(虚拟)meta 列声明。
+
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 15%">Key</th>
+ <th class="text-left" style="width: 30%">DataType</th>
+ <th class="text-left" style="width: 55%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>table_name</td>
+ <td>STRING NOT NULL</td>
+ <td>当前记录所属的表名称。</td>
+ </tr>
+ <tr>
+ <td>database_name</td>
+ <td>STRING NOT NULL</td>
+ <td>当前记录所属的库名称。</td>
+ </tr>
+ <tr>
+ <td>op_ts</td>
+ <td>TIMESTAMP_LTZ(3) NOT NULL</td>
+ <td>当前记录表在数据库中更新的时间。 <br>如果从表的快照而不是 binlog 读取记录,该值将始终为0。</td>
+ </tr>
+ <tr>
+ <td>row_kind</td>
+ <td>STRING NOT NULL</td>
+ <td>当前记录对应的 changelog 类型。注意:当 Source 算子选择为每条记录输出 row_kind 字段后,下游 SQL 算子在处理消息撤回时会因为这个字段不同而比对失败,
+建议只在简单的同步作业中引用该元数据列。<br>'+I' 表示 INSERT 数据,'-D' 表示 DELETE 数据,'-U' 表示 UPDATE_BEFORE 数据,'+U' 表示 UPDATE_AFTER 数据。
+</td>
+ </tr>
+ </tbody>
+</table>
+
+下述创建表示例展示元数据列的用法:
+
+```sql
+CREATE TABLE products
+(
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ table_name STRING METADATA FROM 'table_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ operation STRING METADATA FROM 'row_kind' VIRTUAL,
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY (order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'mysql-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '3306',
+ 'username' = 'root',
+ 'password' = '123456',
+ 'database-name' = 'mydb',
+ 'table-name' = 'orders'
+ );
+```
+
+下述创建表示例展示使用正则表达式匹配多张库表的用法:
+
+```sql
+CREATE TABLE products
+(
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ table_name STRING METADATA FROM 'table_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ operation STRING METADATA FROM 'row_kind' VIRTUAL,
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY (order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'mysql-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '3306',
+ 'username' = 'root',
+ 'password' = '123456',
+ 'database-name' = '(^(test).*|^(tpc).*|txc|.*[p$]|t{2})',
+ 'table-name' = '(t[5-8]|tt)'
+ );
+```
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 15%">匹配示例</th>
+ <th class="text-left" style="width: 30%">表达式</th>
+ <th class="text-left" style="width: 55%">描述</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>前缀匹配</td>
+ <td>^(test).*</td>
+ <td>匹配前缀为test的数据库名或表名,例如test1、test2等。</td>
+ </tr>
+ <tr>
+ <td>后缀匹配</td>
+ <td>.*[p$]</td>
+ <td>匹配后缀为p的数据库名或表名,例如cdcp、edcp等。</td>
+ </tr>
+ <tr>
+ <td>特定匹配</td>
+ <td>txc</td>
+ <td>匹配具体的数据库名或表名。</td>
+ </tr>
+ </tbody>
+</table>
+
+进行库表匹配时,会使用正则表达式 `database-name\\.table-name` 来与MySQL表的全限定名做匹配,所以该例子使用 `(^(test).*|^(tpc).*|txc|.*[p$]|t{2})\\.(t[5-8]|tt)`,可以匹配到表 txc.tt、test2.test5。
+
+支持的特性
+--------
+
+### 增量快照读取<a name="增量快照读取" id="001" ></a>
+
+增量快照读取是一种读取表快照的新机制。与旧的快照机制相比,增量快照具有许多优点,包括:
+* (1)在快照读取期间,Source 支持并发读取,
+* (2)在快照读取期间,Source 支持进行 chunk 粒度的 checkpoint,
+* (3)在快照读取之前,Source 不需要数据库锁权限。
+
+如果希望 source 并行运行,则每个并行 reader 都应该具有唯一的 server id,因此`server id`的范围必须类似于 `5400-6400`,
+且范围必须大于并行度。在增量快照读取过程中,MySQL CDC Source 首先通过表的主键将表划分成多个块(chunk),
+然后 MySQL CDC Source 将多个块分配给多个 reader 以并行读取表的数据。
+
+#### 并发读取
+
+增量快照读取提供了并行读取快照数据的能力。
+你可以通过设置作业并行度的方式来控制 Source 的并行度 `parallelism.default`. For example, in SQL CLI:
+
+```sql
+Flink SQL> SET 'parallelism.default' = 8;
+```
+
+#### 全量阶段支持 checkpoint
+
+增量快照读取提供了在区块级别执行检查点的能力。它使用新的快照读取机制解决了以前版本中的检查点超时问题。
+
+#### 无锁算法
+
+MySQL CDC source 使用 增量快照算法, 避免了数据库锁的使用,因此不需要 “RELOAD” 权限。
+
+#### MySQL高可用性支持
+
+```mysql cdc``` 连接器通过使用 [GTID](https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-concepts.html) 提供 MySQL 高可用集群的高可用性信息。为了获得高可用性, MySQL集群需要启用 GTID 模式,MySQL 配置文件中的 GTID 模式应该包含以下设置:
+
+```yaml
+gtid_mode = on
+enforce_gtid_consistency = on
+```
+
+如果监控的MySQL服务器地址包含从实例,则需要对MySQL配置文件设置以下设置。设置 ```log slave updates=1``` 允许从实例也将从主实例同步的数据写入其binlog, 这确保了```mysql cdc```连接器可以使用从实例中的全部数据。
+
+```yaml
+gtid_mode = on
+enforce_gtid_consistency = on
+log-slave-updates = 1
+```
+
+MySQL 集群中你监控的服务器出现故障后, 你只需将受监视的服务器地址更改为其他可用服务器,然后从最新的检查点/保存点重新启动作业, 作业将从 checkpoint/savepoint 恢复,不会丢失任何记录。
+
+建议为 MySQL 集群配置 DNS(域名服务)或 VIP(虚拟 IP 地址), 使用```mysql cdc```连接器的 DNS 或 VIP 地址, DNS或VIP将自动将网络请求路由到活动MySQL服务器。 这样,你就不再需要修改地址和重新启动管道。
+
+#### MySQL心跳事件支持
+
+如果表不经常更新,则 binlog 文件或 GTID 集可能已在其最后提交的 binlog 位置被清理。
+在这种情况下,CDC 作业可能会重新启动失败。因此心跳事件将帮助更新 binlog 位置。 默认情况下,MySQL CDC Source 启用心跳事件,间隔设置为30秒。 可以使用表选项```heartbeat```指定间隔。或将选项设置为```0s```以禁用心跳事件。
+
+#### 增量快照读取的工作原理
+
+当 MySQL CDC Source 启动时,它并行读取表的快照,然后以单并行度的方式读取表的 binlog。
+
+在快照阶段,根据表的主键和表行的大小将快照切割成多个快照块。
+快照块被分配给多个快照读取器。每个快照读取器使用 [区块读取算法](#snapshot-chunk-reading) 并将读取的数据发送到下游。
+Source 会管理块的进程状态(完成或未完成),因此快照阶段的 Source 可以支持块级别的 checkpoint。
+如果发生故障,可以恢复 Source 并继续从最后完成的块中读取块。
+
+所有快照块完成后,Source 将继续在单个任务中读取 binlog。
+为了保证快照记录和 binlog 记录的全局数据顺序,binlog reader 将开始读取数据直到快照块完成后并有一个完整的 checkpoint,以确保所有快照数据已被下游消费。
+binlog reader 在状态中跟踪所使用的 binlog 位置,因此 binlog 阶段的 Source 可以支持行级别的 checkpoint。
+
+Flink 定期为 Source 执行 checkpoint,在故障转移的情况下,作业将重新启动并从最后一个成功的 checkpoint 状态恢复,并保证只执行一次语义。
+
+##### 全量阶段分片算法
+
+在执行增量快照读取时,MySQL CDC source 需要一个用于分片的的算法。
+MySQL CDC Source 使用主键列将表划分为多个分片(chunk)。 默认情况下,MySQL CDC source 会识别表的主键列,并使用主键中的第一列作为用作分片列。
+如果表中没有主键, 增量快照读取将失败,你可以禁用 `scan.incremental.snapshot.enabled` 来回退到旧的快照读取机制。
+
+对于数值和自动增量拆分列,MySQL CDC Source 按固定步长高效地拆分块。
+例如,如果你有一个主键列为`id`的表,它是自动增量 BIGINT 类型,最小值为`0`,最大值为`100`,
+和表选项 `scan.incremental.snapshot.chunk.size` 大小 `value`为`25`,表将被拆分为以下块:
+
+```
+ (-∞, 25),
+ [25, 50),
+ [50, 75),
+ [75, 100),
+ [100, +∞)
+```
+
+对于其他主键列类型, MySQL CDC Source 将以下形式执行语句: `SELECT MAX(STR_ID) AS chunk_high FROM (SELECT * FROM TestTable WHERE STR_ID > 'uuid-001' limit 25)` 来获得每个区块的低值和高值,
+分割块集如下所示:
+
+ ```
+ (-∞, 'uuid-001'),
+ ['uuid-001', 'uuid-009'),
+ ['uuid-009', 'uuid-abc'),
+ ['uuid-abc', 'uuid-def'),
+ [uuid-def, +∞).
+```
+
+##### Chunk 读取算法
+
+对于上面的示例`MyTable`,如果 MySQL CDC Source 并行度设置为 4,MySQL CDC Source 将在每一个 executes 运行 4 个 Readers **通过偏移信号算法**
+获取快照区块的最终一致输出。 **偏移信号算法**简单描述如下:
+
+* (1) 将当前 binlog 位置记录为`LOW`偏移量
+* (2) 通过执行语句读取并缓冲快照区块记录 `SELECT * FROM MyTable WHERE id > chunk_low AND id <= chunk_high`
+* (3) 将当前 binlog 位置记录为`HIGH`偏移量
+* (4) 从`LOW`偏移量到`HIGH`偏移量读取属于快照区块的 binlog 记录
+* (5) 将读取的 binlog 记录向上插入缓冲区块记录,并发出缓冲区中的所有记录作为快照区块的最终输出(全部作为插入记录)
+* (6) 继续读取并发出属于 *单个 binlog reader* 中`HIGH`偏移量之后的区块的 binlog 记录。
+
+该算法的是基于 [DBLog Paper](https://arxiv.org/pdf/2010.12597v1.pdf) 并结合 Flink 的一个变种, 请参考它了解更多详细信息。
+
+**注意:** 如果主键的实际值在其范围内分布不均匀,则在增量快照读取时可能会导致任务不平衡。
+
+### Exactly-Once 处理
+
+MySQL CDC 连接器是一个 Flink Source 连接器,它将首先读取表快照块,然后继续读取 binlog,
+无论是在快照阶段还是读取 binlog 阶段,MySQL CDC 连接器都会在处理时**准确读取数据**,即使任务出现了故障。
+
+### 启动模式<a name="启动模式" id="002" ></a>
+
+配置选项```scan.startup.mode```指定 MySQL CDC 使用者的启动模式。有效枚举包括:
+
+- `initial` (默认):在第一次启动时对受监视的数据库表执行初始快照,并继续读取最新的 binlog。
+- `earliest-offset`:跳过快照阶段,从可读取的最早 binlog 位点开始读取
+- `latest-offset`:首次启动时,从不对受监视的数据库表执行快照, 连接器仅从 binlog 的结尾处开始读取,这意味着连接器只能读取在连接器启动之后的数据更改。
+- `specific-offset`:跳过快照阶段,从指定的 binlog 位点开始读取。位点可通过 binlog 文件名和位置指定,或者在 GTID 在集群上启用时通过 GTID 集合指定。
+- `timestamp`:跳过快照阶段,从指定的时间戳开始读取 binlog 事件。
+
+例如使用 DataStream API:
+```java
+MySQLSource.builder()
+ .startupOptions(StartupOptions.earliest()) // 从最早位点启动
+ .startupOptions(StartupOptions.latest()) // 从最晚位点启动
+ .startupOptions(StartupOptions.specificOffset("mysql-bin.000003", 4L) // 从指定 binlog 文件名和位置启动
+ .startupOptions(StartupOptions.specificOffset("24DA167-0C0C-11E8-8442-00059A3C7B00:1-19")) // 从 GTID 集合启动
+ .startupOptions(StartupOptions.timestamp(1667232000000L) // 从时间戳启动
+ ...
+ .build()
+```
+
+使用 SQL:
+
+```SQL
+CREATE TABLE mysql_source (...) WITH (
+ 'connector' = 'mysql-cdc',
+ 'scan.startup.mode' = 'earliest-offset', -- 从最早位点启动
+ 'scan.startup.mode' = 'latest-offset', -- 从最晚位点启动
+ 'scan.startup.mode' = 'specific-offset', -- 从特定位点启动
+ 'scan.startup.mode' = 'timestamp', -- 从特定位点启动
+ 'scan.startup.specific-offset.file' = 'mysql-bin.000003', -- 在特定位点启动模式下指定 binlog 文件名
+ 'scan.startup.specific-offset.pos' = '4', -- 在特定位点启动模式下指定 binlog 位置
+ 'scan.startup.specific-offset.gtid-set' = '24DA167-0C0C-11E8-8442-00059A3C7B00:1-19', -- 在特定位点启动模式下指定 GTID 集合
+ 'scan.startup.timestamp-millis' = '1667232000000' -- 在时间戳启动模式下指定启动时间戳
+ ...
+)
+```
+
+**注意**:
+1. MySQL source 会在 checkpoint 时将当前位点以 INFO 级别打印到日志中,日志前缀为 "Binlog offset on checkpoint {checkpoint-id}"。
+该日志可以帮助将作业从某个 checkpoint 的位点开始启动的场景。
+2. 如果捕获变更的表曾经发生过表结构变化,从最早位点、特定位点或时间戳启动可能会发生错误,因为 Debezium 读取器会在内部保存当前的最新表结构,结构不匹配的早期数据无法被正确解析。
+
+
+### DataStream Source
+
+```java
+import org.apache.flink.api.common.eventtime.WatermarkStrategy;
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+import org.apache.flink.cdc.connectors.mysql.source.MySqlSource;
+
+public class MySqlSourceExample {
+ public static void main(String[] args) throws Exception {
+ MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
+ .hostname("yourHostname")
+ .port(yourPort)
+ .databaseList("yourDatabaseName") // 设置捕获的数据库, 如果需要同步整个数据库,请将 tableList 设置为 ".*".
+ .tableList("yourDatabaseName.yourTableName") // 设置捕获的表
+ .username("yourUsername")
+ .password("yourPassword")
+ .deserializer(new JsonDebeziumDeserializationSchema()) // 将 SourceRecord 转换为 JSON 字符串
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+ // 设置 3s 的 checkpoint 间隔
+ env.enableCheckpointing(3000);
+
+ env
+ .fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "MySQL Source")
+ // 设置 source 节点的并行度为 4
+ .setParallelism(4)
+ .print().setParallelism(1); // 设置 sink 节点并行度为 1
+
+ env.execute("Print MySQL Snapshot + Binlog");
+ }
+}
+```
+
+**注意:** 请参考 [Deserialization](../about.html#deserialization) 有关 JSON 反序列化的更多详细信息。
+
+### 动态加表
+
+扫描新添加的表功能使你可以添加新表到正在运行的作业中,新添加的表将首先读取其快照数据,然后自动读取其变更日志。
+
+想象一下这个场景:一开始, Flink 作业监控表 `[product, user, address]`, 但几天后,我们希望这个作业还可以监控表 `[order, custom]`,这些表包含历史数据,我们需要作业仍然可以复用作业的已有状态,动态加表功能可以优雅地解决此问题。
+
+以下操作显示了如何启用此功能来解决上述场景。 使用现有的 Flink CDC Source 作业,如下:
+
+```java
+ MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
+ .hostname("yourHostname")
+ .port(yourPort)
+ .scanNewlyAddedTableEnabled(true) // 启用扫描新添加的表功能
+ .databaseList("db") // 设置捕获的数据库
+ .tableList("db.product, db.user, db.address") // 设置捕获的表 [product, user, address]
+ .username("yourUsername")
+ .password("yourPassword")
+ .deserializer(new JsonDebeziumDeserializationSchema()) // 将 SourceRecord 转换为 JSON 字符串
+ .build();
+ // 你的业务代码
+```
+
+如果我们想添加新表 `[order, custom]` 对于现有的 Flink 作业,只需更新 `tableList()` 将新增表 `[order, custom]` 加入并从已有的 savepoint 恢复作业。
+
+_Step 1_: 使用 savepoint 停止现有的 Flink 作业。
+```shell
+$ ./bin/flink stop $Existing_Flink_JOB_ID
+```
+```shell
+Suspending job "cca7bc1061d61cf15238e92312c2fc20" with a savepoint.
+Savepoint completed. Path: file:/tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab
+```
+_Step 2_: 更新现有 Flink 作业的表列表选项。
+1. 更新 `tableList()` 参数.
+2. 编译更新后的作业,示例如下:
+```java
+ MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
+ .hostname("yourHostname")
+ .port(yourPort)
+ .scanNewlyAddedTableEnabled(true)
+ .databaseList("db")
+ .tableList("db.product, db.user, db.address, db.order, db.custom") // 设置捕获的表 [product, user, address ,order, custom]
+ .username("yourUsername")
+ .password("yourPassword")
+ .deserializer(new JsonDebeziumDeserializationSchema()) // 将 SourceRecord 转换为 JSON 字符串
+ .build();
+ // 你的业务代码
+```
+_Step 3_: 从 savepoint 还原更新后的 Flink 作业。
+```shell
+$ ./bin/flink run \
+ --detached \
+ --fromSavepoint /tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab \
+ ./FlinkCDCExample.jar
+```
+**注意:** 请参考文档 [Restore the job from previous savepoint](https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/deployment/cli/#command-line-interface) 了解更多详细信息。
+
+### 关于无主键表
+
+从2.4.0 版本开始支持无主键表,使用无主键表必须设置 `scan.incremental.snapshot.chunk.key-column`,且只能选择非空类型的一个字段。
+
+在使用无主键表时,需要注意以下两种情况。
+
+1. 配置 `scan.incremental.snapshot.chunk.key-column` 时,如果表中存在索引,请尽量使用索引中的列来加快 select 速度。
+2. 无主键表的处理语义由 `scan.incremental.snapshot.chunk.key-column` 指定的列的行为决定:
+ * 如果指定的列不存在更新操作,此时可以保证 Exactly once 语义。
+ * 如果指定的列存在更新操作,此时只能保证 At least once 语义。但可以结合下游,通过指定下游主键,结合幂等性操作来保证数据的正确性。
+
+### 关于二进制类型数据转换为base64编码数据
+
+```sql
+CREATE TABLE products (
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ table_name STRING METADATA FROM 'table_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ binary_data STRING,
+ PRIMARY KEY(order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'mysql-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '3306',
+ 'username' = 'root',
+ 'password' = '123456',
+ 'database-name' = 'test_db',
+ 'table-name' = 'test_tb',
+ 'debezium.binary.handling.mode' = 'base64'
+);
+```
+
+`binary_data`字段, 在数据库中的类型是VARBINARY(N),我们在有些场景需要将二进制数据转换为base64编码的字符串数据,可以通过添加参数'debezium.binary.handling.mode' = 'base64'来开启这个功能,
+添加此参数的情况下,我们就可以在flink sql中将该字段类型映射为`STRING`,从而获取base64编码的字符串数据。
+
+数据类型映射
+----------------
+
+<div class="wy-table-responsive">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width:30%;">MySQL type<a href="https://dev.mysql.com/doc/man/8.0/en/data-types.html"></a></th>
+ <th class="text-left" style="width:10%;">Flink SQL type<a href="{% link dev/table/types.md %}"></a></th>
+ <th class="text-left" style="width:60%;">NOTE</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>TINYINT</td>
+ <td>TINYINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ SMALLINT<br>
+ TINYINT UNSIGNED<br>
+ TINYINT UNSIGNED ZEROFILL
+ </td>
+ <td>SMALLINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ INT<br>
+ MEDIUMINT<br>
+ SMALLINT UNSIGNED<br>
+ SMALLINT UNSIGNED ZEROFILL
+ </td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BIGINT<br>
+ INT UNSIGNED<br>
+ INT UNSIGNED ZEROFILL<br>
+ MEDIUMINT UNSIGNED<br>
+ MEDIUMINT UNSIGNED ZEROFILL
+ </td>
+ <td>BIGINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BIGINT UNSIGNED<br>
+ BIGINT UNSIGNED ZEROFILL<br>
+ SERIAL
+ </td>
+ <td>DECIMAL(20, 0)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ FLOAT<br>
+ FLOAT UNSIGNED<br>
+ FLOAT UNSIGNED ZEROFILL
+ </td>
+ <td>FLOAT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ REAL<br>
+ REAL UNSIGNED<br>
+ REAL UNSIGNED ZEROFILL<br>
+ DOUBLE<br>
+ DOUBLE UNSIGNED<br>
+ DOUBLE UNSIGNED ZEROFILL<br>
+ DOUBLE PRECISION<br>
+ DOUBLE PRECISION UNSIGNED<br>
+ DOUBLE PRECISION UNSIGNED ZEROFILL
+ </td>
+ <td>DOUBLE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ NUMERIC(p, s)<br>
+ NUMERIC(p, s) UNSIGNED<br>
+ NUMERIC(p, s) UNSIGNED ZEROFILL<br>
+ DECIMAL(p, s)<br>
+ DECIMAL(p, s) UNSIGNED<br>
+ DECIMAL(p, s) UNSIGNED ZEROFILL<br>
+ FIXED(p, s)<br>
+ FIXED(p, s) UNSIGNED<br>
+ FIXED(p, s) UNSIGNED ZEROFILL<br>
+ where p <= 38<br>
+ </td>
+ <td>DECIMAL(p, s)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ NUMERIC(p, s)<br>
+ NUMERIC(p, s) UNSIGNED<br>
+ NUMERIC(p, s) UNSIGNED ZEROFILL<br>
+ DECIMAL(p, s)<br>
+ DECIMAL(p, s) UNSIGNED<br>
+ DECIMAL(p, s) UNSIGNED ZEROFILL<br>
+ FIXED(p, s)<br>
+ FIXED(p, s) UNSIGNED<br>
+ FIXED(p, s) UNSIGNED ZEROFILL<br>
+ where 38 < p <= 65<br>
+ </td>
+ <td>STRING</td>
+ <td>在 MySQL 中,十进制数据类型的精度高达 65,但在 Flink 中,十进制数据类型的精度仅限于 38。所以,如果定义精度大于 38 的十进制列,则应将其映射到字符串以避免精度损失。</td>
+ </tr>
+ <tr>
+ <td>
+ BOOLEAN<br>
+ TINYINT(1)<br>
+ BIT(1)
+ </td>
+ <td>BOOLEAN</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>DATE</td>
+ <td>DATE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TIME [(p)]</td>
+ <td>TIME [(p)]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TIMESTAMP [(p)]<br>
+ DATETIME [(p)]
+ </td>
+ <td>TIMESTAMP [(p)]
+ </td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ CHAR(n)
+ </td>
+ <td>CHAR(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ VARCHAR(n)
+ </td>
+ <td>VARCHAR(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BIT(n)
+ </td>
+ <td>BINARY(⌈(n + 7) / 8⌉)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BINARY(n)
+ </td>
+ <td>BINARY(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ VARBINARY(N)
+ </td>
+ <td>VARBINARY(N)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ TINYTEXT<br>
+ TEXT<br>
+ MEDIUMTEXT<br>
+ LONGTEXT<br>
+ </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ TINYBLOB<br>
+ BLOB<br>
+ MEDIUMBLOB<br>
+ LONGBLOB<br>
+ </td>
+ <td>BYTES</td>
+ <td>目前,对于 MySQL 中的 BLOB 数据类型,仅支持长度不大于 2147483647(2**31-1)的 blob。 </td>
+ </tr>
+ <tr>
+ <td>
+ YEAR
+ </td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ ENUM
+ </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ JSON
+ </td>
+ <td>STRING</td>
+ <td> JSON 数据类型将在 Flink 中转换为 JSON 格式的字符串。</td>
+ </tr>
+ <tr>
+ <td>
+ SET
+ </td>
+ <td>ARRAY<STRING></td>
+ <td>因为 MySQL 中的 SET 数据类型是一个字符串对象,可以有零个或多个值
+ 它应该始终映射到字符串数组。
+ </td>
+ </tr>
+ <tr>
+ <td>
+ GEOMETRY<br>
+ POINT<br>
+ LINESTRING<br>
+ POLYGON<br>
+ MULTIPOINT<br>
+ MULTILINESTRING<br>
+ MULTIPOLYGON<br>
+ GEOMETRYCOLLECTION<br>
+ </td>
+ <td>
+ STRING
+ </td>
+ <td>
+ MySQL 中的空间数据类型将转换为具有固定 Json 格式的字符串。
+ 请参考 MySQL <a href="#a-name-id-003-a">空间数据类型映射</a> 章节了解更多详细信息。
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+### 空间数据类型映射<a name="空间数据类型映射" id="003"></a>
+
+MySQL中除`GEOMETRYCOLLECTION`之外的空间数据类型都会转换为 Json 字符串,格式固定,如:<br>
+```json
+{"srid": 0 , "type": "xxx", "coordinates": [0, 0]}
+```
+字段`srid`标识定义几何体的 SRS,如果未指定 SRID,则 SRID 0 是新几何体值的默认值。
+由于 MySQL 8+ 在定义空间数据类型时只支持特定的 SRID,因此在版本较低的MySQL中,字段`srid`将始终为 0。
+
+字段`type`标识空间数据类型,例如`POINT`/`LINESTRING`/`POLYGON`。
+
+字段`coordinates`表示空间数据的`坐标`。
+
+对于`GEOMETRYCOLLECTION`,它将转换为 Json 字符串,格式固定,如:<br>
+```json
+{"srid": 0 , "type": "GeometryCollection", "geometries": [{"type":"Point","coordinates":[10,10]}]}
+```
+
+`Geometrics`字段是一个包含所有空间数据的数组。
+
+不同空间数据类型映射的示例如下:
+<div class="wy-table-responsive">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left">Spatial data in MySQL</th>
+ <th class="text-left">Json String converted in Flink</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>POINT(1 1)</td>
+ <td>{"coordinates":[1,1],"type":"Point","srid":0}</td>
+ </tr>
+ <tr>
+ <td>LINESTRING(3 0, 3 3, 3 5)</td>
+ <td>{"coordinates":[[3,0],[3,3],[3,5]],"type":"LineString","srid":0}</td>
+ </tr>
+ <tr>
+ <td>POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))</td>
+ <td>{"coordinates":[[[1,1],[2,1],[2,2],[1,2],[1,1]]],"type":"Polygon","srid":0}</td>
+ </tr>
+ <tr>
+ <td>MULTIPOINT((1 1),(2 2))</td>
+ <td>{"coordinates":[[1,1],[2,2]],"type":"MultiPoint","srid":0}</td>
+ </tr>
+ <tr>
+ <td>MultiLineString((1 1,2 2,3 3),(4 4,5 5))</td>
+ <td>{"coordinates":[[[1,1],[2,2],[3,3]],[[4,4],[5,5]]],"type":"MultiLineString","srid":0}</td>
+ </tr>
+ <tr>
+ <td>MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)), ((5 5, 7 5, 7 7, 5 7, 5 5)))</td>
+ <td>{"coordinates":[[[[0,0],[10,0],[10,10],[0,10],[0,0]]],[[[5,5],[7,5],[7,7],[5,7],[5,5]]]],"type":"MultiPolygon","srid":0}</td>
+ </tr>
+ <tr>
+ <td>GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))</td>
+ <td>{"geometries":[{"type":"Point","coordinates":[10,10]},{"type":"Point","coordinates":[30,30]},{"type":"LineString","coordinates":[[15,15],[20,20]]}],"type":"GeometryCollection","srid":0}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+常见问题
+--------
+* [FAQ(English)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ)
+* [FAQ(中文)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ(ZH))
diff --git a/master/_sources/content/connectors/mysql-cdc.md.txt b/master/_sources/content/connectors/mysql-cdc.md.txt
new file mode 100644
index 000000000..a2b95a8af
--- /dev/null
+++ b/master/_sources/content/connectors/mysql-cdc.md.txt
@@ -0,0 +1,1113 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# MySQL CDC Connector
+
+The MySQL CDC connector allows for reading snapshot data and incremental data from MySQL database. This document describes how to setup the MySQL CDC connector to run SQL queries against MySQL databases.
+
+
+## Supported Databases
+
+| Connector | Database | Driver |
+|-----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------|
+| [mysql-cdc](mysql-cdc.md) | <li> [MySQL](https://dev.mysql.com/doc): 5.6, 5.7, 8.0.x <li> [RDS MySQL](https://www.aliyun.com/product/rds/mysql): 5.6, 5.7, 8.0.x <li> [PolarDB MySQL](https://www.aliyun.com/product/polardb): 5.6, 5.7, 8.0.x <li> [Aurora MySQL](https://aws.amazon.com/cn/rds/aurora): 5.6, 5.7, 8.0.x <li> [MariaDB](https://mariadb.org): 10.x <li> [PolarDB X](https://github.com/ApsaraDB/galaxysql): 2.0.1 | JDBC Driver: 8.0.27 |
+
+Dependencies
+------------
+
+In order to setup the MySQL CDC connector, the following table provides dependency information for both projects using a build automation tool (such as Maven or SBT) and SQL Client with SQL JAR bundles.
+
+### Maven dependency
+
+```
+<dependency>
+ <groupId>com.ververica</groupId>
+ <artifactId>flink-connector-mysql-cdc</artifactId>
+ <!-- The dependency is available only for stable releases, SNAPSHOT dependencies need to be built based on master or release- branches by yourself. -->
+ <version>3.0-SNAPSHOT</version>
+</dependency>
+```
+
+### SQL Client JAR
+
+```Download link is available only for stable releases.```
+
+Download flink-sql-connector-mysql-cdc-3.0-SNAPSHOT.jar and put it under `<FLINK_HOME>/lib/`.
+
+**Note:** flink-sql-connector-mysql-cdc-XXX-SNAPSHOT version is the code corresponding to the development branch. Users need to download the source code and compile the corresponding jar. Users should use the released version, such as [flink-sql-connector-mysql-cdc-2.3.0.jar](https://mvnrepository.com/artifact/com.ververica/flink-connector-mysql-cdc), the released version will be available in the Maven central warehouse.
+
+Setup MySQL server
+----------------
+
+You have to define a MySQL user with appropriate permissions on all databases that the Debezium MySQL connector monitors.
+
+1. Create the MySQL user:
+
+```sql
+mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
+```
+
+2. Grant the required permissions to the user:
+
+```sql
+mysql> GRANT SELECT, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user' IDENTIFIED BY 'password';
+```
+**Note:** The RELOAD permissions is not required any more when `scan.incremental.snapshot.enabled` is enabled (enabled by default).
+
+3. Finalize the user’s permissions:
+
+```sql
+mysql> FLUSH PRIVILEGES;
+```
+
+See more about the [permission explanation](https://debezium.io/documentation/reference/1.9/connectors/mysql.html#mysql-creating-user).
+
+
+Notes
+----------------
+
+### Set a different SERVER ID for each reader
+
+Every MySQL database client for reading binlog should have a unique id, called server id. MySQL server will use this id to maintain network connection and the binlog position. Therefore, if different jobs share a same server id, it may result to read from wrong binlog position.
+Thus, it is recommended to set different server id for each reader via the [SQL Hints](https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sql/hints.html),
+e.g. assuming the source parallelism is 4, then we can use `SELECT * FROM source_table /*+ OPTIONS('server-id'='5401-5404') */ ;` to assign unique server id for each of the 4 source readers.
+
+
+### Setting up MySQL session timeouts
+
+When an initial consistent snapshot is made for large databases, your established connection could timeout while the tables are being read. You can prevent this behavior by configuring interactive_timeout and wait_timeout in your MySQL configuration file.
+- `interactive_timeout`: The number of seconds the server waits for activity on an interactive connection before closing it. See [MySQL documentations](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_interactive_timeout).
+- `wait_timeout`: The number of seconds the server waits for activity on a noninteractive connection before closing it. See [MySQL documentations](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout).
+
+
+How to create a MySQL CDC table
+----------------
+
+The MySQL CDC table can be defined as following:
+
+```sql
+-- checkpoint every 3000 milliseconds
+Flink SQL> SET 'execution.checkpointing.interval' = '3s';
+
+-- register a MySQL table 'orders' in Flink SQL
+Flink SQL> CREATE TABLE orders (
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY(order_id) NOT ENFORCED
+ ) WITH (
+ 'connector' = 'mysql-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '3306',
+ 'username' = 'root',
+ 'password' = '123456',
+ 'database-name' = 'mydb',
+ 'table-name' = 'orders');
+
+-- read snapshot and binlogs from orders table
+Flink SQL> SELECT * FROM orders;
+```
+
+Connector Options
+----------------
+
+<div class="highlight">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 10%">Option</th>
+ <th class="text-left" style="width: 8%">Required</th>
+ <th class="text-left" style="width: 7%">Default</th>
+ <th class="text-left" style="width: 10%">Type</th>
+ <th class="text-left" style="width: 65%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>connector</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Specify what connector to use, here should be <code>'mysql-cdc'</code>.</td>
+ </tr>
+ <tr>
+ <td>hostname</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>IP address or hostname of the MySQL database server.</td>
+ </tr>
+ <tr>
+ <td>username</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Name of the MySQL database to use when connecting to the MySQL database server.</td>
+ </tr>
+ <tr>
+ <td>password</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Password to use when connecting to the MySQL database server.</td>
+ </tr>
+ <tr>
+ <td>database-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Database name of the MySQL server to monitor. The database-name also supports regular expressions to monitor multiple tables matches the regular expression.</td>
+ </tr>
+ <tr>
+ <td>table-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>
+ Table name of the MySQL database to monitor. The table-name also supports regular expressions to monitor multiple tables that satisfy the regular expressions. Note: When the MySQL CDC connector regularly matches the table name, it will concat the database-name and table-name filled in by the user through the string `\\.` to form a full-path regular expression, and then use the regular expression to match the fully qualified name of the table in the MySQL database.
+ </td>
+ </tr>
+ <tr>
+ <td>port</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">3306</td>
+ <td>Integer</td>
+ <td>Integer port number of the MySQL database server.</td>
+ </tr>
+ <tr>
+ <td>server-id</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>A numeric ID or a numeric ID range of this database client, The numeric ID syntax is like '5400',
+ the numeric ID range syntax is like '5400-5408', The numeric ID range syntax is recommended when 'scan.incremental.snapshot.enabled' enabled.
+ Every ID must be unique across all currently-running database processes in the MySQL cluster. This connector joins the MySQL cluster
+ as another server (with this unique ID) so it can read the binlog. By default, a random number is generated between 5400 and 6400,
+ though we recommend setting an explicit value.
+ </td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">true</td>
+ <td>Boolean</td>
+ <td>Incremental snapshot is a new mechanism to read snapshot of a table. Compared to the old snapshot mechanism,
+ the incremental snapshot has many advantages, including:
+ (1) source can be parallel during snapshot reading,
+ (2) source can perform checkpoints in the chunk granularity during snapshot reading,
+ (3) source doesn't need to acquire global read lock (FLUSH TABLES WITH READ LOCK) before snapshot reading.
+ If you would like the source run in parallel, each parallel reader should have an unique server id, so
+ the 'server-id' must be a range like '5400-6400', and the range must be larger than the parallelism.
+ Please see <a href="#incremental-snapshot-reading ">Incremental Snapshot Reading</a>section for more detailed information.
+ </td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.chunk.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">8096</td>
+ <td>Integer</td>
+ <td>The chunk size (number of rows) of table snapshot, captured tables are split into multiple chunks when read the snapshot of table.</td>
+ </tr>
+ <tr>
+ <td>scan.snapshot.fetch.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1024</td>
+ <td>Integer</td>
+ <td>The maximum fetch size for per poll when read table snapshot.</td>
+ </tr>
+ <tr>
+ <td>scan.startup.mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">initial</td>
+ <td>String</td>
+ <td>Optional startup mode for MySQL CDC consumer, valid enumerations are "initial", "earliest-offset", "latest-offset", "specific-offset" and "timestamp".
+ Please see <a href="#startup-reading-position">Startup Reading Position</a> section for more detailed information.</td>
+ </tr>
+ <tr>
+ <td>scan.startup.specific-offset.file</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Optional binlog file name used in case of "specific-offset" startup mode</td>
+ </tr>
+ <tr>
+ <td>scan.startup.specific-offset.pos</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Long</td>
+ <td>Optional binlog file position used in case of "specific-offset" startup mode</td>
+ </tr>
+ <tr>
+ <td>scan.startup.specific-offset.gtid-set</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Optional GTID set used in case of "specific-offset" startup mode</td>
+ </tr>
+ <tr>
+ <td>scan.startup.specific-offset.skip-events</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Long</td>
+ <td>Optional number of events to skip after the specific starting offset</td>
+ </tr>
+ <tr>
+ <td>scan.startup.specific-offset.skip-rows</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Long</td>
+ <td>Optional number of rows to skip after the specific starting offset</td>
+ </tr>
+ <tr>
+ <td>server-time-zone</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>The session time zone in database server, e.g. "Asia/Shanghai".
+ It controls how the TIMESTAMP type in MYSQL converted to STRING.
+ See more <a href="https://debezium.io/documentation/reference/1.9/connectors/mysql.html#mysql-temporal-types">here</a>.
+ If not set, then ZoneId.systemDefault() is used to determine the server time zone.
+ </td>
+ </tr>
+ <tr>
+ <td>debezium.min.row.
+ count.to.stream.result</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1000</td>
+ <td>Integer</td>
+ <td>
+During a snapshot operation, the connector will query each included table to produce a read event for all rows in that table. This parameter determines whether the MySQL connection will pull all results for a table into memory (which is fast but requires large amounts of memory), or whether the results will instead be streamed (can be slower, but will work for very large tables). The value specifies the minimum number of rows a table must contain before the connector will stream results, [...]
+ </tr>
+ <tr>
+ <td>connect.timeout</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">30s</td>
+ <td>Duration</td>
+ <td>The maximum time that the connector should wait after trying to connect to the MySQL database server before timing out.</td>
+ </tr>
+ <tr>
+ <td>connect.max-retries</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">3</td>
+ <td>Integer</td>
+ <td>The max retry times that the connector should retry to build MySQL database server connection.</td>
+ </tr>
+ <tr>
+ <td>connection.pool.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">20</td>
+ <td>Integer</td>
+ <td>The connection pool size.</td>
+ </tr>
+ <tr>
+ <td>jdbc.properties.*</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">20</td>
+ <td>String</td>
+ <td>Option to pass custom JDBC URL properties. User can pass custom properties like 'jdbc.properties.useSSL' = 'false'.</td>
+ </tr>
+ <tr>
+ <td>heartbeat.interval</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">30s</td>
+ <td>Duration</td>
+ <td>The interval of sending heartbeat event for tracing the latest available binlog offsets.</td>
+ </tr>
+ <tr>
+ <td>debezium.*</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Pass-through Debezium's properties to Debezium Embedded Engine which is used to capture data changes from MySQL server.
+ For example: <code>'debezium.snapshot.mode' = 'never'</code>.
+ See more about the <a href="https://debezium.io/documentation/reference/1.9/connectors/mysql.html#mysql-connector-properties">Debezium's MySQL Connector properties</a></td>
+ </tr>
+ <tr>
+ <td>scan.incremental.close-idle-reader.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>Whether to close idle readers at the end of the snapshot phase. <br>
+ The flink version is required to be greater than or equal to 1.14 when 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' is set to true.<br>
+ If the flink version is greater than or equal to 1.15, the default value of 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' has been changed to true,
+ so it does not need to be explicitly configured 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' = 'true'
+ </td>
+ </tr>
+ <tr>
+ <td>debezium.binary.handling.mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>debezium.binary.handling.mode can be set to one of the following values:
+ none: No processing is performed, and the binary data type is transmitted as a byte array (byte array).
+ base64: The binary data type is converted to a Base64-encoded string and transmitted.
+ hex: The binary data type is converted to a hexadecimal string and transmitted.
+ The default value is none. Depending on your requirements and data types, you can choose the appropriate processing mode. If your database contains a large number of binary data types, it is recommended to use base64 or hex mode to make it easier to handle during transmission.</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+Available Metadata
+----------------
+
+The following format metadata can be exposed as read-only (VIRTUAL) columns in a table definition.
+
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 15%">Key</th>
+ <th class="text-left" style="width: 30%">DataType</th>
+ <th class="text-left" style="width: 55%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>table_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the table that contain the row.</td>
+ </tr>
+ <tr>
+ <td>database_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the database that contain the row.</td>
+ </tr>
+ <tr>
+ <td>op_ts</td>
+ <td>TIMESTAMP_LTZ(3) NOT NULL</td>
+ <td>It indicates the time that the change was made in the database. <br>If the record is read from snapshot of the table instead of the binlog, the value is always 0.</td>
+ </tr>
+ <tr>
+ <td>row_kind</td>
+ <td>STRING NOT NULL</td>
+ <td>It indicates the row kind of the changelog,Note: The downstream SQL operator may fail to compare due to this new added column when processing the row retraction if
+the source operator chooses to output the 'row_kind' column for each record. It is recommended to use this metadata column only in simple synchronization jobs.
+<br>'+I' means INSERT message, '-D' means DELETE message, '-U' means UPDATE_BEFORE message and '+U' means UPDATE_AFTER message.</td>
+ </tr>
+ </tbody>
+</table>
+
+The extended CREATE TABLE example demonstrates the syntax for exposing these metadata fields:
+
+```sql
+CREATE TABLE products
+(
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ table_name STRING METADATA FROM 'table_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ operation STRING METADATA FROM 'row_kind' VIRTUAL,
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY (order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'mysql-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '3306',
+ 'username' = 'root',
+ 'password' = '123456',
+ 'database-name' = 'mydb',
+ 'table-name' = 'orders'
+ );
+```
+
+The extended CREATE TABLE example demonstrates the usage of regex to match multi-tables:
+
+```sql
+CREATE TABLE products
+(
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ table_name STRING METADATA FROM 'table_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ operation STRING METADATA FROM 'row_kind' VIRTUAL,
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY (order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'mysql-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '3306',
+ 'username' = 'root',
+ 'password' = '123456',
+ 'database-name' = '(^(test).*|^(tpc).*|txc|.*[p$]|t{2})',
+ 'table-name' = '(t[5-8]|tt)'
+ );
+```
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 15%">example</th>
+ <th class="text-left" style="width: 30%">expression</th>
+ <th class="text-left" style="width: 55%">description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>prefix match</td>
+ <td>^(test).*</td>
+ <td>This matches the database name or table name starts with prefix of test, e.g test1、test2. </td>
+ </tr>
+ <tr>
+ <td>suffix match</td>
+ <td>.*[p$]</td>
+ <td>This matches the database name or table name ends with suffix of p, e.g cdcp、edcp. </td>
+ </tr>
+ <tr>
+ <td>specific match</td>
+ <td>txc</td>
+ <td>This matches the database name or table name according to a specific name, e.g txc. </td>
+ </tr>
+ </tbody>
+</table>
+
+It will use `database-name\\.table-name` as a pattern to match tables, as above examples using pattern `(^(test).*|^(tpc).*|txc|.*[p$]|t{2})\\.(t[5-8]|tt)` matches txc.tt、test2.test5.
+
+
+Features
+--------
+
+### Incremental Snapshot Reading
+
+Incremental snapshot reading is a new mechanism to read snapshot of a table. Compared to the old snapshot mechanism, the incremental snapshot has many advantages, including:
+* (1) MySQL CDC Source can be parallel during snapshot reading
+* (2) MySQL CDC Source can perform checkpoints in the chunk granularity during snapshot reading
+* (3) MySQL CDC Source doesn't need to acquire global read lock (FLUSH TABLES WITH READ LOCK) before snapshot reading
+
+If you would like the source run in parallel, each parallel reader should have an unique server id, so the 'server-id' must be a range like '5400-6400',
+and the range must be larger than the parallelism.
+
+During the incremental snapshot reading, the MySQL CDC Source firstly splits snapshot chunks (splits) by primary key of table,
+and then MySQL CDC Source assigns the chunks to multiple readers to read the data of snapshot chunk.
+
+#### Controlling Parallelism
+
+Incremental snapshot reading provides the ability to read snapshot data parallelly.
+You can control the source parallelism by setting the job parallelism `parallelism.default`. For example, in SQL CLI:
+
+```sql
+Flink SQL> SET 'parallelism.default' = 8;
+```
+
+#### Checkpoint
+
+Incremental snapshot reading provides the ability to perform checkpoint in chunk level. It resolves the checkpoint timeout problem in previous version with old snapshot reading mechanism.
+
+#### Lock-free
+
+The MySQL CDC source use **incremental snapshot algorithm**, which avoid acquiring global read lock (FLUSH TABLES WITH READ LOCK) and thus doesn't need `RELOAD` permission.
+
+#### MySQL High Availability Support
+
+The ```mysql-cdc``` connector offers high availability of MySQL high available cluster by using the [GTID](https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-concepts.html) information. To obtain the high availability, the MySQL cluster need enable the GTID mode, the GTID mode in your mysql config file should contain following settings:
+
+```yaml
+gtid_mode = on
+enforce_gtid_consistency = on
+```
+
+If the monitored MySQL server address contains slave instance, you need set following settings to the MySQL conf file. The setting ```log-slave-updates = 1``` enables the slave instance to also write the data that synchronized from master to its binlog, this makes sure that the ```mysql-cdc``` connector can consume entire data from the slave instance.
+
+```yaml
+gtid_mode = on
+enforce_gtid_consistency = on
+log-slave-updates = 1
+```
+
+After the server you monitored fails in MySQL cluster, you only need to change the monitored server address to other available server and then restart the job from the latest checkpoint/savepoint, the job will restore from the checkpoint/savepoint and won't miss any records.
+
+It's recommended to configure a DNS(Domain Name Service) or VIP(Virtual IP Address) for your MySQL cluster, using the DNS or VIP address for ```mysql-cdc``` connector, the DNS or VIP would automatically route the network request to the active MySQL server. In this way, you don't need to modify the address and restart your pipeline anymore.
+
+#### MySQL Heartbeat Event Support
+
+If the table updates infrequently, the binlog file or GTID set may have been cleaned in its last committed binlog position.
+The CDC job may restart fails in this case. So the heartbeat event will help update binlog position. By default heartbeat event is enabled in MySQL CDC source and the interval is set to 30 seconds. You can specify the interval by using table option ```heartbeat.interval```, or set the option to `0s` to disable heartbeat events.
+
+#### How Incremental Snapshot Reading works
+
+When the MySQL CDC source is started, it reads snapshot of table parallelly and then reads binlog of table with single parallelism.
+
+In snapshot phase, the snapshot is cut into multiple snapshot chunks according to primary key of table and the size of table rows.
+Snapshot chunks is assigned to multiple snapshot readers. Each snapshot reader reads its received chunks with [chunk reading algorithm](#snapshot-chunk-reading) and send the read data to downstream.
+The source manages the process status (finished or not) of chunks, thus the source of snapshot phase can support checkpoint in chunk level.
+If a failure happens, the source can be restored and continue to read chunks from last finished chunks.
+
+After all snapshot chunks finished, the source will continue to read binlog in a single task.
+In order to guarantee the global data order of snapshot records and binlog records, binlog reader will start to read data
+until there is a complete checkpoint after snapshot chunks finished to make sure all snapshot data has been consumed by downstream.
+The binlog reader tracks the consumed binlog position in state, thus source of binlog phase can support checkpoint in row level.
+
+Flink performs checkpoints for the source periodically, in case of failover, the job will restart and restore from the last successful checkpoint state and guarantees the exactly once semantic.
+
+##### Snapshot Chunk Splitting
+
+When performing incremental snapshot reading, MySQL CDC source need a criterion which used to split the table.
+MySQL CDC Source use a splitting column to split the table to multiple splits (chunks). By default, MySQL CDC source will identify the primary key column of the table and use the first column in primary key as the splitting column.
+If there is no primary key in the table, incremental snapshot reading will fail and you can disable `scan.incremental.snapshot.enabled` to fallback to old snapshot reading mechanism.
+
+For numeric and auto incremental splitting column, MySQL CDC Source efficiently splits chunks by fixed step length.
+For example, if you had a table with a primary key column of `id` which is auto-incremental BIGINT type, the minimum value was `0` and maximum value was `100`,
+and the table option `scan.incremental.snapshot.chunk.size` value is `25`, the table would be split into following chunks:
+
+```
+ (-∞, 25),
+ [25, 50),
+ [50, 75),
+ [75, 100),
+ [100, +∞)
+```
+
+For other primary key column type, MySQL CDC Source executes the statement in the form of `SELECT MAX(STR_ID) AS chunk_high FROM (SELECT * FROM TestTable WHERE STR_ID > 'uuid-001' limit 25)` to get the low and high value for each chunk,
+the splitting chunks set would be like:
+
+ ```
+ (-∞, 'uuid-001'),
+ ['uuid-001', 'uuid-009'),
+ ['uuid-009', 'uuid-abc'),
+ ['uuid-abc', 'uuid-def'),
+ [uuid-def, +∞).
+```
+
+##### Chunk Reading Algorithm
+
+For above example `MyTable`, if the MySQL CDC Source parallelism was set to 4, MySQL CDC Source would run 4 readers which each executes **Offset Signal Algorithm** to
+get a final consistent output of the snapshot chunk. The **Offset Signal Algorithm** simply describes as following:
+
+ * (1) Record current binlog position as `LOW` offset
+ * (2) Read and buffer the snapshot chunk records by executing statement `SELECT * FROM MyTable WHERE id > chunk_low AND id <= chunk_high`
+ * (3) Record current binlog position as `HIGH` offset
+ * (4) Read the binlog records that belong to the snapshot chunk from `LOW` offset to `HIGH` offset
+ * (5) Upsert the read binlog records into the buffered chunk records, and emit all records in the buffer as final output (all as INSERT records) of the snapshot chunk
+ * (6) Continue to read and emit binlog records belong to the chunk after the `HIGH` offset in *single binlog reader*.
+
+The algorithm is inspired by [DBLog Paper](https://arxiv.org/pdf/2010.12597v1.pdf), please refer it for more detail.
+
+**Note:** If the actual values for the primary key are not uniformly distributed across its range, this may lead to unbalanced tasks when incremental snapshot read.
+
+### Exactly-Once Processing
+
+The MySQL CDC connector is a Flink Source connector which will read table snapshot chunks first and then continues to read binlog,
+both snapshot phase and binlog phase, MySQL CDC connector read with **exactly-once processing** even failures happen.
+
+### Startup Reading Position
+
+The config option `scan.startup.mode` specifies the startup mode for MySQL CDC consumer. The valid enumerations are:
+
+- `initial` (default): Performs an initial snapshot on the monitored database tables upon first startup, and continue to read the latest binlog.
+- `earliest-offset`: Skip snapshot phase and start reading binlog events from the earliest accessible binlog offset.
+- `latest-offset`: Never to perform snapshot on the monitored database tables upon first startup, just read from
+the end of the binlog which means only have the changes since the connector was started.
+- `specific-offset`: Skip snapshot phase and start reading binlog events from a specific offset. The offset could be
+specified with binlog filename and position, or a GTID set if GTID is enabled on server.
+- `timestamp`: Skip snapshot phase and start reading binlog events from a specific timestamp.
+
+For example in DataStream API:
+```java
+MySQLSource.builder()
+ .startupOptions(StartupOptions.earliest()) // Start from earliest offset
+ .startupOptions(StartupOptions.latest()) // Start from latest offset
+ .startupOptions(StartupOptions.specificOffset("mysql-bin.000003", 4L) // Start from binlog file and offset
+ .startupOptions(StartupOptions.specificOffset("24DA167-0C0C-11E8-8442-00059A3C7B00:1-19")) // Start from GTID set
+ .startupOptions(StartupOptions.timestamp(1667232000000L) // Start from timestamp
+ ...
+ .build()
+```
+
+and with SQL:
+
+```SQL
+CREATE TABLE mysql_source (...) WITH (
+ 'connector' = 'mysql-cdc',
+ 'scan.startup.mode' = 'earliest-offset', -- Start from earliest offset
+ 'scan.startup.mode' = 'latest-offset', -- Start from latest offset
+ 'scan.startup.mode' = 'specific-offset', -- Start from specific offset
+ 'scan.startup.mode' = 'timestamp', -- Start from timestamp
+ 'scan.startup.specific-offset.file' = 'mysql-bin.000003', -- Binlog filename under specific offset startup mode
+ 'scan.startup.specific-offset.pos' = '4', -- Binlog position under specific offset mode
+ 'scan.startup.specific-offset.gtid-set' = '24DA167-0C0C-11E8-8442-00059A3C7B00:1-19', -- GTID set under specific offset startup mode
+ 'scan.startup.timestamp-millis' = '1667232000000' -- Timestamp under timestamp startup mode
+ ...
+)
+```
+
+**Notes:**
+1. MySQL source will print the current binlog position into logs with INFO level on checkpoint, with the prefix
+"Binlog offset on checkpoint {checkpoint-id}". It could be useful if you want to restart the job from a specific checkpointed position.
+2. If schema of capturing tables was changed previously, starting with earliest offset, specific offset or timestamp
+could fail as the Debezium reader keeps the current latest table schema internally and earlier records with unmatched schema cannot be correctly parsed.
+
+### DataStream Source
+
+```java
+import org.apache.flink.api.common.eventtime.WatermarkStrategy;
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+import org.apache.flink.cdc.connectors.mysql.source.MySqlSource;
+
+public class MySqlSourceExample {
+ public static void main(String[] args) throws Exception {
+ MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
+ .hostname("yourHostname")
+ .port(yourPort)
+ .databaseList("yourDatabaseName") // set captured database, If you need to synchronize the whole database, Please set tableList to ".*".
+ .tableList("yourDatabaseName.yourTableName") // set captured table
+ .username("yourUsername")
+ .password("yourPassword")
+ .deserializer(new JsonDebeziumDeserializationSchema()) // converts SourceRecord to JSON String
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+ // enable checkpoint
+ env.enableCheckpointing(3000);
+
+ env
+ .fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "MySQL Source")
+ // set 4 parallel source tasks
+ .setParallelism(4)
+ .print().setParallelism(1); // use parallelism 1 for sink to keep message ordering
+
+ env.execute("Print MySQL Snapshot + Binlog");
+ }
+}
+```
+
+**Note:** Please refer [Deserialization](../about.html#deserialization) for more details about the JSON deserialization.
+
+### Scan Newly Added Tables
+
+Scan Newly Added Tables feature enables you add new tables to monitor for existing running pipeline, the newly added tables will read theirs snapshot data firstly and then read their changelog automatically.
+
+Imaging this scenario: At the beginning, a Flink job monitor tables `[product, user, address]`, but after some days we would like the job can also monitor tables `[order, custom]` which contains history data, and we need the job can still reuse existing state of the job, this feature can resolve this case gracefully.
+
+The following operations show how to enable this feature to resolve above scenario. An existing Flink job which uses CDC Source like:
+
+```java
+ MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
+ .hostname("yourHostname")
+ .port(yourPort)
+ .scanNewlyAddedTableEnabled(true) // enable scan the newly added tables feature
+ .databaseList("db") // set captured database
+ .tableList("db.product, db.user, db.address") // set captured tables [product, user, address]
+ .username("yourUsername")
+ .password("yourPassword")
+ .deserializer(new JsonDebeziumDeserializationSchema()) // converts SourceRecord to JSON String
+ .build();
+ // your business code
+```
+
+If we would like to add new tables `[order, custom]` to an existing Flink job,just need to update the `tableList()` value of the job to include `[order, custom]` and restore the job from previous savepoint.
+
+_Step 1_: Stop the existing Flink job with savepoint.
+```shell
+$ ./bin/flink stop $Existing_Flink_JOB_ID
+```
+```shell
+Suspending job "cca7bc1061d61cf15238e92312c2fc20" with a savepoint.
+Savepoint completed. Path: file:/tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab
+```
+_Step 2_: Update the table list option for the existing Flink job .
+1. update `tableList()` value.
+2. build the jar of updated job.
+```java
+ MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
+ .hostname("yourHostname")
+ .port(yourPort)
+ .scanNewlyAddedTableEnabled(true)
+ .databaseList("db")
+ .tableList("db.product, db.user, db.address, db.order, db.custom") // set captured tables [product, user, address ,order, custom]
+ .username("yourUsername")
+ .password("yourPassword")
+ .deserializer(new JsonDebeziumDeserializationSchema()) // converts SourceRecord to JSON String
+ .build();
+ // your business code
+```
+_Step 3_: Restore the updated Flink job from savepoint.
+```shell
+$ ./bin/flink run \
+ --detached \
+ --fromSavepoint /tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab \
+ ./FlinkCDCExample.jar
+```
+**Note:** Please refer the doc [Restore the job from previous savepoint](https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/deployment/cli/#command-line-interface) for more details.
+
+### Tables Without primary keys
+
+Starting from version 2.4.0, MySQL CDC support tables that do not have a primary key. To use a table without primary keys, you must configure the `scan.incremental.snapshot.chunk.key-column` option and specify one non-null field.
+
+There are two places that need to be taken care of.
+
+1. If there is an index in the table, try to use a column which is contained in the index in `scan.incremental.snapshot.chunk.key-column`. This will increase the speed of select statement.
+2. The processing semantics of a MySQL CDC table without primary keys is determined based on the behavior of the column that are specified by the `scan.incremental.snapshot.chunk.key-column`.
+ * If no update operation is performed on the specified column, the exactly-once semantics is ensured.
+ * If the update operation is performed on the specified column, only the at-least-once semantics is ensured. However, you can specify primary keys at downstream and perform the idempotence operation to ensure data correctness.
+
+### About converting binary type data to base64 encoded data
+
+```sql
+CREATE TABLE products (
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ table_name STRING METADATA FROM 'table_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ binary_data STRING,
+ PRIMARY KEY(order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'mysql-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '3306',
+ 'username' = 'root',
+ 'password' = '123456',
+ 'database-name' = 'test_db',
+ 'table-name' = 'test_tb',
+ 'debezium.binary.handling.mode' = 'base64'
+);
+```
+
+`binary_data` field in the database is of type VARBINARY(N). In some scenarios, we need to convert binary data to base64 encoded string data. This feature can be enabled by adding the parameter 'debezium.binary.handling.mode'='base64',
+By adding this parameter, we can map the binary field type to 'STRING' in Flink SQL, thereby obtaining base64 encoded string data.
+
+Data Type Mapping
+----------------
+
+<div class="wy-table-responsive">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width:30%;">MySQL type<a href="https://dev.mysql.com/doc/man/8.0/en/data-types.html"></a></th>
+ <th class="text-left" style="width:10%;">Flink SQL type<a href="{% link dev/table/types.md %}"></a></th>
+ <th class="text-left" style="width:60%;">NOTE</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>TINYINT</td>
+ <td>TINYINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ SMALLINT<br>
+ TINYINT UNSIGNED<br>
+ TINYINT UNSIGNED ZEROFILL
+ </td>
+ <td>SMALLINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ INT<br>
+ MEDIUMINT<br>
+ SMALLINT UNSIGNED<br>
+ SMALLINT UNSIGNED ZEROFILL
+ </td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BIGINT<br>
+ INT UNSIGNED<br>
+ INT UNSIGNED ZEROFILL<br>
+ MEDIUMINT UNSIGNED<br>
+ MEDIUMINT UNSIGNED ZEROFILL
+ </td>
+ <td>BIGINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BIGINT UNSIGNED<br>
+ BIGINT UNSIGNED ZEROFILL<br>
+ SERIAL
+ </td>
+ <td>DECIMAL(20, 0)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ FLOAT<br>
+ FLOAT UNSIGNED<br>
+ FLOAT UNSIGNED ZEROFILL
+ </td>
+ <td>FLOAT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ REAL<br>
+ REAL UNSIGNED<br>
+ REAL UNSIGNED ZEROFILL<br>
+ DOUBLE<br>
+ DOUBLE UNSIGNED<br>
+ DOUBLE UNSIGNED ZEROFILL<br>
+ DOUBLE PRECISION<br>
+ DOUBLE PRECISION UNSIGNED<br>
+ DOUBLE PRECISION UNSIGNED ZEROFILL
+ </td>
+ <td>DOUBLE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ NUMERIC(p, s)<br>
+ NUMERIC(p, s) UNSIGNED<br>
+ NUMERIC(p, s) UNSIGNED ZEROFILL<br>
+ DECIMAL(p, s)<br>
+ DECIMAL(p, s) UNSIGNED<br>
+ DECIMAL(p, s) UNSIGNED ZEROFILL<br>
+ FIXED(p, s)<br>
+ FIXED(p, s) UNSIGNED<br>
+ FIXED(p, s) UNSIGNED ZEROFILL<br>
+ where p <= 38<br>
+ </td>
+ <td>DECIMAL(p, s)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ NUMERIC(p, s)<br>
+ NUMERIC(p, s) UNSIGNED<br>
+ NUMERIC(p, s) UNSIGNED ZEROFILL<br>
+ DECIMAL(p, s)<br>
+ DECIMAL(p, s) UNSIGNED<br>
+ DECIMAL(p, s) UNSIGNED ZEROFILL<br>
+ FIXED(p, s)<br>
+ FIXED(p, s) UNSIGNED<br>
+ FIXED(p, s) UNSIGNED ZEROFILL<br>
+ where 38 < p <= 65<br>
+ </td>
+ <td>STRING</td>
+ <td>The precision for DECIMAL data type is up to 65 in MySQL, but the precision for DECIMAL is limited to 38 in Flink.
+ So if you define a decimal column whose precision is greater than 38, you should map it to STRING to avoid precision loss.</td>
+ </tr>
+ <tr>
+ <td>
+ BOOLEAN<br>
+ TINYINT(1)<br>
+ BIT(1)
+ </td>
+ <td>BOOLEAN</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>DATE</td>
+ <td>DATE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TIME [(p)]</td>
+ <td>TIME [(p)]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TIMESTAMP [(p)]<br>
+ DATETIME [(p)]
+ </td>
+ <td>TIMESTAMP [(p)]
+ </td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ CHAR(n)
+ </td>
+ <td>CHAR(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ VARCHAR(n)
+ </td>
+ <td>VARCHAR(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BIT(n)
+ </td>
+ <td>BINARY(⌈(n + 7) / 8⌉)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BINARY(n)
+ </td>
+ <td>BINARY(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ VARBINARY(N)
+ </td>
+ <td>VARBINARY(N)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ TINYTEXT<br>
+ TEXT<br>
+ MEDIUMTEXT<br>
+ LONGTEXT<br>
+ </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ TINYBLOB<br>
+ BLOB<br>
+ MEDIUMBLOB<br>
+ LONGBLOB<br>
+ </td>
+ <td>BYTES</td>
+ <td>Currently, for BLOB data type in MySQL, only the blob whose length isn't greater than 2,147,483,647(2 ** 31 - 1) is supported. </td>
+ </tr>
+ <tr>
+ <td>
+ YEAR
+ </td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ ENUM
+ </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ JSON
+ </td>
+ <td>STRING</td>
+ <td>The JSON data type will be converted into STRING with JSON format in Flink.</td>
+ </tr>
+ <tr>
+ <td>
+ SET
+ </td>
+ <td>ARRAY<STRING></td>
+ <td>As the SET data type in MySQL is a string object that can have zero or more values,
+ it should always be mapped to an array of string
+ </td>
+ </tr>
+ <tr>
+ <td>
+ GEOMETRY<br>
+ POINT<br>
+ LINESTRING<br>
+ POLYGON<br>
+ MULTIPOINT<br>
+ MULTILINESTRING<br>
+ MULTIPOLYGON<br>
+ GEOMETRYCOLLECTION<br>
+ </td>
+ <td>
+ STRING
+ </td>
+ <td>
+ The spatial data types in MySQL will be converted into STRING with a fixed Json format.
+ Please see <a href="#mysql-spatial-data-types-mapping ">MySQL Spatial Data Types Mapping</a> section for more detailed information.
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+### MySQL Spatial Data Types Mapping
+The spatial data types except for `GEOMETRYCOLLECTION` in MySQL will be converted into Json String with a fixed format like:<br>
+```json
+{"srid": 0 , "type": "xxx", "coordinates": [0, 0]}
+```
+The field `srid` identifies the SRS in which the geometry is defined, SRID 0 is the default for new geometry values if no SRID is specified.
+As only MySQL 8+ support to specific SRID when define spatial data type, the field `srid` will always be 0 in MySQL with a lower version.
+
+The field `type` identifies the spatial data type, such as `POINT`/`LINESTRING`/`POLYGON`.
+
+The field `coordinates` represents the `coordinates` of the spatial data.
+
+For `GEOMETRYCOLLECTION`, it will be converted into Json String with a fixed format like:<br>
+```json
+{"srid": 0 , "type": "GeometryCollection", "geometries": [{"type":"Point","coordinates":[10,10]}]}
+```
+
+The field `geometries` is an array contains all spatial data.
+
+The example for different spatial data types mapping is as follows:
+<div class="wy-table-responsive">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left">Spatial data in MySQL</th>
+ <th class="text-left">Json String converted in Flink</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>POINT(1 1)</td>
+ <td>{"coordinates":[1,1],"type":"Point","srid":0}</td>
+ </tr>
+ <tr>
+ <td>LINESTRING(3 0, 3 3, 3 5)</td>
+ <td>{"coordinates":[[3,0],[3,3],[3,5]],"type":"LineString","srid":0}</td>
+ </tr>
+ <tr>
+ <td>POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))</td>
+ <td>{"coordinates":[[[1,1],[2,1],[2,2],[1,2],[1,1]]],"type":"Polygon","srid":0}</td>
+ </tr>
+ <tr>
+ <td>MULTIPOINT((1 1),(2 2))</td>
+ <td>{"coordinates":[[1,1],[2,2]],"type":"MultiPoint","srid":0}</td>
+ </tr>
+ <tr>
+ <td>MultiLineString((1 1,2 2,3 3),(4 4,5 5))</td>
+ <td>{"coordinates":[[[1,1],[2,2],[3,3]],[[4,4],[5,5]]],"type":"MultiLineString","srid":0}</td>
+ </tr>
+ <tr>
+ <td>MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)), ((5 5, 7 5, 7 7, 5 7, 5 5)))</td>
+ <td>{"coordinates":[[[[0,0],[10,0],[10,10],[0,10],[0,0]]],[[[5,5],[7,5],[7,7],[5,7],[5,5]]]],"type":"MultiPolygon","srid":0}</td>
+ </tr>
+ <tr>
+ <td>GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))</td>
+ <td>{"geometries":[{"type":"Point","coordinates":[10,10]},{"type":"Point","coordinates":[30,30]},{"type":"LineString","coordinates":[[15,15],[20,20]]}],"type":"GeometryCollection","srid":0}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+FAQ
+--------
+* [FAQ(English)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ)
+* [FAQ(中文)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ(ZH))
diff --git a/master/_sources/content/connectors/oceanbase-cdc(ZH).md.txt b/master/_sources/content/connectors/oceanbase-cdc(ZH).md.txt
new file mode 100644
index 000000000..c8269b485
--- /dev/null
+++ b/master/_sources/content/connectors/oceanbase-cdc(ZH).md.txt
@@ -0,0 +1,787 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# OceanBase CDC 连接器
+
+OceanBase CDC 连接器允许从 OceanBase 读取快照数据和增量数据。本文介绍了如何设置 OceanBase CDC 连接器以对 OceanBase 进行 SQL 查询。
+
+## 依赖
+
+为了使用 OceanBase CDC 连接器,您必须提供相关的依赖信息。以下依赖信息适用于使用自动构建工具(如 Maven 或 SBT)构建的项目和带有 SQL JAR 包的 SQL 客户端。
+
+```xml
+<dependency>
+ <groupId>com.ververica</groupId>
+ <artifactId>flink-connector-oceanbase-cdc</artifactId>
+ <!-- 请使用已发布的版本依赖,snapshot 版本的依赖需要本地自行编译。 -->
+ <version>3.0-SNAPSHOT</version>
+</dependency>
+```
+
+如果您是要连接企业版的 OceanBase,您可能需要使用 OceanBase 官方的 JDBC 驱动,这时需要引入如下依赖。
+
+```xml
+<dependency>
+ <groupId>com.oceanbase</groupId>
+ <artifactId>oceanbase-client</artifactId>
+ <version>2.4.2</version>
+</dependency>
+```
+
+## 下载 SQL 客户端 JAR 包
+
+```下载链接仅在已发布版本可用,请在文档网站左下角选择浏览已发布的版本。```
+
+下载[flink-sql-connector-oceanbase-cdc-3.0-SNAPSHOT.jar](https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-oceanbase-cdc/2.5-SNAPSHOT/flink-sql-connector-oceanbase-cdc-2.5-SNAPSHOT.jar) 到 `<FLINK_HOME>/lib/` 目录下。
+
+**注意:** flink-sql-connector-oceanbase-cdc-XXX-SNAPSHOT 版本是开发分支`release-XXX`对应的快照版本,快照版本用户需要下载源代码并编译相应的 jar。用户应使用已经发布的版本,例如 [flink-sql-connector-oceanbase-cdc-2.3.0.jar](https://mvnrepository.com/artifact/com.ververica/flink-sql-connector-oceanbase-cdc) 当前已发布的所有版本都可以在 Maven 中央仓库获取。
+
+对于 JDBC 驱动,上述的 cdc jar 文件中已经包含了我们推荐的 MySQL 驱动版本 5.1.47。由于开源许可证的原因,我们不能在上述 cdc jar 文件中包含 OceanBase 的官方 JDBC 驱动,如果您需要使用它,可以从[这里](https://repo1.maven.org/maven2/com/oceanbase/oceanbase-client/2.4.2/oceanbase-client-2.4.2.jar)下载,然后放到 `<FLINK_HOME>/lib/` 目录下,同时需要将配置项 `jdbc.driver` 设为 `com.oceanbase.jdbc.Driver`。
+
+### 配置 OceanBase 数据库和 oblogproxy 服务
+
+1. 按照 [文档](https://github.com/oceanbase/oceanbase#quick-start) 配置 OceanBase 集群。
+2. 在 sys 租户中,为 oblogproxy 创建一个带密码的用户。
+
+ ```bash
+ mysql -h${host} -P${port} -uroot
+ mysql> SHOW TENANT;
+ mysql> CREATE USER ${sys_username} IDENTIFIED BY '${sys_password}';
+ mysql> GRANT ALL PRIVILEGES ON *.* TO ${sys_username} WITH GRANT OPTION;
+ ```
+
+3. 为你想要监控的租户创建一个用户,这个用户用来读取快照数据和变化事件数据。
+4. OceanBase 社区版用户需要获取`rootserver-list`,可以使用以下命令获取:
+
+ ```bash
+ mysql> SHOW PARAMETERS LIKE 'rootservice_list';
+ ```
+ OceanBase 企业版用户需要获取 `config-url`,可以使用以下命令获取:
+
+ ```shell
+ mysql> show parameters like 'obconfig_url';
+ ```
+
+5. 按照 [文档](https://github.com/oceanbase/oblogproxy#getting-started) 配置 oblogproxy。
+
+## 创建 OceanBase CDC 表
+
+使用以下命令,创建 OceanBase CDC 表:
+
+```sql
+-- 每 3 秒做一次 checkpoint,用于测试,生产配置建议 5 到 10 分钟
+Flink SQL> SET 'execution.checkpointing.interval' = '3s';
+
+-- 在 Flink SQL 中创建 OceanBase 表 `orders`
+Flink SQL> CREATE TABLE orders (
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY (order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'oceanbase-cdc',
+ 'scan.startup.mode' = 'initial',
+ 'username' = 'user@test_tenant#cluster_name',
+ 'password' = 'pswd',
+ 'tenant-name' = 'test_tenant',
+ 'database-name' = '^test_db$',
+ 'table-name' = '^orders$',
+ 'hostname' = '127.0.0.1',
+ 'port' = '2881',
+ 'rootserver-list' = '127.0.0.1:2882:2881',
+ 'logproxy.host' = '127.0.0.1',
+ 'logproxy.port' = '2983',
+ 'working-mode' = 'memory'
+);
+
+-- 从表 orders 中读取快照数据和 binlog 数据
+Flink SQL> SELECT * FROM orders;
+```
+
+如果您使用的是企业版的 OceanBase Oracle 模式,您需要先添加 OceanBase 的官方 JDBC 驱动 jar 包到 Flink 环境,并且部署企业版的 oblogproxy 服务,然后通过以下命令创建 OceanBase CDC 表:
+
+```sql
+Flink SQL> CREATE TABLE orders (
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY (order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'oceanbase-cdc',
+ 'scan.startup.mode' = 'initial',
+ 'username' = 'user@test_tenant#cluster_name',
+ 'password' = 'pswd',
+ 'tenant-name' = 'test_tenant',
+ 'database-name' = '^test_db$',
+ 'table-name' = '^orders$',
+ 'hostname' = '127.0.0.1',
+ 'port' = '2881',
+ 'compatible-mode' = 'oracle',
+ 'jdbc.driver' = 'com.oceanbase.jdbc.Driver',
+ 'config-url' = 'http://127.0.0.1:8080/services?Action=ObRootServiceInfo&User_ID=xxx&UID=xxx&ObRegion=xxx',
+ 'logproxy.host' = '127.0.0.1',
+ 'logproxy.port' = '2983',
+ 'working-mode' = 'memory'
+);
+```
+
+您也可以访问 Flink CDC 官网文档,快速体验将数据从 OceanBase 导入到 Elasticsearch。更多信息,参考 [Flink CDC 官网文档](https://ververica.github.io/flink-cdc-connectors/release-2.2/content/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B/oceanbase-tutorial-zh.html)。
+
+## OceanBase CDC 连接器选项
+
+OceanBase CDC 连接器包括用于 SQL 和 DataStream API 的选项,如下表所示。
+
+*注意*:连接器支持两种方式来指定需要监听的表,两种方式同时使用时会监听两种方式匹配的所有表。
+1. 使用 `database-name` 和 `table-name` 匹配正则表达式中的数据库和表名。 由于`obcdc`(以前的`liboblog`)现在只支持`fnmatch`匹配,我们不能直接使用正则过滤 changelog 事件,所以通过两个选项去匹配去指定监听表只能在`initial`启动模式下使用。
+2. 使用 `table-list` 去匹配数据库名和表名的准确列表。
+
+<div class="highlight">
+ <table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 10%">配置项</th>
+ <th class="text-left" style="width: 8%">是否必选</th>
+ <th class="text-left" style="width: 7%">默认值</th>
+ <th class="text-left" style="width: 10%">类型</th>
+ <th class="text-left" style="width: 65%">描述</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>connector</td>
+ <td>是</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>指定要使用的连接器,此处为 <code>'oceanbase-cdc'</code>。</td>
+ </tr>
+ <tr>
+ <td>scan.startup.mode</td>
+ <td>是</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>指定 OceanBase CDC 消费者的启动模式。可取值为<code>'initial'</code>,<code>'latest-offset'</code> or
+ <code>'timestamp'</code>。</td>
+ </tr>
+ <tr>
+ <td>scan.startup.timestamp</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>Long</td>
+ <td>起始点的时间戳,单位为秒。仅在启动模式为 <code>'timestamp'</code> 时可用。</td>
+ </tr>
+ <tr>
+ <td>username</td>
+ <td>是</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>连接 OceanBase 数据库的用户的名称。</td>
+ </tr>
+ <tr>
+ <td>password</td>
+ <td>是</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>连接 OceanBase 数据库时使用的密码。</td>
+ </tr>
+ <tr>
+ <td>tenant-name</td>
+ <td>是</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>待监控 OceanBase 数据库的租户名,应该填入精确值。</td>
+ </tr>
+ <tr>
+ <td>database-name</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>待监控 OceanBase 数据库的数据库名,应该是正则表达式,该选项只支持和 'initial' 模式一起使用。</td>
+ </tr>
+ <tr>
+ <td>table-name</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>待监控 OceanBase 数据库的表名,应该是正则表达式,该选项只支持和 'initial' 模式一起使用。</td>
+ </tr>
+ <tr>
+ <td>table-list</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>待监控 OceanBase 数据库的全路径的表名列表,逗号分隔,如:"db1.table1, db2.table2"。</td>
+ </tr>
+ <tr>
+ <td>hostname</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>OceanBase 数据库或 OceanBbase 代理 ODP 的 IP 地址或主机名。</td>
+ </tr>
+ <tr>
+ <td>port</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>Integer</td>
+ <td>
+ OceanBase 数据库服务器的整数端口号。可以是 OceanBase 服务器的 SQL 端口号(默认值为 2881)<br>
+ 或 OceanBase代理服务的端口号(默认值为 2883)</td>
+ </tr>
+ <tr>
+ <td>connect.timeout</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">30s</td>
+ <td>Duration</td>
+ <td>连接器在尝试连接到 OceanBase 数据库服务器超时前的最长时间。</td>
+ </tr>
+ <tr>
+ <td>server-time-zone</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">+00:00</td>
+ <td>String</td>
+ <td>
+ 数据库服务器中的会话时区,用户控制 OceanBase 的时间类型如何转换为 STRING。<br>
+ 合法的值可以是格式为"±hh:mm"的 UTC 时区偏移量,<br>
+ 如果 mysql 数据库中的时区信息表已创建,合法的值则可以是创建的时区。
+ </td>
+ </tr>
+ <tr>
+ <td>logproxy.host</td>
+ <td>是</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>OceanBase 日志代理服务 的 IP 地址或主机名。</td>
+ </tr>
+ <tr>
+ <td>logproxy.port</td>
+ <td>是</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>Integer</td>
+ <td>OceanBase 日志代理服务 的端口号。</td>
+ </tr>
+ <tr>
+ <td>logproxy.client.id</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">规则生成</td>
+ <td>String</td>
+ <td>OceanBase日志代理服务的客户端连接 ID,默认值的生成规则是 {flink_ip}_{process_id}_{timestamp}_{thread_id}_{tenant}。</td>
+ </tr>
+ <tr>
+ <td>rootserver-list</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>OceanBase root 服务器列表,服务器格式为 `ip:rpc_port:sql_port`,<br>多个服务器地址使用英文分号 `;` 隔开,OceanBase 社区版本必填。</td>
+ </tr>
+ <tr>
+ <td>config-url</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>从配置服务器获取服务器信息的 url, OceanBase 企业版本必填。</td>
+ </tr>
+ <tr>
+ <td>working-mode</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">storage</td>
+ <td>String</td>
+ <td>日志代理中 `libobcdc` 的工作模式 , 可以是 `storage` 或 `memory`。</td>
+ </tr>
+ <tr>
+ <td>compatible-mode</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">mysql</td>
+ <td>String</td>
+ <td>OceanBase 的兼容模式,可以是 `mysql` 或 `oracle`。</td>
+ </tr>
+ <tr>
+ <td>jdbc.driver</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">com.mysql.jdbc.Driver</td>
+ <td>String</td>
+ <td>全量读取时使用的 jdbc 驱动类名。</td>
+ </tr>
+ <tr>
+ <td>jdbc.properties.*</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>传递自定义 JDBC URL 属性的选项。用户可以传递自定义属性,如 'jdbc.properties.useSSL' = 'false'。</td>
+ </tr>
+ <tr>
+ <td>obcdc.properties.*</td>
+ <td>否</td>
+ <td style="word-wrap: break-word;">无</td>
+ <td>String</td>
+ <td>传递参数到<code>libobcdc</code>,如 'obcdc.properties.sort_trans_participants' = '1'。更多参数信息见 <a href="https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000221094">obcdc 配置项说明</a>。</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+## 支持的元数据
+
+在创建表时,您可以使用以下格式的元数据作为只读列(VIRTUAL)。
+
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 15%">列名</th>
+ <th class="text-left" style="width: 30%">数据类型</th>
+ <th class="text-left" style="width: 55%">描述</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>tenant_name</td>
+ <td>STRING NOT NULL</td>
+ <td>当前记录所属的租户名称。</td>
+ </tr>
+ <tr>
+ <td>database_name</td>
+ <td>STRING NOT NULL</td>
+ <td>当前记录所属的库名。</td>
+ </tr>
+ <tr>
+ <td>table_name</td>
+ <td>STRING NOT NULL</td>
+ <td>当前记录所属的表名称。</td>
+ </tr>
+ <tr>
+ <td>op_ts</td>
+ <td>TIMESTAMP_LTZ(3) NOT NULL</td>
+ <td>该值表示此修改在数据库中发生的时间。如果这条记录是该表在快照阶段读取的记录,则该值返回 0。</td>
+ </tr>
+ </tbody>
+</table>
+
+如下 SQL 展示了如何在表中使用这些元数据列:
+
+```sql
+CREATE TABLE products (
+ tenant_name STRING METADATA FROM 'tenant_name' VIRTUAL,
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ table_name STRING METADATA FROM 'table_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY(order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'oceanbase-cdc',
+ 'scan.startup.mode' = 'initial',
+ 'username' = 'user@test_tenant',
+ 'password' = 'pswd',
+ 'tenant-name' = 'test_tenant',
+ 'database-name' = '^test_db$',
+ 'table-name' = '^orders$',
+ 'hostname' = '127.0.0.1',
+ 'port' = '2881',
+ 'rootserver-list' = '127.0.0.1:2882:2881',
+ 'logproxy.host' = '127.0.0.1',
+ 'logproxy.port' = '2983');
+```
+
+## 特性
+
+### At-Least-Once 处理
+
+OceanBase CDC 连接器是一个 Flink Source 连接器。它将首先读取数据库快照,然后再读取变化事件,并进行 **At-Least-Once 处理**。
+
+OceanBase 数据库是一个分布式数据库,它的日志也分散在不同的服务器上。由于没有类似 MySQL binlog 偏移量的位置信息,OceanBase 数据库用时间戳作为位置标记。为确保读取完整的数据,liboblog(读取 OceanBase 日志记录的 C++ 库)可能会在给定的时间戳之前读取一些日志数据。因此,OceanBase 数据库可能会读到起始点附近时间戳的重复数据,可保证 **At-Least-Once 处理**。
+
+### 启动模式
+
+配置选项 `scan.startup.mode` 指定 OceanBase CDC 连接器的启动模式。可用取值包括:
+
+- `initial`(默认):在首次启动时对受监视的数据库表执行初始快照,并继续读取最新的提交日志。
+- `latest-offset`:首次启动时,不对受监视的数据库表执行快照,仅从连接器启动时读取提交日志。
+- `timestamp`:在首次启动时不对受监视的数据库表执行初始快照,仅从指定的 `scan.startup.timestamp` 读取最新的提交日志。
+
+### 消费提交日志
+
+OceanBase CDC 连接器使用 [oblogclient](https://github.com/oceanbase/oblogclient) 消费 OceanBase日志代理服务 中的事务日志。
+
+### DataStream Source
+
+OceanBase CDC 连接器也可以作为 DataStream Source 使用。您可以按照如下创建一个 SourceFunction:
+
+```java
+import org.apache.flink.api.common.typeinfo.TypeInformation;
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.streaming.api.functions.source.SourceFunction;
+import org.apache.flink.table.api.DataTypes;
+import org.apache.flink.table.catalog.Column;
+import org.apache.flink.table.catalog.ResolvedSchema;
+import org.apache.flink.table.catalog.UniqueConstraint;
+import org.apache.flink.table.data.RowData;
+import org.apache.flink.table.runtime.typeutils.InternalTypeInfo;
+import org.apache.flink.table.types.logical.RowType;
+
+import org.apache.flink.cdc.connectors.oceanbase.OceanBaseSource;
+import org.apache.flink.cdc.connectors.oceanbase.source.RowDataOceanBaseDeserializationSchema;
+import org.apache.flink.cdc.connectors.oceanbase.table.OceanBaseDeserializationSchema;
+import org.apache.flink.cdc.connectors.oceanbase.table.StartupMode;
+
+import java.time.ZoneId;
+import java.util.Arrays;
+import java.util.Collections;
+
+public class OceanBaseSourceExample {
+ public static void main(String[] args) throws Exception {
+ ResolvedSchema resolvedSchema =
+ new ResolvedSchema(
+ Arrays.asList(
+ Column.physical("id", DataTypes.INT().notNull()),
+ Column.physical("name", DataTypes.STRING().notNull())),
+ Collections.emptyList(),
+ UniqueConstraint.primaryKey("pk", Collections.singletonList("id")));
+
+ RowType physicalDataType =
+ (RowType) resolvedSchema.toPhysicalRowDataType().getLogicalType();
+ TypeInformation<RowData> resultTypeInfo = InternalTypeInfo.of(physicalDataType);
+ String serverTimeZone = "+00:00";
+
+ OceanBaseDeserializationSchema<RowData> deserializer =
+ RowDataOceanBaseDeserializationSchema.newBuilder()
+ .setPhysicalRowType(physicalDataType)
+ .setResultTypeInfo(resultTypeInfo)
+ .setServerTimeZone(ZoneId.of(serverTimeZone))
+ .build();
+
+ SourceFunction<RowData> oceanBaseSource =
+ OceanBaseSource.<RowData>builder()
+ .rsList("127.0.0.1:2882:2881")
+ .startupMode(StartupMode.INITIAL)
+ .username("user@test_tenant")
+ .password("pswd")
+ .tenantName("test_tenant")
+ .databaseName("^test_db$")
+ .tableName("^test_table$")
+ .hostname("127.0.0.1")
+ .port(2881)
+ .compatibleMode("mysql")
+ .jdbcDriver("com.mysql.jdbc.Driver")
+ .logProxyHost("127.0.0.1")
+ .logProxyPort(2983)
+ .serverTimeZone(serverTimeZone)
+ .deserializer(deserializer)
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+ // enable checkpoint
+ env.enableCheckpointing(3000);
+
+ env.addSource(oceanBaseSource).print().setParallelism(1);
+ env.execute("Print OceanBase Snapshot + Change Events");
+ }
+}
+```
+
+## 数据类型映射
+
+### Mysql 模式
+
+<div class="wy-table-responsive">
+ <table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left">OceanBase 数据类型</th>
+ <th class="text-left">Flink SQL 类型</th>
+ <th class="text-left">描述</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ BOOLEAN<br>
+ TINYINT(1)<br>
+ BIT(1)
+ </td>
+ <td>BOOLEAN</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TINYINT</td>
+ <td>TINYINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ SMALLINT<br>
+ TINYINT UNSIGNED
+ </td>
+ <td>SMALLINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ INT<br>
+ MEDIUMINT<br>
+ SMALLINT UNSIGNED
+ </td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BIGINT<br>
+ INT UNSIGNED
+ </td>
+ <td>BIGINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>BIGINT UNSIGNED</td>
+ <td>DECIMAL(20, 0)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ REAL<br>
+ FLOAT
+ </td>
+ <td>FLOAT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ DOUBLE
+ </td>
+ <td>DOUBLE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ NUMERIC(p, s)<br>
+ DECIMAL(p, s)<br>
+ where p <= 38 </td>
+ <td>DECIMAL(p, s)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ NUMERIC(p, s)<br>
+ DECIMAL(p, s)<br>
+ where 38 < p <=65 </td>
+ <td>STRING</td>
+ <td>
+ DECIMAL 等同于 NUMERIC。在 OceanBase 数据库中,DECIMAL 数据类型的精度最高为 65。<br>
+ 但在 Flink 中,DECIMAL 的最高精度为 38。因此,<br>
+ 如果你定义了一个精度大于 38 的 DECIMAL 列,你应当将其映射为 STRING,以避免精度损失。
+ </td>
+ </tr>
+ <tr>
+ <td>DATE</td>
+ <td>DATE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TIME [(p)]</td>
+ <td>TIME [(p)]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>DATETIME [(p)]</td>
+ <td>TIMESTAMP [(p)]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TIMESTAMP [(p)]</td>
+ <td>TIMESTAMP_LTZ [(p)]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>CHAR(n)</td>
+ <td>CHAR(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>VARCHAR(n)</td>
+ <td>VARCHAR(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>BIT(n)</td>
+ <td>BINARY(⌈n/8⌉)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>BINARY(n)</td>
+ <td>BINARY(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>VARBINARY(N)</td>
+ <td>VARBINARY(N)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ TINYTEXT<br>
+ TEXT<br>
+ MEDIUMTEXT<br>
+ LONGTEXT
+ </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ TINYBLOB<br>
+ BLOB<br>
+ MEDIUMBLOB<br>
+ LONGBLOB
+ </td>
+ <td>BYTES</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>YEAR</td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ENUM</td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>SET</td>
+ <td>ARRAY<STRING></td>
+ <td>
+ 因为 OceanBase 的 SET 类型是用包含一个或多个值的字符串对象表示,<br>
+ 所以映射到 Flink 时是一个字符串数组
+ </td>
+ </tr>
+ <tr>
+ <td>JSON</td>
+ <td>STRING</td>
+ <td>JSON 类型的数据在 Flink 中会转化为 JSON 格式的字符串</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+### Oracle 模式
+
+<div class="wy-table-responsive">
+ <table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left">OceanBase type</th>
+ <th class="text-left">Flink SQL type</th>
+ <th class="text-left">NOTE</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>NUMBER(1)</td>
+ <td>BOOLEAN</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 3 </td>
+ <td>TINYINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 5 </td>
+ <td>SMALLINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 10 </td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 19 </td>
+ <td>BIGINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), 19 <=p - s <=38</td>
+ <td>DECIMAL(p - s, 0)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s > 0)</td>
+ <td>DECIMAL(p, s)</td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s> 38 </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ FLOAT<br>
+ BINARY_FLOAT
+ </td>
+ <td>FLOAT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>BINARY_DOUBLE</td>
+ <td>DOUBLE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ DATE<br>
+ TIMESTAMP [(p)]
+ </td>
+ <td>TIMESTAMP [(p)]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ CHAR(n)<br>
+ NCHAR(n)<br>
+ VARCHAR(n)<br>
+ VARCHAR2(n)<br>
+ NVARCHAR2(n)<br>
+ CLOB<br>
+ </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ RAW<br>
+ BLOB<br>
+ ROWID
+ </td>
+ <td>BYTES</td>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/master/_sources/content/connectors/oceanbase-cdc.md.txt b/master/_sources/content/connectors/oceanbase-cdc.md.txt
new file mode 100644
index 000000000..864f5f44c
--- /dev/null
+++ b/master/_sources/content/connectors/oceanbase-cdc.md.txt
@@ -0,0 +1,788 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# OceanBase CDC Connector
+
+The OceanBase CDC connector allows for reading snapshot data and incremental data from OceanBase. This document describes how to set up the OceanBase CDC connector to run SQL queries against OceanBase.
+
+Dependencies
+------------
+
+In order to set up the OceanBase CDC connector, the following table provides dependency information for both projects using a build automation tool (such as Maven or SBT) and SQL Client with SQL JAR bundles.
+
+```xml
+<dependency>
+ <groupId>com.ververica</groupId>
+ <artifactId>flink-connector-oceanbase-cdc</artifactId>
+ <!-- The dependency is available only for stable releases, SNAPSHOT dependencies need to be built based on master or release- branches by yourself. -->
+ <version>3.0-SNAPSHOT</version>
+</dependency>
+```
+
+If you want to use OceanBase JDBC driver to connect to the enterprise edition database, you should also include the following dependency in your class path.
+
+```xml
+<dependency>
+ <groupId>com.oceanbase</groupId>
+ <artifactId>oceanbase-client</artifactId>
+ <version>2.4.2</version>
+</dependency>
+```
+
+### SQL Client JAR
+
+```Download link is available only for stable releases.```
+
+Download [flink-sql-connector-oceanbase-cdc-3.0-SNAPSHOT.jar](https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-oceanbase-cdc/3.0-SNAPSHOT/flink-sql-connector-oceanbase-cdc-3.0-SNAPSHOT.jar) and put it under `<FLINK_HOME>/lib/`.
+
+**Note:** flink-sql-connector-oceanbase-cdc-XXX-SNAPSHOT version is the code corresponding to the development branch. Users need to download the source code and compile the corresponding jar. Users should use the released version, such as [flink-sql-connector-oceanbase-cdc-2.2.1.jar](https://mvnrepository.com/artifact/com.ververica/flink-sql-connector-oceanbase-cdc), the released version will be available in the Maven central warehouse.
+
+For JDBC driver, the cdc jar above already contains MySQL JDBC driver 5.1.47, which is our recommended version. Due to the license issue, we can not include the OceanBase JDBC driver in the cdc jar. If you need to use it, you can download it from [here](https://repo1.maven.org/maven2/com/oceanbase/oceanbase-client/2.4.2/oceanbase-client-2.4.2.jar) and put it under `<FLINK_HOME>/lib/`, you also need to set the start option `jdbc.driver` to `com.oceanbase.jdbc.Driver`.
+
+Setup OceanBase and LogProxy Server
+----------------------
+
+1. Set up the OceanBase cluster following the [doc](https://github.com/oceanbase/oceanbase#quick-start).
+
+2. Create a user with password in `sys` tenant, this user is used in OceanBase LogProxy.
+
+ ```shell
+ mysql -h${host} -P${port} -uroot
+
+ mysql> SHOW TENANT;
+ mysql> CREATE USER ${sys_username} IDENTIFIED BY '${sys_password}';
+ mysql> GRANT ALL PRIVILEGES ON *.* TO ${sys_username} WITH GRANT OPTION;
+ ```
+
+3. Create a user in the tenant you want to monitor, this is used to read data for snapshot and change event.
+
+4. For users of OceanBase Community Edition, you need to get the `rootserver-list`. You can use the following command to get the value:
+
+ ```shell
+ mysql> show parameters like 'rootservice_list';
+ ```
+
+ For users of OceanBase Enterprise Edition, you need to get the `config-url`. You can use the following command to get the value:
+
+ ```shell
+ mysql> show parameters like 'obconfig_url';
+ ```
+
+5. Setup OceanBase LogProxy. For users of OceanBase Community Edition, you can follow the [quick start](https://github.com/oceanbase/oblogproxy#getting-started).
+
+How to create a OceanBase CDC table
+----------------
+
+The OceanBase CDC table can be defined as following:
+
+```sql
+-- checkpoint every 3000 milliseconds
+Flink SQL> SET 'execution.checkpointing.interval' = '3s';
+
+-- register a OceanBase table 'orders' in Flink SQL
+Flink SQL> CREATE TABLE orders (
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY (order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'oceanbase-cdc',
+ 'scan.startup.mode' = 'initial',
+ 'username' = 'user@test_tenant#cluster_name',
+ 'password' = 'pswd',
+ 'tenant-name' = 'test_tenant',
+ 'database-name' = '^test_db$',
+ 'table-name' = '^orders$',
+ 'hostname' = '127.0.0.1',
+ 'port' = '2881',
+ 'rootserver-list' = '127.0.0.1:2882:2881',
+ 'logproxy.host' = '127.0.0.1',
+ 'logproxy.port' = '2983',
+ 'working-mode' = 'memory'
+);
+
+-- read snapshot and binlogs from orders table
+Flink SQL> SELECT * FROM orders;
+```
+
+If you want to use OceanBase Oracle mode, you need to add the OceanBase jdbc jar file to Flink and set up the enterprise edition of oblogproxy, then you can create a table in Flink as following:
+
+```sql
+Flink SQL> CREATE TABLE orders (
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY (order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'oceanbase-cdc',
+ 'scan.startup.mode' = 'initial',
+ 'username' = 'user@test_tenant#cluster_name',
+ 'password' = 'pswd',
+ 'tenant-name' = 'test_tenant',
+ 'database-name' = '^test_db$',
+ 'table-name' = '^orders$',
+ 'hostname' = '127.0.0.1',
+ 'port' = '2881',
+ 'compatible-mode' = 'oracle',
+ 'jdbc.driver' = 'com.oceanbase.jdbc.Driver',
+ 'config-url' = 'http://127.0.0.1:8080/services?Action=ObRootServiceInfo&User_ID=xxx&UID=xxx&ObRegion=xxx',
+ 'logproxy.host' = '127.0.0.1',
+ 'logproxy.port' = '2983',
+ 'working-mode' = 'memory'
+);
+```
+
+You can also try the quickstart tutorial that sync data from OceanBase to Elasticsearch, please refer [Flink CDC Tutorial](https://ververica.github.io/flink-cdc-connectors/release-2.3//content/quickstart/oceanbase-tutorial.html) for more information.
+
+Connector Options
+----------------
+
+The OceanBase CDC Connector contains some options for both sql and stream api as the following sheet.
+
+*Note*: The connector supports two ways to specify the table list to listen to, and will get the union of the results when both way are used at the same time.
+1. Use `database-name` and `table-name` to match database and table names in regex. As the `obcdc` (former `liboblog`) only supports `fnmatch` now, we can't use regex directly to filter change events, so these two options can only be used in `initial` startup mode.
+2. Use `table-list` to match the exact value of database and table names.
+
+<div class="highlight">
+ <table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 10%">Option</th>
+ <th class="text-left" style="width: 8%">Required</th>
+ <th class="text-left" style="width: 7%">Default</th>
+ <th class="text-left" style="width: 10%">Type</th>
+ <th class="text-left" style="width: 65%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>connector</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Specify what connector to use, here should be <code>'oceanbase-cdc'</code>.</td>
+ </tr>
+ <tr>
+ <td>scan.startup.mode</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Specify the startup mode for OceanBase CDC consumer, valid enumerations are
+ <code>'initial'</code>,<code>'latest-offset'</code> or <code>'timestamp'</code>.
+ </td>
+ </tr>
+ <tr>
+ <td>scan.startup.timestamp</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Long</td>
+ <td>Timestamp in seconds of the start point, only used for <code>'timestamp'</code> startup mode.</td>
+ </tr>
+ <tr>
+ <td>username</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Username to be used when connecting to OceanBase.</td>
+ </tr>
+ <tr>
+ <td>password</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Password to be used when connecting to OceanBase.</td>
+ </tr>
+ <tr>
+ <td>tenant-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Tenant name of OceanBase to monitor, should be exact value.</td>
+ </tr>
+ <tr>
+ <td>database-name</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Database name of OceanBase to monitor, should be regular expression. Only can be used with 'initial' mode.</td>
+ </tr>
+ <tr>
+ <td>table-name</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Table name of OceanBase to monitor, should be regular expression. Only can be used with 'initial' mode.</td>
+ </tr>
+ <tr>
+ <td>table-list</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>List of full names of tables, separated by commas, e.g. "db1.table1, db2.table2".</td>
+ </tr>
+ <tr>
+ <td>hostname</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>IP address or hostname of the OceanBase database server or OceanBase Proxy server.</td>
+ </tr>
+ <tr>
+ <td>port</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Integer</td>
+ <td>Integer port number to connect to OceanBase. It can be the SQL port of OceanBase server, which is 2881 by default, or the port of OceanBase proxy service, which is 2883 by default.</td>
+ </tr>
+ <tr>
+ <td>connect.timeout</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">30s</td>
+ <td>Duration</td>
+ <td>The maximum time that the connector should wait after trying to connect to the OceanBase database server before timing out.</td>
+ </tr>
+ <tr>
+ <td>server-time-zone</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">+00:00</td>
+ <td>String</td>
+ <td>The session timezone which controls how temporal types are converted to STRING in OceanBase. Can be UTC offset in format "±hh:mm", or named time zones if the time zone information tables in the mysql database have been created and populated.</td>
+ </tr>
+ <tr>
+ <td>logproxy.host</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Hostname or IP address of OceanBase log proxy service.</td>
+ </tr>
+ <tr>
+ <td>logproxy.port</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>Integer</td>
+ <td>Port number of OceanBase log proxy service.</td>
+ </tr>
+ <tr>
+ <td>logproxy.client.id</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">By rule.</td>
+ <td>String</td>
+ <td>Id of a log proxy client connection, will be in format {flink_ip}_{process_id}_{timestamp}_{thread_id}_{tenant} by default.</td>
+ </tr>
+ <tr>
+ <td>rootserver-list</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>The semicolon-separated list of OceanBase root servers in format `ip:rpc_port:sql_port`, required for OceanBase CE.</td>
+ </tr>
+ <tr>
+ <td>config-url</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>The url to get the server info from the config server, required for OceanBase EE.</td>
+ </tr>
+ <tr>
+ <td>working-mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">storage</td>
+ <td>String</td>
+ <td>Working mode of `obcdc` in LogProxy, can be `storage` or `memory`.</td>
+ </tr>
+ <tr>
+ <td>compatible-mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">mysql</td>
+ <td>String</td>
+ <td>Compatible mode of OceanBase, can be `mysql` or `oracle`.</td>
+ </tr>
+ <tr>
+ <td>jdbc.driver</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">com.mysql.jdbc.Driver</td>
+ <td>String</td>
+ <td>JDBC driver class for snapshot reading.</td>
+ </tr>
+ <tr>
+ <td>jdbc.properties.*</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Option to pass custom JDBC URL properties. User can pass custom properties like 'jdbc.properties.useSSL' = 'false'.</td>
+ </tr>
+ <tr>
+ <td>obcdc.properties.*</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Option to pass custom configurations to the <code>libobcdc</code>, eg: 'obcdc.properties.sort_trans_participants' = '1'. Please refer to <a href="https://en.oceanbase.com/docs/common-oceanbase-database-10000000000872541">obcdc parameters</a> for more details.</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+Available Metadata
+----------------
+
+The following format metadata can be exposed as read-only (VIRTUAL) columns in a table definition.
+
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 15%">Key</th>
+ <th class="text-left" style="width: 30%">DataType</th>
+ <th class="text-left" style="width: 55%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>tenant_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the tenant that contains the row.</td>
+ </tr>
+ <tr>
+ <td>database_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the database that contains the row.</td>
+ </tr>
+ <tr>
+ <td>table_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the table that contains the row.</td>
+ </tr>
+ <tr>
+ <td>op_ts</td>
+ <td>TIMESTAMP_LTZ(3) NOT NULL</td>
+ <td>It indicates the time that the change was made in the database. <br>
+ If the record is read from snapshot of the table instead of the change stream, the value is always 0.</td>
+ </tr>
+ </tbody>
+</table>
+
+The extended CREATE TABLE example demonstrates the syntax for exposing these metadata fields:
+
+```sql
+CREATE TABLE products (
+ tenant_name STRING METADATA FROM 'tenant_name' VIRTUAL,
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ table_name STRING METADATA FROM 'table_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ order_id INT,
+ order_date TIMESTAMP(0),
+ customer_name STRING,
+ price DECIMAL(10, 5),
+ product_id INT,
+ order_status BOOLEAN,
+ PRIMARY KEY(order_id) NOT ENFORCED
+) WITH (
+ 'connector' = 'oceanbase-cdc',
+ 'scan.startup.mode' = 'initial',
+ 'username' = 'user@test_tenant',
+ 'password' = 'pswd',
+ 'tenant-name' = 'test_tenant',
+ 'database-name' = '^test_db$',
+ 'table-name' = '^orders$',
+ 'hostname' = '127.0.0.1',
+ 'port' = '2881',
+ 'rootserver-list' = '127.0.0.1:2882:2881',
+ 'logproxy.host' = '127.0.0.1',
+ 'logproxy.port' = '2983',
+ 'working-mode' = 'memory'
+);
+```
+
+Features
+--------
+
+### At-Least-Once Processing
+
+The OceanBase CDC connector is a Flink Source connector which will read database snapshot first and then continues to read change events with **at-least-once processing**.
+
+OceanBase is a kind of distributed database whose log files are distributed on different servers. As there is no position information like MySQL binlog offset, we can only use timestamp as the position mark. In order to ensure the completeness of reading data, `liboblog` (a C++ library to read OceanBase log record) might read some log data before the given timestamp. So in this way we may read duplicate data whose timestamp is around the start point, and only 'at-least-once' can be guaranteed.
+
+### Startup Reading Position
+
+The config option `scan.startup.mode` specifies the startup mode for OceanBase CDC consumer. The valid enumerations are:
+
+- `initial`: Performs an initial snapshot on the monitored table upon first startup, and continue to read the latest commit log.
+- `latest-offset`: Never to perform snapshot on the monitored table upon first startup and just read the latest commit log since the connector is started.
+- `timestamp`: Never to perform snapshot on the monitored table upon first startup and just read the commit log from the given `scan.startup.timestamp`.
+
+### Consume Commit Log
+
+The OceanBase CDC Connector using [oblogclient](https://github.com/oceanbase/oblogclient) to consume commit log from OceanBase LogProxy.
+
+### DataStream Source
+
+The OceanBase CDC connector can also be a DataStream source. You can create a SourceFunction as the following shows:
+
+```java
+import org.apache.flink.api.common.typeinfo.TypeInformation;
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.streaming.api.functions.source.SourceFunction;
+import org.apache.flink.table.api.DataTypes;
+import org.apache.flink.table.catalog.Column;
+import org.apache.flink.table.catalog.ResolvedSchema;
+import org.apache.flink.table.catalog.UniqueConstraint;
+import org.apache.flink.table.data.RowData;
+import org.apache.flink.table.runtime.typeutils.InternalTypeInfo;
+import org.apache.flink.table.types.logical.RowType;
+
+import org.apache.flink.cdc.connectors.oceanbase.OceanBaseSource;
+import org.apache.flink.cdc.connectors.oceanbase.source.RowDataOceanBaseDeserializationSchema;
+import org.apache.flink.cdc.connectors.oceanbase.table.OceanBaseDeserializationSchema;
+import org.apache.flink.cdc.connectors.oceanbase.table.StartupMode;
+
+import java.time.ZoneId;
+import java.util.Arrays;
+import java.util.Collections;
+
+public class OceanBaseSourceExample {
+ public static void main(String[] args) throws Exception {
+ ResolvedSchema resolvedSchema =
+ new ResolvedSchema(
+ Arrays.asList(
+ Column.physical("id", DataTypes.INT().notNull()),
+ Column.physical("name", DataTypes.STRING().notNull())),
+ Collections.emptyList(),
+ UniqueConstraint.primaryKey("pk", Collections.singletonList("id")));
+
+ RowType physicalDataType =
+ (RowType) resolvedSchema.toPhysicalRowDataType().getLogicalType();
+ TypeInformation<RowData> resultTypeInfo = InternalTypeInfo.of(physicalDataType);
+ String serverTimeZone = "+00:00";
+
+ OceanBaseDeserializationSchema<RowData> deserializer =
+ RowDataOceanBaseDeserializationSchema.newBuilder()
+ .setPhysicalRowType(physicalDataType)
+ .setResultTypeInfo(resultTypeInfo)
+ .setServerTimeZone(ZoneId.of(serverTimeZone))
+ .build();
+
+ SourceFunction<RowData> oceanBaseSource =
+ OceanBaseSource.<RowData>builder()
+ .rsList("127.0.0.1:2882:2881")
+ .startupMode(StartupMode.INITIAL)
+ .username("user@test_tenant")
+ .password("pswd")
+ .tenantName("test_tenant")
+ .databaseName("^test_db$")
+ .tableName("^test_table$")
+ .hostname("127.0.0.1")
+ .port(2881)
+ .compatibleMode("mysql")
+ .jdbcDriver("com.mysql.jdbc.Driver")
+ .logProxyHost("127.0.0.1")
+ .logProxyPort(2983)
+ .serverTimeZone(serverTimeZone)
+ .deserializer(deserializer)
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+ // enable checkpoint
+ env.enableCheckpointing(3000);
+
+ env.addSource(oceanBaseSource).print().setParallelism(1);
+ env.execute("Print OceanBase Snapshot + Change Events");
+ }
+}
+```
+Data Type Mapping
+----------------
+
+### Mysql Mode
+
+<div class="wy-table-responsive">
+ <table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left">OceanBase type</th>
+ <th class="text-left">Flink SQL type</th>
+ <th class="text-left">NOTE</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>BOOLEAN<br>
+ TINYINT(1)<br>
+ BIT(1)</td>
+ <td>BOOLEAN</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TINYINT</td>
+ <td>TINYINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ SMALLINT<br>
+ TINYINT UNSIGNED</td>
+ <td>SMALLINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ INT<br>
+ MEDIUMINT<br>
+ SMALLINT UNSIGNED</td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ BIGINT<br>
+ INT UNSIGNED</td>
+ <td>BIGINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>BIGINT UNSIGNED</td>
+ <td>DECIMAL(20, 0)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ REAL<br>
+ FLOAT<br>
+ </td>
+ <td>FLOAT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ DOUBLE
+ </td>
+ <td>DOUBLE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ NUMERIC(p, s)<br>
+ DECIMAL(p, s)<br>
+ where p <= 38<br>
+ </td>
+ <td>DECIMAL(p, s)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ NUMERIC(p, s)<br>
+ DECIMAL(p, s)<br>
+ where 38 < p <=65<br>
+ </td>
+ <td>STRING</td>
+ <td>DECIMAL is equivalent to NUMERIC. The precision for DECIMAL data type is up to 65 in OceanBase, but
+ the precision for DECIMAL is limited to 38 in Flink.
+ So if you define a decimal column whose precision is greater than 38, you should map it to STRING to
+ avoid precision loss.</td>
+ </tr>
+ <tr>
+ <td>DATE</td>
+ <td>DATE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TIME [(p)]</td>
+ <td>TIME [(p)]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>DATETIME [(p)]</td>
+ <td>TIMESTAMP [(p)]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>TIMESTAMP [(p)]</td>
+ <td>TIMESTAMP_LTZ [(p)]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>CHAR(n)</td>
+ <td>CHAR(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>VARCHAR(n)</td>
+ <td>VARCHAR(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>BIT(n)</td>
+ <td>BINARY(⌈(n + 7) / 8⌉)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>BINARY(n)</td>
+ <td>BINARY(n)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>VARBINARY(N)</td>
+ <td>VARBINARY(N)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ TINYTEXT<br>
+ TEXT<br>
+ MEDIUMTEXT<br>
+ LONGTEXT<br>
+ </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ TINYBLOB<br>
+ BLOB<br>
+ MEDIUMBLOB<br>
+ LONGBLOB<br>
+ </td>
+ <td>BYTES</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>YEAR</td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ENUM</td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>SET</td>
+ <td>ARRAY<STRING></td>
+ <td>As the SET data type in OceanBase is a string object that can have zero or more values, it should always be mapped to an array of string</td>
+ </tr>
+ <tr>
+ <td>JSON</td>
+ <td>STRING</td>
+ <td>The JSON data type will be converted into STRING with JSON format in Flink.</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+### Oracle Mode
+
+<div class="wy-table-responsive">
+ <table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left">OceanBase type</th>
+ <th class="text-left">Flink SQL type</th>
+ <th class="text-left">NOTE</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>NUMBER(1)</td>
+ <td>BOOLEAN</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 3 </td>
+ <td>TINYINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 5 </td>
+ <td>SMALLINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 10 </td>
+ <td>INT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 19 </td>
+ <td>BIGINT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), 19 <=p - s <=38</td>
+ <td>DECIMAL(p - s, 0)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s > 0)</td>
+ <td>DECIMAL(p, s)</td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s> 38 </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ FLOAT<br>
+ BINARY_FLOAT
+ </td>
+ <td>FLOAT</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>BINARY_DOUBLE</td>
+ <td>DOUBLE</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ DATE<br>
+ TIMESTAMP [(p)]
+ </td>
+ <td>TIMESTAMP [(p)]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ CHAR(n)<br>
+ NCHAR(n)<br>
+ VARCHAR(n)<br>
+ VARCHAR2(n)<br>
+ NVARCHAR2(n)<br>
+ CLOB<br>
+ </td>
+ <td>STRING</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ RAW<br>
+ BLOB<br>
+ ROWID
+ </td>
+ <td>BYTES</td>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
\ No newline at end of file
diff --git a/master/_sources/content/connectors/oracle-cdc.md.txt b/master/_sources/content/connectors/oracle-cdc.md.txt
new file mode 100644
index 000000000..ddd4881df
--- /dev/null
+++ b/master/_sources/content/connectors/oracle-cdc.md.txt
@@ -0,0 +1,706 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# Oracle CDC Connector
+
+The Oracle CDC connector allows for reading snapshot data and incremental data from Oracle database. This document describes how to setup the Oracle CDC connector to run SQL queries against Oracle databases.
+
+Dependencies
+------------
+
+In order to setup the Oracle CDC connector, the following table provides dependency information for both projects using a build automation tool (such as Maven or SBT) and SQL Client with SQL JAR bundles.
+
+### Maven dependency
+
+```xml
+<dependency>
+ <groupId>com.ververica</groupId>
+ <artifactId>flink-connector-oracle-cdc</artifactId>
+ <!-- The dependency is available only for stable releases, SNAPSHOT dependencies need to be built based on master or release- branches by yourself. -->
+ <version>3.0-SNAPSHOT</version>
+</dependency>
+```
+
+### SQL Client JAR
+
+**Download link is available only for stable releases.**
+
+Download [flink-sql-connector-oracle-cdc-3.0-SNAPSHOT.jar](https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-oracle-cdc/3.0-SNAPSHOT/flink-sql-connector-oracle-cdc-3.0-SNAPSHOT.jar) and put it under `<FLINK_HOME>/lib/`.
+
+**Note:** flink-sql-connector-oracle-cdc-XXX-SNAPSHOT version is the code corresponding to the development branch. Users need to download the source code and compile the corresponding jar. Users should use the released version, such as [flink-sql-connector-oracle-cdc-2.3.0.jar](https://mvnrepository.com/artifact/com.ververica/flink-sql-connector-oracle-cdc), the released version will be available in the Maven central warehouse.
+
+Setup Oracle
+----------------
+You have to enable log archiving for Oracle database and define an Oracle user with appropriate permissions on all databases that the Debezium Oracle connector monitors.
+
+### For Non-CDB database
+
+1. Enable log archiving
+
+ (1.1). Connect to the database as DBA
+ ```sql
+ ORACLE_SID=SID
+ export ORACLE_SID
+ sqlplus /nolog
+ CONNECT sys/password AS SYSDBA
+ ```
+
+ (1.2). Enable log archiving
+ ```sql
+ alter system set db_recovery_file_dest_size = 10G;
+ alter system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;
+ shutdown immediate;
+ startup mount;
+ alter database archivelog;
+ alter database open;
+ ```
+ **Note:**
+
+ - Enable log archiving requires database restart, pay attention when try to do it
+ - The archived logs will occupy a large amount of disk space, so consider clean the expired logs the periodically
+
+ (1.3). Check whether log archiving is enabled
+ ```sql
+ -- Should now "Database log mode: Archive Mode"
+ archive log list;
+ ```
+ **Note:**
+
+ Supplemental logging must be enabled for captured tables or the database in order for data changes to capture the <em>before</em> state of changed database rows.
+ The following illustrates how to configure this on the table/database level.
+ ```sql
+ -- Enable supplemental logging for a specific table:
+ ALTER TABLE inventory.customers ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
+ ```
+ ```sql
+ -- Enable supplemental logging for database
+ ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
+ ```
+
+2. Create an Oracle user with permissions
+
+ (2.1). Create Tablespace
+ ```sql
+ sqlplus sys/password@host:port/SID AS SYSDBA;
+ CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/SID/logminer_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
+ exit;
+ ```
+
+ (2.2). Create a user and grant permissions
+ ```sql
+ sqlplus sys/password@host:port/SID AS SYSDBA;
+ CREATE USER flinkuser IDENTIFIED BY flinkpw DEFAULT TABLESPACE LOGMINER_TBS QUOTA UNLIMITED ON LOGMINER_TBS;
+ GRANT CREATE SESSION TO flinkuser;
+ GRANT SET CONTAINER TO flinkuser;
+ GRANT SELECT ON V_$DATABASE to flinkuser;
+ GRANT FLASHBACK ANY TABLE TO flinkuser;
+ GRANT SELECT ANY TABLE TO flinkuser;
+ GRANT SELECT_CATALOG_ROLE TO flinkuser;
+ GRANT EXECUTE_CATALOG_ROLE TO flinkuser;
+ GRANT SELECT ANY TRANSACTION TO flinkuser;
+ GRANT LOGMINING TO flinkuser;
+ GRANT ANALYZE ANY TO flinkuser;
+
+ GRANT CREATE TABLE TO flinkuser;
+ -- need not to execute if set scan.incremental.snapshot.enabled=true(default)
+ GRANT LOCK ANY TABLE TO flinkuser;
+ GRANT ALTER ANY TABLE TO flinkuser;
+ GRANT CREATE SEQUENCE TO flinkuser;
+
+ GRANT EXECUTE ON DBMS_LOGMNR TO flinkuser;
+ GRANT EXECUTE ON DBMS_LOGMNR_D TO flinkuser;
+
+ GRANT SELECT ON V_$LOG TO flinkuser;
+ GRANT SELECT ON V_$LOG_HISTORY TO flinkuser;
+ GRANT SELECT ON V_$LOGMNR_LOGS TO flinkuser;
+ GRANT SELECT ON V_$LOGMNR_CONTENTS TO flinkuser;
+ GRANT SELECT ON V_$LOGMNR_PARAMETERS TO flinkuser;
+ GRANT SELECT ON V_$LOGFILE TO flinkuser;
+ GRANT SELECT ON V_$ARCHIVED_LOG TO flinkuser;
+ GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO flinkuser;
+ exit;
+ ```
+
+### For CDB database
+
+Overall, the steps for configuring CDB database is quite similar to non-CDB database, but the commands may be different.
+1. Enable log archiving
+ ```sql
+ ORACLE_SID=ORCLCDB
+ export ORACLE_SID
+ sqlplus /nolog
+ CONNECT sys/password AS SYSDBA
+ alter system set db_recovery_file_dest_size = 10G;
+ -- should exist
+ alter system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;
+ shutdown immediate
+ startup mount
+ alter database archivelog;
+ alter database open;
+ -- Should show "Database log mode: Archive Mode"
+ archive log list
+ exit;
+ ```
+ **Note:**
+ You can also use the following commands to enable supplemental logging:
+ ```sql
+ -- Enable supplemental logging for a specific table:
+ ALTER TABLE inventory.customers ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
+ -- Enable supplemental logging for database
+ ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
+ ```
+
+2. Create an Oracle user with permissions
+ ```sql
+ sqlplus sys/password@//localhost:1521/ORCLCDB as sysdba
+ CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
+ exit
+ ```
+ ```sql
+ sqlplus sys/password@//localhost:1521/ORCLPDB1 as sysdba
+ CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
+ exit
+ ```
+ ```sql
+ sqlplus sys/password@//localhost:1521/ORCLCDB as sysdba
+ CREATE USER flinkuser IDENTIFIED BY flinkpw DEFAULT TABLESPACE logminer_tbs QUOTA UNLIMITED ON logminer_tbs CONTAINER=ALL;
+ GRANT CREATE SESSION TO flinkuser CONTAINER=ALL;
+ GRANT SET CONTAINER TO flinkuser CONTAINER=ALL;
+ GRANT SELECT ON V_$DATABASE to flinkuser CONTAINER=ALL;
+ GRANT FLASHBACK ANY TABLE TO flinkuser CONTAINER=ALL;
+ GRANT SELECT ANY TABLE TO flinkuser CONTAINER=ALL;
+ GRANT SELECT_CATALOG_ROLE TO flinkuser CONTAINER=ALL;
+ GRANT EXECUTE_CATALOG_ROLE TO flinkuser CONTAINER=ALL;
+ GRANT SELECT ANY TRANSACTION TO flinkuser CONTAINER=ALL;
+ GRANT LOGMINING TO flinkuser CONTAINER=ALL;
+ GRANT CREATE TABLE TO flinkuser CONTAINER=ALL;
+ -- need not to execute if set scan.incremental.snapshot.enabled=true(default)
+ GRANT LOCK ANY TABLE TO flinkuser CONTAINER=ALL;
+ GRANT CREATE SEQUENCE TO flinkuser CONTAINER=ALL;
+
+ GRANT EXECUTE ON DBMS_LOGMNR TO flinkuser CONTAINER=ALL;
+ GRANT EXECUTE ON DBMS_LOGMNR_D TO flinkuser CONTAINER=ALL;
+
+ GRANT SELECT ON V_$LOG TO flinkuser CONTAINER=ALL;
+ GRANT SELECT ON V_$LOG_HISTORY TO flinkuser CONTAINER=ALL;
+ GRANT SELECT ON V_$LOGMNR_LOGS TO flinkuser CONTAINER=ALL;
+ GRANT SELECT ON V_$LOGMNR_CONTENTS TO flinkuser CONTAINER=ALL;
+ GRANT SELECT ON V_$LOGMNR_PARAMETERS TO flinkuser CONTAINER=ALL;
+ GRANT SELECT ON V_$LOGFILE TO flinkuser CONTAINER=ALL;
+ GRANT SELECT ON V_$ARCHIVED_LOG TO flinkuser CONTAINER=ALL;
+ GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO flinkuser CONTAINER=ALL;
+ exit
+ ```
+
+See more about the [Setting up Oracle](https://debezium.io/documentation/reference/1.9/connectors/oracle.html#setting-up-oracle)
+
+How to create an Oracle CDC table
+----------------
+
+The Oracle CDC table can be defined as following:
+
+```sql
+-- register an Oracle table 'products' in Flink SQL
+Flink SQL> CREATE TABLE products (
+ ID INT NOT NULL,
+ NAME STRING,
+ DESCRIPTION STRING,
+ WEIGHT DECIMAL(10, 3),
+ PRIMARY KEY(id) NOT ENFORCED
+ ) WITH (
+ 'connector' = 'oracle-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '1521',
+ 'username' = 'flinkuser',
+ 'password' = 'flinkpw',
+ 'database-name' = 'ORCLCDB',
+ 'schema-name' = 'inventory',
+ 'table-name' = 'products');
+
+-- read snapshot and redo logs from products table
+Flink SQL> SELECT * FROM products;
+```
+**Note:**
+When working with the CDB + PDB model, you are expected to add an extra option `'debezium.database.pdb.name' = 'xxx'` in Flink DDL to specific the name of the PDB to connect to.
+
+**Note:**
+While the connector might work with a variety of Oracle versions and editions, only Oracle 9i, 10g, 11g and 12c have been tested.
+
+Connector Options
+----------------
+<div class="highlight">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 25%">Option</th>
+ <th class="text-left" style="width: 8%">Required</th>
+ <th class="text-left" style="width: 7%">Default</th>
+ <th class="text-left" style="width: 10%">Type</th>
+ <th class="text-left" style="width: 50%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>connector</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Specify what connector to use, here should be <code>'oracle-cdc'</code>.</td>
+ </tr>
+ <tr>
+ <td>hostname</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>IP address or hostname of the Oracle database server. If the url is not empty, hostname may not be configured, otherwise hostname can not be empty</td>
+ </tr>
+ <tr>
+ <td>username</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Name of the Oracle database to use when connecting to the Oracle database server.</td>
+ </tr>
+ <tr>
+ <td>password</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Password to use when connecting to the Oracle database server.</td>
+ </tr>
+ <tr>
+ <td>database-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Database name of the Oracle server to monitor.</td>
+ </tr>
+ <tr>
+ <td>schema-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Schema name of the Oracle database to monitor.</td>
+ </tr>
+ <tr>
+ <td>table-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Table name of the Oracle database to monitor.</td>
+ </tr>
+ <tr>
+ <td>port</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1521</td>
+ <td>Integer</td>
+ <td>Integer port number of the Oracle database server.</td>
+ </tr>
+ <tr>
+ <td>url</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">jdbc:oracle:thin:@{hostname}:{port}:{database-name}</td>
+ <td>String</td>
+ <td>JdbcUrl of the oracle database server . If the hostname and port parameter is configured, the URL is concatenated by hostname port database-name in SID format by default. Otherwise, you need to configure the URL parameter</td>
+ </tr>
+ <tr>
+ <td>scan.startup.mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">initial</td>
+ <td>String</td>
+ <td>Optional startup mode for Oracle CDC consumer, valid enumerations are "initial"
+ and "latest-offset".
+ Please see <a href="#startup-reading-position">Startup Reading Position</a> section for more detailed information.</td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">true</td>
+ <td>Boolean</td>
+ <td>Incremental snapshot is a new mechanism to read snapshot of a table. Compared to the old snapshot mechanism,
+ the incremental snapshot has many advantages, including:
+ (1) source can be parallel during snapshot reading,
+ (2) source can perform checkpoints in the chunk granularity during snapshot reading,
+ (3) source doesn't need to acquire ROW SHARE MODE lock before snapshot reading.
+ </td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.chunk.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">8096</td>
+ <td>Integer</td>
+ <td>The chunk size (number of rows) of table snapshot, captured tables are split into multiple chunks when read the snapshot of table.</td>
+ </tr>
+ <tr>
+ <td>scan.snapshot.fetch.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1024</td>
+ <td>Integer</td>
+ <td>The maximum fetch size for per poll when read table snapshot.</td>
+ </tr>
+ <tr>
+ <td>connect.max-retries</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">3</td>
+ <td>Integer</td>
+ <td>The max retry times that the connector should retry to build Oracle database server connection.</td>
+ </tr>
+ <tr>
+ <td>connection.pool.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">20</td>
+ <td>Integer</td>
+ <td>The connection pool size.</td>
+ </tr>
+ <tr>
+ <td>debezium.*</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Pass-through Debezium's properties to Debezium Embedded Engine which is used to capture data changes from Oracle server.
+ For example: <code>'debezium.snapshot.mode' = 'never'</code>.
+ See more about the <a href="https://debezium.io/documentation/reference/1.9/connectors/oracle.html#oracle-connector-properties">Debezium's Oracle Connector properties</a></td>
+ </tr>
+ <tr>
+ <td>scan.incremental.close-idle-reader.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>Whether to close idle readers at the end of the snapshot phase. <br>
+ The flink version is required to be greater than or equal to 1.14 when 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' is set to true.<br>
+ If the flink version is greater than or equal to 1.15, the default value of 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' has been changed to true,
+ so it does not need to be explicitly configured 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' = 'true'
+ </td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.chunk.key-column</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>The chunk key of table snapshot, captured tables are split into multiple chunks by a chunk key when read the snapshot of table.
+ By default, the chunk key is 'ROWID'. This column must be a column of the primary key.</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+Limitation
+--------
+
+### Can't perform checkpoint during scanning snapshot of tables
+During scanning snapshot of database tables, since there is no recoverable position, we can't perform checkpoints. In order to not perform checkpoints, Oracle CDC source will keep the checkpoint waiting to timeout. The timeout checkpoint will be recognized as failed checkpoint, by default, this will trigger a failover for the Flink job. So if the database table is large, it is recommended to add following Flink configurations to avoid failover because of the timeout checkpoints:
+
+```
+execution.checkpointing.interval: 10min
+execution.checkpointing.tolerable-failed-checkpoints: 100
+restart-strategy: fixed-delay
+restart-strategy.fixed-delay.attempts: 2147483647
+```
+
+Available Metadata
+----------------
+
+The following format metadata can be exposed as read-only (VIRTUAL) columns in a table definition.
+
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 15%">Key</th>
+ <th class="text-left" style="width: 30%">DataType</th>
+ <th class="text-left" style="width: 55%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>table_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the table that contain the row.</td>
+ </tr>
+ <tr>
+ <td>schema_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the schema that contain the row.</td>
+ </tr>
+ <tr>
+ <td>database_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the database that contain the row.</td>
+ </tr>
+ <tr>
+ <td>op_ts</td>
+ <td>TIMESTAMP_LTZ(3) NOT NULL</td>
+ <td>It indicates the time that the change was made in the database. <br>If the record is read from snapshot of the table instead of the change stream, the value is always 0.</td>
+ </tr>
+ </tbody>
+</table>
+
+The extended CREATE TABLE example demonstrates the syntax for exposing these metadata fields:
+```sql
+CREATE TABLE products (
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ schema_name STRING METADATA FROM 'schema_name' VIRTUAL,
+ table_name STRING METADATA FROM 'table_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ ID INT NOT NULL,
+ NAME STRING,
+ DESCRIPTION STRING,
+ WEIGHT DECIMAL(10, 3),
+ PRIMARY KEY(id) NOT ENFORCED
+) WITH (
+ 'connector' = 'oracle-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '1521',
+ 'username' = 'flinkuser',
+ 'password' = 'flinkpw',
+ 'database-name' = 'ORCLCDB',
+ 'schema-name' = 'inventory',
+ 'table-name' = 'products',
+ 'debezium.log.mining.strategy' = 'online_catalog',
+ 'debezium.log.mining.continuous.mine' = 'true'
+);
+```
+
+**Note** : The Oracle dialect is case-sensitive, it converts field name to uppercase if the field name is not quoted, Flink SQL doesn't convert the field name. Thus for physical columns from oracle database, we should use its converted field name in Oracle when define an `oracle-cdc` table in Flink SQL.
+
+Features
+--------
+
+### Exactly-Once Processing
+
+The Oracle CDC connector is a Flink Source connector which will read database snapshot first and then continues to read change events with **exactly-once processing** even failures happen. Please read [How the connector works](https://debezium.io/documentation/reference/1.9/connectors/oracle.html#how-the-oracle-connector-works).
+
+### Startup Reading Position
+
+The config option `scan.startup.mode` specifies the startup mode for Oracle CDC consumer. The valid enumerations are:
+
+- `initial` (default): Performs an initial snapshot on the monitored database tables upon first startup, and continue to read the latest redo log.
+- `latest-offset`: Never to perform a snapshot on the monitored database tables upon first startup, just read from
+ the change since the connector was started.
+
+_Note: the mechanism of `scan.startup.mode` option relying on Debezium's `snapshot.mode` configuration. So please do not use them together. If you specific both `scan.startup.mode` and `debezium.snapshot.mode` options in the table DDL, it may make `scan.startup.mode` doesn't work._
+
+### Single Thread Reading
+
+The Oracle CDC source can't work in parallel reading, because there is only one task can receive change events.
+
+### DataStream Source
+
+The Oracle CDC connector can also be a DataStream source. There are two modes for the DataStream source:
+
+- incremental snapshot based, which allows parallel reading
+- SourceFunction based, which only supports single thread reading
+
+#### Incremental Snapshot based DataStream (Experimental)
+
+```java
+import org.apache.flink.cdc.connectors.base.options.StartupOptions;
+import org.apache.flink.cdc.connectors.base.source.jdbc.JdbcIncrementalSource;
+import org.apache.flink.cdc.connectors.oracle.source.OracleSourceBuilder;
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+import org.apache.flink.api.common.eventtime.WatermarkStrategy;
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+
+import java.util.Properties;
+
+public class OracleParallelSourceExample {
+
+ public static void main(String[] args) throws Exception {
+ Properties debeziumProperties = new Properties();
+ debeziumProperties.setProperty("log.mining.strategy", "online_catalog");
+
+ JdbcIncrementalSource<String> oracleChangeEventSource =
+ new OracleSourceBuilder()
+ .hostname("host")
+ .port(1521)
+ .databaseList("ORCLCDB")
+ .schemaList("DEBEZIUM")
+ .tableList("DEBEZIUM.PRODUCTS")
+ .username("username")
+ .password("password")
+ .deserializer(new JsonDebeziumDeserializationSchema())
+ .includeSchemaChanges(true) // output the schema changes as well
+ .startupOptions(StartupOptions.initial())
+ .debeziumProperties(debeziumProperties)
+ .splitSize(2)
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+ // enable checkpoint
+ env.enableCheckpointing(3000L);
+ // set the source parallelism to 4
+ env.fromSource(
+ oracleChangeEventSource,
+ WatermarkStrategy.noWatermarks(),
+ "OracleParallelSource")
+ .setParallelism(4)
+ .print()
+ .setParallelism(1);
+ env.execute("Print Oracle Snapshot + RedoLog");
+ }
+}
+```
+
+#### SourceFunction-based DataStream
+
+```java
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.streaming.api.functions.source.SourceFunction;
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+import org.apache.flink.cdc.connectors.oracle.OracleSource;
+
+public class OracleSourceExample {
+ public static void main(String[] args) throws Exception {
+ SourceFunction<String> sourceFunction = OracleSource.<String>builder()
+ .url("jdbc:oracle:thin:@{hostname}:{port}:{database}")
+ .port(1521)
+ .database("ORCLCDB") // monitor XE database
+ .schemaList("inventory") // monitor inventory schema
+ .tableList("inventory.products") // monitor products table
+ .username("flinkuser")
+ .password("flinkpw")
+ .deserializer(new JsonDebeziumDeserializationSchema()) // converts SourceRecord to JSON String
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+ env
+ .addSource(sourceFunction)
+ .print().setParallelism(1); // use parallelism 1 for sink to keep message ordering
+
+ env.execute();
+ }
+}
+```
+
+**Note:** Please refer [Deserialization](../about.html#deserialization) for more details about the JSON deserialization.
+
+Data Type Mapping
+----------------
+<div class="wy-table-responsive">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left"><a href="https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Data-Types.html">Oracle type</a></th>
+ <th class="text-left">Flink SQL type<a href="{% link dev/table/types.md %}"></a></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 3
+ </td>
+ <td>TINYINT</td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 5
+ </td>
+ <td>SMALLINT</td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 10
+ </td>
+ <td>INT</td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s < 19
+ </td>
+ <td>BIGINT</td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), 19 <= p - s <= 38 <br>
+ </td>
+ <td>DECIMAL(p - s, 0)</td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s > 0)
+ </td>
+ <td>DECIMAL(p, s)</td>
+ </tr>
+ <tr>
+ <td>NUMBER(p, s <= 0), p - s > 38
+ </td>
+ <td>STRING</td>
+ </tr>
+ <tr>
+ <td>
+ FLOAT<br>
+ BINARY_FLOAT
+ </td>
+ <td>FLOAT</td>
+ </tr>
+ <tr>
+ <td>
+ DOUBLE PRECISION<br>
+ BINARY_DOUBLE
+ </td>
+ <td>DOUBLE</td>
+ </tr>
+ <tr>
+ <td>NUMBER(1)</td>
+ <td>BOOLEAN</td>
+ </tr>
+ <tr>
+ <td>
+ DATE<br>
+ TIMESTAMP [(p)]
+ </td>
+ <td>TIMESTAMP [(p)] [WITHOUT TIMEZONE]</td>
+ </tr>
+ <tr>
+ <td>TIMESTAMP [(p)] WITH TIME ZONE</td>
+ <td>TIMESTAMP [(p)] WITH TIME ZONE</td>
+ </tr>
+ <tr>
+ <td>TIMESTAMP [(p)] WITH LOCAL TIME ZONE</td>
+ <td>TIMESTAMP_LTZ [(p)]</td>
+ </tr>
+ <tr>
+ <td>
+ CHAR(n)<br>
+ NCHAR(n)<br>
+ NVARCHAR2(n)<br>
+ VARCHAR(n)<br>
+ VARCHAR2(n)<br>
+ CLOB<br>
+ NCLOB<br>
+ XMLType<br>
+ SYS.XMLTYPE
+ </td>
+ <td>STRING</td>
+ </tr>
+ <tr>
+ <td>BLOB<br>
+ ROWID
+ </td>
+ <td>BYTES</td>
+ </tr>
+ <tr>
+ <td>
+ INTERVAL DAY TO SECOND<br>
+ INTERVAL YEAR TO MONTH
+ </td>
+ <td>BIGINT</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+FAQ
+--------
+* [FAQ(English)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ)
+* [FAQ(中文)](https://github.com/ververica/flink-cdc-connectors/wiki/FAQ(ZH))
\ No newline at end of file
diff --git a/master/_sources/content/connectors/postgres-cdc.md.txt b/master/_sources/content/connectors/postgres-cdc.md.txt
new file mode 100644
index 000000000..76bdb1073
--- /dev/null
+++ b/master/_sources/content/connectors/postgres-cdc.md.txt
@@ -0,0 +1,624 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# Postgres CDC Connector
+
+The Postgres CDC connector allows for reading snapshot data and incremental data from PostgreSQL database. This document describes how to setup the Postgres CDC connector to run SQL queries against PostgreSQL databases.
+
+Dependencies
+------------
+
+In order to setup the Postgres CDC connector, the following table provides dependency information for both projects using a build automation tool (such as Maven or SBT) and SQL Client with SQL JAR bundles.
+
+### Maven dependency
+
+```
+<dependency>
+ <groupId>com.ververica</groupId>
+ <artifactId>flink-connector-postgres-cdc</artifactId>
+ <!-- The dependency is available only for stable releases, SNAPSHOT dependencies need to be built based on master or release- branches by yourself. -->
+ <version>3.0-SNAPSHOT</version>
+</dependency>
+```
+
+### SQL Client JAR
+
+```Download link is available only for stable releases.```
+
+Download flink-sql-connector-postgres-cdc-3.0-SNAPSHOT.jar and put it under `<FLINK_HOME>/lib/`.
+
+**Note:** flink-sql-connector-postgres-cdc-XXX-SNAPSHOT version is the code corresponding to the development branch. Users need to download the source code and compile the corresponding jar. Users should use the released version, such as [flink-sql-connector-postgres-cdc-2.3.0.jar](https://mvnrepository.com/artifact/com.ververica/flink-sql-connector-postgres-cdc), the released version will be available in the Maven central warehouse.
+
+How to create a Postgres CDC table
+----------------
+
+The Postgres CDC table can be defined as following:
+
+```sql
+-- register a PostgreSQL table 'shipments' in Flink SQL
+CREATE TABLE shipments (
+ shipment_id INT,
+ order_id INT,
+ origin STRING,
+ destination STRING,
+ is_arrived BOOLEAN
+) WITH (
+ 'connector' = 'postgres-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '5432',
+ 'username' = 'postgres',
+ 'password' = 'postgres',
+ 'database-name' = 'postgres',
+ 'schema-name' = 'public',
+ 'table-name' = 'shipments',
+ 'slot.name' = 'flink',
+ -- experimental feature: incremental snapshot (default off)
+ 'scan.incremental.snapshot.enabled' = 'true'
+);
+
+-- read snapshot and binlogs from shipments table
+SELECT * FROM shipments;
+```
+
+Connector Options
+----------------
+
+<div class="highlight">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 25%">Option</th>
+ <th class="text-left" style="width: 8%">Required</th>
+ <th class="text-left" style="width: 7%">Default</th>
+ <th class="text-left" style="width: 10%">Type</th>
+ <th class="text-left" style="width: 50%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>connector</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Specify what connector to use, here should be <code>'postgres-cdc'</code>.</td>
+ </tr>
+ <tr>
+ <td>hostname</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>IP address or hostname of the PostgreSQL database server.</td>
+ </tr>
+ <tr>
+ <td>username</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Name of the PostgreSQL database to use when connecting to the PostgreSQL database server.</td>
+ </tr>
+ <tr>
+ <td>password</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Password to use when connecting to the PostgreSQL database server.</td>
+ </tr>
+ <tr>
+ <td>database-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Database name of the PostgreSQL server to monitor.</td>
+ </tr>
+ <tr>
+ <td>schema-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Schema name of the PostgreSQL database to monitor.</td>
+ </tr>
+ <tr>
+ <td>table-name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Table name of the PostgreSQL database to monitor.</td>
+ </tr>
+ <tr>
+ <td>port</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">5432</td>
+ <td>Integer</td>
+ <td>Integer port number of the PostgreSQL database server.</td>
+ </tr>
+ <tr>
+ <td>slot.name</td>
+ <td>required</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>The name of the PostgreSQL logical decoding slot that was created for streaming changes from a particular plug-in
+ for a particular database/schema. The server uses this slot to stream events to the connector that you are configuring.
+ <br/>Slot names must conform to <a href="https://www.postgresql.org/docs/current/static/warm-standby.html#STREAMING-REPLICATION-SLOTS-MANIPULATION">PostgreSQL replication slot naming rules</a>, which state: "Each replication slot has a name, which can contain lower-case letters, numbers, and the underscore character."</td>
+ </tr>
+ <tr>
+ <td>decoding.plugin.name</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">decoderbufs</td>
+ <td>String</td>
+ <td>The name of the Postgres logical decoding plug-in installed on the server.
+ Supported values are decoderbufs, wal2json, wal2json_rds, wal2json_streaming, wal2json_rds_streaming and pgoutput.</td>
+ </tr>
+ <tr>
+ <td>changelog-mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">all</td>
+ <td>String</td>
+ <td>The changelog mode used for encoding streaming changes. Supported values are <code>all</code> (which encodes changes as retract stream using all RowKinds) and <code>upsert</code> (which encodes changes as upsert stream that describes idempotent updates on a key).
+ <br/> <code>upsert</code> mode can be used for tables with primary keys when replica identity <code>FULL</code> is not an option. Primary keys must be set to use <code>upsert</code> mode.</td>
+ </tr>
+ <tr>
+ <td>heartbeat.interval.ms</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">30s</td>
+ <td>Duration</td>
+ <td>The interval of sending heartbeat event for tracing the latest available replication slot offsets</td>
+ </tr>
+ <tr>
+ <td>debezium.*</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>Pass-through Debezium's properties to Debezium Embedded Engine which is used to capture data changes from Postgres server.
+ For example: <code>'debezium.snapshot.mode' = 'never'</code>.
+ See more about the <a href="https://debezium.io/documentation/reference/1.9/connectors/postgresql.html#postgresql-connector-properties">Debezium's Postgres Connector properties</a></td>
+ </tr>
+ <tr>
+ <td>debezium.snapshot.select.statement.overrides</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>If you encounter a situation where there is a large amount of data in the table and you don't need all the historical data. You can try to specify the underlying configuration in debezium to select the data range you want to snapshot. This parameter only affects snapshots and does not affect subsequent data reading consumption.
+ <br/> Note: PostgreSQL must use schema name and table name.
+ <br/> For example: <code>'debezium.snapshot.select.statement.overrides' = 'schema.table'</code>.
+ <br/> After specifying the above attributes, you must also add the following attributes:
+ <code> debezium.snapshot.select.statement.overrides.[schema].[table] </code>
+ </td>
+ </tr>
+ <tr>
+ <td>debezium.snapshot.select.statement.overrides.[schema].[table]</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>You can specify SQL statements to limit the data range of snapshot.
+ <br/> Note1: Schema and table need to be specified in the SQL statement, and the SQL should conform to the syntax of the data source.Currently.
+ <br/> For example: <code>'debezium.snapshot.select.statement.overrides.schema.table' = 'select * from schema.table where 1 != 1'</code>.
+ <br/> Note2: The Flink SQL client submission task does not support functions with single quotation marks in the content.
+ <br/> For example: <code>'debezium.snapshot.select.statement.overrides.schema.table' = 'select * from schema.table where to_char(rq, 'yyyy-MM-dd')'</code>.
+ </td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>Incremental snapshot is a new mechanism to read snapshot of a table. Compared to the old snapshot mechanism,
+ the incremental snapshot has many advantages, including:
+ (1) source can be parallel during snapshot reading,
+ (2) source can perform checkpoints in the chunk granularity during snapshot reading,
+ (3) source doesn't need to acquire global read lock (FLUSH TABLES WITH READ LOCK) before snapshot reading.
+ Please see <a href="#incremental-snapshot-reading ">Incremental Snapshot Reading</a>section for more detailed information.
+ </td>
+ </tr>
+ <tr>
+ <td>scan.incremental.close-idle-reader.enabled</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">false</td>
+ <td>Boolean</td>
+ <td>Whether to close idle readers at the end of the snapshot phase. <br>
+ The flink version is required to be greater than or equal to 1.14 when 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' is set to true.<br>
+ If the flink version is greater than or equal to 1.15, the default value of 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' has been changed to true,
+ so it does not need to be explicitly configured 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' = 'true'
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div>
+
+Note: `slot.name` is recommended to set for different tables to avoid the potential `PSQLException: ERROR: replication slot "flink" is active for PID 974` error. See more [here](https://debezium.io/documentation/reference/1.9/connectors/postgresql.html#postgresql-property-slot-name).
+
+### Incremental Snapshot Options
+
+The following options is available only when `scan.incremental.snapshot.enabled=true`:
+
+<div class="highlight">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 25%">Option</th>
+ <th class="text-left" style="width: 8%">Required</th>
+ <th class="text-left" style="width: 7%">Default</th>
+ <th class="text-left" style="width: 10%">Type</th>
+ <th class="text-left" style="width: 50%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>scan.incremental.snapshot.chunk.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">8096</td>
+ <td>Integer</td>
+ <td>The chunk size (number of rows) of table snapshot, captured tables are split into multiple chunks when read the snapshot of table.</td>
+ </tr>
+ <tr>
+ <td>scan.startup.mode</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">initial</td>
+ <td>String</td>
+ <td>Optional startup mode for Postgres CDC consumer, valid enumerations are "initial"
+ and "latest-offset".
+ Please see <a href="#startup-reading-position">Startup Reading Position</a> section for more detailed information.</td>
+ </tr>
+ <tr>
+ <td>chunk-meta.group.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1000</td>
+ <td>Integer</td>
+ <td>The group size of chunk meta, if the meta size exceeds the group size, the meta will be divided into multiple groups.</td>
+ </tr>
+ <tr>
+ <td>connect.timeout</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">30s</td>
+ <td>Duration</td>
+ <td>The maximum time that the connector should wait after trying to connect to the PostgreSQL database server before timing out.</td>
+ </tr>
+ <tr>
+ <td>connect.pool.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">30</td>
+ <td>Integer</td>
+ <td>The connection pool size.</td>
+ </tr>
+ <tr>
+ <td>connect.max-retries</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">3</td>
+ <td>Integer</td>
+ <td>The max retry times that the connector should retry to build database server connection.</td>
+ </tr>
+ <tr>
+ <td>scan.snapshot.fetch.size</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1024</td>
+ <td>Integer</td>
+ <td>The maximum fetch size for per poll when read table snapshot.</td>
+ </tr>
+ <tr>
+ <td>scan.incremental.snapshot.chunk.key-column</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">(none)</td>
+ <td>String</td>
+ <td>The chunk key of table snapshot, captured tables are split into multiple chunks by a chunk key when read the snapshot of table.
+ By default, the chunk key is the first column of the primary key. This column must be a column of the primary key.</td>
+ </tr>
+ <tr>
+ <td>chunk-key.even-distribution.factor.lower-bound</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">0.05d</td>
+ <td>Double</td>
+ <td>The lower bound of chunk key distribution factor. The distribution factor is used to determine whether the table is evenly distribution or not.
+ The table chunks would use evenly calculation optimization when the data distribution is even, and the query for splitting would happen when it is uneven.
+ The distribution factor could be calculated by (MAX(id) - MIN(id) + 1) / rowCount.</td>
+ </tr>
+ <tr>
+ <td>chunk-key.even-distribution.factor.upper-bound</td>
+ <td>optional</td>
+ <td style="word-wrap: break-word;">1000.0d</td>
+ <td>Double</td>
+ <td>The upper bound of chunk key distribution factor. The distribution factor is used to determine whether the table is evenly distribution or not.
+ The table chunks would use evenly calculation optimization when the data distribution is even, and the query for splitting would happen when it is uneven.
+ The distribution factor could be calculated by (MAX(id) - MIN(id) + 1) / rowCount.</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+Available Metadata
+----------------
+
+The following format metadata can be exposed as read-only (VIRTUAL) columns in a table definition.
+
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left" style="width: 15%">Key</th>
+ <th class="text-left" style="width: 30%">DataType</th>
+ <th class="text-left" style="width: 55%">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>table_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the table that contain the row.</td>
+ </tr>
+ <tr>
+ <td>schema_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the schema that contain the row.</td>
+ </tr>
+ <tr>
+ <td>database_name</td>
+ <td>STRING NOT NULL</td>
+ <td>Name of the database that contain the row.</td>
+ </tr>
+ <tr>
+ <td>op_ts</td>
+ <td>TIMESTAMP_LTZ(3) NOT NULL</td>
+ <td>It indicates the time that the change was made in the database. <br>If the record is read from snapshot of the table instead of the change stream, the value is always 0.</td>
+ </tr>
+ </tbody>
+</table>
+
+Limitation
+--------
+
+### Can't perform checkpoint during scanning snapshot of tables when incremental snapshot is disabled
+
+When `scan.incremental.snapshot.enabled=false`, we have the following limitation.
+
+During scanning snapshot of database tables, since there is no recoverable position, we can't perform checkpoints. In order to not perform checkpoints, Postgres CDC source will keep the checkpoint waiting to timeout. The timeout checkpoint will be recognized as failed checkpoint, by default, this will trigger a failover for the Flink job. So if the database table is large, it is recommended to add following Flink configurations to avoid failover because of the timeout checkpoints:
+
+```
+execution.checkpointing.interval: 10min
+execution.checkpointing.tolerable-failed-checkpoints: 100
+restart-strategy: fixed-delay
+restart-strategy.fixed-delay.attempts: 2147483647
+```
+
+The extended CREATE TABLE example demonstrates the syntax for exposing these metadata fields:
+```sql
+CREATE TABLE products (
+ db_name STRING METADATA FROM 'database_name' VIRTUAL,
+ table_name STRING METADATA FROM 'table_name' VIRTUAL,
+ operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
+ shipment_id INT,
+ order_id INT,
+ origin STRING,
+ destination STRING,
+ is_arrived BOOLEAN
+) WITH (
+ 'connector' = 'postgres-cdc',
+ 'hostname' = 'localhost',
+ 'port' = '5432',
+ 'username' = 'postgres',
+ 'password' = 'postgres',
+ 'database-name' = 'postgres',
+ 'schema-name' = 'public',
+ 'table-name' = 'shipments',
+ 'slot.name' = 'flink'
+);
+```
+
+Features
+--------
+
+### Incremental Snapshot Reading (Experimental)
+
+Incremental snapshot reading is a new mechanism to read snapshot of a table. Compared to the old snapshot mechanism, the incremental snapshot has many advantages, including:
+* (1) PostgreSQL CDC Source can be parallel during snapshot reading
+* (2) PostgreSQL CDC Source can perform checkpoints in the chunk granularity during snapshot reading
+* (3) PostgreSQL CDC Source doesn't need to acquire global read lock before snapshot reading
+
+During the incremental snapshot reading, the PostgreSQL CDC Source firstly splits snapshot chunks (splits) by primary key of table,
+and then PostgreSQL CDC Source assigns the chunks to multiple readers to read the data of snapshot chunk.
+
+### Exactly-Once Processing
+
+The Postgres CDC connector is a Flink Source connector which will read database snapshot first and then continues to read binlogs with **exactly-once processing** even failures happen. Please read [How the connector works](https://debezium.io/documentation/reference/1.9/connectors/postgresql.html#how-the-postgresql-connector-works).
+
+### DataStream Source
+
+The Postgres CDC connector can also be a DataStream source. There are two modes for the DataStream source:
+
+- incremental snapshot based, which allows parallel reading
+- SourceFunction based, which only supports single thread reading
+
+#### Incremental Snapshot based DataStream (Experimental)
+
+```java
+import org.apache.flink.cdc.connectors.base.source.jdbc.JdbcIncrementalSource;
+import org.apache.flink.cdc.connectors.postgres.source.PostgresSourceBuilder;
+import org.apache.flink.cdc.debezium.DebeziumDeserializationSchema;
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+import org.apache.flink.api.common.eventtime.WatermarkStrategy;
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+
+public class PostgresParallelSourceExample {
+
+ public static void main(String[] args) throws Exception {
+
+ DebeziumDeserializationSchema<String> deserializer =
+ new JsonDebeziumDeserializationSchema();
+
+ JdbcIncrementalSource<String> postgresIncrementalSource =
+ PostgresSourceBuilder.PostgresIncrementalSource.<String>builder()
+ .hostname("localhost")
+ .port(5432)
+ .database("postgres")
+ .schemaList("inventory")
+ .tableList("inventory.products")
+ .username("postgres")
+ .password("postgres")
+ .slotName("flink")
+ .decodingPluginName("decoderbufs") // use pgoutput for PostgreSQL 10+
+ .deserializer(deserializer)
+ .includeSchemaChanges(true) // output the schema changes as well
+ .splitSize(2) // the split size of each snapshot split
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+ env.enableCheckpointing(3000);
+
+ env.fromSource(
+ postgresIncrementalSource,
+ WatermarkStrategy.noWatermarks(),
+ "PostgresParallelSource")
+ .setParallelism(2)
+ .print();
+
+ env.execute("Output Postgres Snapshot");
+ }
+}
+```
+
+#### SourceFunction-based DataStream
+
+```java
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.streaming.api.functions.source.SourceFunction;
+import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
+import org.apache.flink.cdc.connectors.postgres.PostgreSQLSource;
+
+public class PostgreSQLSourceExample {
+ public static void main(String[] args) throws Exception {
+ SourceFunction<String> sourceFunction = PostgreSQLSource.<String>builder()
+ .hostname("localhost")
+ .port(5432)
+ .database("postgres") // monitor postgres database
+ .schemaList("inventory") // monitor inventory schema
+ .tableList("inventory.products") // monitor products table
+ .username("flinkuser")
+ .password("flinkpw")
+ .deserializer(new JsonDebeziumDeserializationSchema()) // converts SourceRecord to JSON String
+ .build();
+
+ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+ env
+ .addSource(sourceFunction)
+ .print().setParallelism(1); // use parallelism 1 for sink to keep message ordering
+
+ env.execute();
+ }
+}
+```
+**Note:** Please refer [Deserialization](../about.html#deserialization) for more details about the JSON deserialization.
+
+Data Type Mapping
+----------------
+
+<div class="wy-table-responsive">
+<table class="colwidths-auto docutils">
+ <thead>
+ <tr>
+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
+ <th class="text-left">Flink SQL type<a href="{% link dev/table/types.md %}"></a></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td></td>
+ <td>TINYINT</td>
+ </tr>
+ <tr>
+ <td>
+ SMALLINT<br>
+ INT2<br>
+ SMALLSERIAL<br>
+ SERIAL2</td>
+ <td>SMALLINT</td>
+ </tr>
+ <tr>
+ <td>
+ INTEGER<br>
+ SERIAL</td>
... 404884 lines suppressed ...