From 472528eedfe1ec0e417004a1b2651a78ae47593f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E5=BF=97=E4=BC=9F?= <2055572879@qq.com>
Date: Sun, 18 Feb 2024 15:00:04 +0800
Subject: [PATCH 01/12] [Doc][Improve] support chinese
---
docs/zh/Connector-v2-release-state.md | 86 ++
docs/zh/about.md | 72 ++
docs/zh/command/usage.mdx | 176 ++++
docs/zh/concept/JobEnvConfig.md | 51 +
docs/zh/concept/config.md | 199 ++++
docs/zh/concept/connector-v2-features.md | 71 ++
docs/zh/concept/schema-feature.md | 263 +++++
docs/zh/concept/speed-limit.md | 44 +
.../Config-Encryption-Decryption.md | 180 ++++
.../Error-Quick-Reference-Manual.md | 280 +++++
docs/zh/connector-v2/formats/avro.md | 111 ++
docs/zh/connector-v2/formats/canal-json.md | 114 +++
.../formats/cdc-compatible-debezium-json.md | 55 +
docs/zh/connector-v2/formats/debezium-json.md | 107 ++
.../kafka-compatible-kafkaconnect-json.md | 47 +
docs/zh/connector-v2/formats/ogg-json.md | 93 ++
docs/zh/connector-v2/sink/AmazonDynamoDB.md | 66 ++
docs/zh/connector-v2/sink/AmazonSqs.md | 87 ++
docs/zh/connector-v2/sink/Assert.md | 498 +++++++++
docs/zh/connector-v2/sink/Cassandra.md | 95 ++
docs/zh/connector-v2/sink/Clickhouse.md | 180 ++++
docs/zh/connector-v2/sink/ClickhouseFile.md | 147 +++
docs/zh/connector-v2/sink/Console.md | 124 +++
docs/zh/connector-v2/sink/CosFile.md | 260 +++++
docs/zh/connector-v2/sink/DB2.md | 175 ++++
docs/zh/connector-v2/sink/Datahub.md | 79 ++
docs/zh/connector-v2/sink/DingTalk.md | 49 +
docs/zh/connector-v2/sink/Doris.md | 336 ++++++
docs/zh/connector-v2/sink/Elasticsearch.md | 219 ++++
docs/zh/connector-v2/sink/Email.md | 87 ++
.../zh/connector-v2/sink/Enterprise-WeChat.md | 75 ++
docs/zh/connector-v2/sink/Feishu.md | 66 ++
docs/zh/connector-v2/sink/FtpFile.md | 263 +++++
docs/zh/connector-v2/sink/GoogleFirestore.md | 52 +
docs/zh/connector-v2/sink/Greenplum.md | 42 +
docs/zh/connector-v2/sink/Hbase.md | 122 +++
docs/zh/connector-v2/sink/HdfsFile.md | 200 ++++
docs/zh/connector-v2/sink/Hive.md | 185 ++++
docs/zh/connector-v2/sink/Http.md | 64 ++
docs/zh/connector-v2/sink/InfluxDB.md | 108 ++
docs/zh/connector-v2/sink/IoTDB.md | 221 ++++
docs/zh/connector-v2/sink/Jdbc.md | 348 +++++++
docs/zh/connector-v2/sink/Kafka.md | 193 ++++
docs/zh/connector-v2/sink/Kingbase.md | 168 +++
docs/zh/connector-v2/sink/Kudu.md | 211 ++++
docs/zh/connector-v2/sink/LocalFile.md | 272 +++++
docs/zh/connector-v2/sink/Maxcompute.md | 79 ++
docs/zh/connector-v2/sink/MongoDB.md | 235 +++++
docs/zh/connector-v2/sink/Mysql.md | 210 ++++
docs/zh/connector-v2/sink/Neo4j.md | 147 +++
docs/zh/connector-v2/sink/OceanBase.md | 186 ++++
docs/zh/connector-v2/sink/Oracle.md | 207 ++++
docs/zh/connector-v2/sink/OssFile.md | 506 +++++++++
docs/zh/connector-v2/sink/OssJindoFile.md | 264 +++++
docs/zh/connector-v2/sink/Paimon.md | 51 +
docs/zh/connector-v2/sink/Phoenix.md | 62 ++
docs/zh/connector-v2/sink/PostgreSql.md | 273 +++++
docs/zh/connector-v2/sink/Pulsar.md | 177 ++++
docs/zh/connector-v2/sink/Rabbitmq.md | 121 +++
docs/zh/connector-v2/sink/Redis.md | 159 +++
docs/zh/connector-v2/sink/RocketMQ.md | 203 ++++
docs/zh/connector-v2/sink/S3-Redshift.md | 278 +++++
docs/zh/connector-v2/sink/S3File.md | 490 +++++++++
docs/zh/connector-v2/sink/SelectDB-Cloud.md | 179 ++++
docs/zh/connector-v2/sink/Sentry.md | 78 ++
docs/zh/connector-v2/sink/SftpFile.md | 233 +++++
docs/zh/connector-v2/sink/Slack.md | 54 +
docs/zh/connector-v2/sink/Snowflake.md | 142 +++
docs/zh/connector-v2/sink/Socket.md | 79 ++
docs/zh/connector-v2/sink/SqlServer.md | 182 ++++
docs/zh/connector-v2/sink/StarRocks.md | 291 ++++++
docs/zh/connector-v2/sink/TDengine.md | 71 ++
docs/zh/connector-v2/sink/Tablestore.md | 72 ++
docs/zh/connector-v2/sink/Vertica.md | 183 ++++
docs/zh/connector-v2/sink/common-options.md | 58 ++
docs/zh/connector-v2/source/AmazonDynamoDB.md | 120 +++
docs/zh/connector-v2/source/AmazonSqs.md | 81 ++
docs/zh/connector-v2/source/Cassandra.md | 80 ++
docs/zh/connector-v2/source/Clickhouse.md | 97 ++
docs/zh/connector-v2/source/CosFile.md | 308 ++++++
docs/zh/connector-v2/source/DB2.md | 165 +++
docs/zh/connector-v2/source/Doris.md | 162 +++
docs/zh/connector-v2/source/Elasticsearch.md | 200 ++++
docs/zh/connector-v2/source/FakeSource.md | 421 ++++++++
docs/zh/connector-v2/source/FtpFile.md | 281 +++++
docs/zh/connector-v2/source/Github.md | 296 ++++++
docs/zh/connector-v2/source/Gitlab.md | 299 ++++++
docs/zh/connector-v2/source/GoogleSheets.md | 79 ++
docs/zh/connector-v2/source/Greenplum.md | 42 +
docs/zh/connector-v2/source/HdfsFile.md | 126 +++
docs/zh/connector-v2/source/Hive-jdbc.md | 163 +++
docs/zh/connector-v2/source/Hive.md | 129 +++
docs/zh/connector-v2/source/Http.md | 357 +++++++
docs/zh/connector-v2/source/Hudi.md | 90 ++
docs/zh/connector-v2/source/Iceberg.md | 192 ++++
docs/zh/connector-v2/source/InfluxDB.md | 195 ++++
docs/zh/connector-v2/source/IoTDB.md | 187 ++++
docs/zh/connector-v2/source/Jdbc.md | 387 +++++++
docs/zh/connector-v2/source/Jira.md | 305 ++++++
docs/zh/connector-v2/source/Kingbase.md | 148 +++
docs/zh/connector-v2/source/Klaviyo.md | 312 ++++++
docs/zh/connector-v2/source/Kudu.md | 153 +++
docs/zh/connector-v2/source/Lemlist.md | 297 ++++++
docs/zh/connector-v2/source/LocalFile.md | 344 +++++++
docs/zh/connector-v2/source/Maxcompute.md | 98 ++
docs/zh/connector-v2/source/MongoDB-CDC.md | 312 ++++++
docs/zh/connector-v2/source/MongoDB.md | 458 +++++++++
docs/zh/connector-v2/source/MyHours.md | 310 ++++++
docs/zh/connector-v2/source/MySQL-CDC.md | 255 +++++
docs/zh/connector-v2/source/Mysql.md | 318 ++++++
docs/zh/connector-v2/source/Neo4j.md | 107 ++
docs/zh/connector-v2/source/Notion.md | 308 ++++++
docs/zh/connector-v2/source/OceanBase.md | 176 ++++
docs/zh/connector-v2/source/OneSignal.md | 327 ++++++
docs/zh/connector-v2/source/OpenMldb.md | 86 ++
docs/zh/connector-v2/source/Oracle-CDC.md | 302 ++++++
docs/zh/connector-v2/source/Oracle.md | 324 ++++++
docs/zh/connector-v2/source/OssFile.md | 482 +++++++++
docs/zh/connector-v2/source/OssJindoFile.md | 312 ++++++
docs/zh/connector-v2/source/Paimon.md | 60 ++
docs/zh/connector-v2/source/Persistiq.md | 300 ++++++
docs/zh/connector-v2/source/Phoenix.md | 68 ++
docs/zh/connector-v2/source/Postgre-CDC.md | 196 ++++
docs/zh/connector-v2/source/PostgreSQL.md | 322 ++++++
docs/zh/connector-v2/source/Pulsar.md | 164 +++
docs/zh/connector-v2/source/Rabbitmq.md | 159 +++
docs/zh/connector-v2/source/Redis.md | 268 +++++
docs/zh/connector-v2/source/RocketMQ.md | 219 ++++
docs/zh/connector-v2/source/S3File.md | 343 +++++++
docs/zh/connector-v2/source/SftpFile.md | 240 +++++
docs/zh/connector-v2/source/Snowflake.md | 153 +++
docs/zh/connector-v2/source/Socket.md | 108 ++
docs/zh/connector-v2/source/SqlServer-CDC.md | 228 +++++
docs/zh/connector-v2/source/SqlServer.md | 266 +++++
docs/zh/connector-v2/source/StarRocks.md | 176 ++++
docs/zh/connector-v2/source/TDengine.md | 85 ++
docs/zh/connector-v2/source/Vertica.md | 162 +++
docs/zh/connector-v2/source/common-options.md | 33 +
docs/zh/connector-v2/source/kafka.md | 161 +++
docs/zh/contribution/coding-guide.md | 116 +++
docs/zh/contribution/contribute-plugin.md | 5 +
.../contribute-transform-v2-guide.md | 329 ++++++
docs/zh/contribution/new-license.md | 53 +
docs/zh/contribution/setup.md | 119 +++
docs/zh/faq.md | 353 +++++++
docs/zh/images/architecture_diagram.png | Bin 0 -> 77929 bytes
docs/zh/images/azkaban.png | Bin 0 -> 732486 bytes
docs/zh/images/checkstyle.png | Bin 0 -> 479660 bytes
docs/zh/images/kafka.png | Bin 0 -> 32151 bytes
docs/zh/images/seatunnel-workflow.svg | 4 +
docs/zh/images/seatunnel_architecture.png | Bin 0 -> 778394 bytes
docs/zh/images/seatunnel_starter.png | Bin 0 -> 423840 bytes
docs/zh/images/workflow.png | Bin 0 -> 258921 bytes
docs/zh/other-engine/flink.md | 84 ++
docs/zh/other-engine/spark.md | 0
docs/zh/seatunnel-engine/about.md | 40 +
.../zh/seatunnel-engine/checkpoint-storage.md | 187 ++++
docs/zh/seatunnel-engine/cluster-manager.md | 7 +
docs/zh/seatunnel-engine/cluster-mode.md | 21 +
docs/zh/seatunnel-engine/deployment.md | 265 +++++
.../engine-jar-storage-mode.md | 95 ++
docs/zh/seatunnel-engine/local-mode.md | 25 +
docs/zh/seatunnel-engine/rest-api.md | 385 +++++++
docs/zh/seatunnel-engine/savepoint.md | 24 +
docs/zh/seatunnel-engine/tcp.md | 37 +
docs/zh/start-v2/docker/docker.md | 9 +
docs/zh/start-v2/kubernetes/kubernetes.mdx | 772 ++++++++++++++
docs/zh/start-v2/locally/deployment.md | 84 ++
docs/zh/start-v2/locally/quick-start-flink.md | 113 ++
.../locally/quick-start-seatunnel-engine.md | 97 ++
docs/zh/start-v2/locally/quick-start-spark.md | 120 +++
docs/zh/transform-v2/common-options.md | 23 +
docs/zh/transform-v2/copy.md | 65 ++
docs/zh/transform-v2/field-mapper.md | 64 ++
docs/zh/transform-v2/filter-rowkind.md | 68 ++
docs/zh/transform-v2/filter.md | 60 ++
docs/zh/transform-v2/jsonpath.md | 190 ++++
docs/zh/transform-v2/replace.md | 121 +++
docs/zh/transform-v2/split.md | 72 ++
docs/zh/transform-v2/sql-functions.md | 966 ++++++++++++++++++
docs/zh/transform-v2/sql-udf.md | 133 +++
docs/zh/transform-v2/sql.md | 100 ++
182 files changed, 31319 insertions(+)
create mode 100644 docs/zh/Connector-v2-release-state.md
create mode 100644 docs/zh/about.md
create mode 100644 docs/zh/command/usage.mdx
create mode 100644 docs/zh/concept/JobEnvConfig.md
create mode 100644 docs/zh/concept/config.md
create mode 100644 docs/zh/concept/connector-v2-features.md
create mode 100644 docs/zh/concept/schema-feature.md
create mode 100644 docs/zh/concept/speed-limit.md
create mode 100644 docs/zh/connector-v2/Config-Encryption-Decryption.md
create mode 100644 docs/zh/connector-v2/Error-Quick-Reference-Manual.md
create mode 100644 docs/zh/connector-v2/formats/avro.md
create mode 100644 docs/zh/connector-v2/formats/canal-json.md
create mode 100644 docs/zh/connector-v2/formats/cdc-compatible-debezium-json.md
create mode 100644 docs/zh/connector-v2/formats/debezium-json.md
create mode 100644 docs/zh/connector-v2/formats/kafka-compatible-kafkaconnect-json.md
create mode 100644 docs/zh/connector-v2/formats/ogg-json.md
create mode 100644 docs/zh/connector-v2/sink/AmazonDynamoDB.md
create mode 100644 docs/zh/connector-v2/sink/AmazonSqs.md
create mode 100644 docs/zh/connector-v2/sink/Assert.md
create mode 100644 docs/zh/connector-v2/sink/Cassandra.md
create mode 100644 docs/zh/connector-v2/sink/Clickhouse.md
create mode 100644 docs/zh/connector-v2/sink/ClickhouseFile.md
create mode 100644 docs/zh/connector-v2/sink/Console.md
create mode 100644 docs/zh/connector-v2/sink/CosFile.md
create mode 100644 docs/zh/connector-v2/sink/DB2.md
create mode 100644 docs/zh/connector-v2/sink/Datahub.md
create mode 100644 docs/zh/connector-v2/sink/DingTalk.md
create mode 100644 docs/zh/connector-v2/sink/Doris.md
create mode 100644 docs/zh/connector-v2/sink/Elasticsearch.md
create mode 100644 docs/zh/connector-v2/sink/Email.md
create mode 100644 docs/zh/connector-v2/sink/Enterprise-WeChat.md
create mode 100644 docs/zh/connector-v2/sink/Feishu.md
create mode 100644 docs/zh/connector-v2/sink/FtpFile.md
create mode 100644 docs/zh/connector-v2/sink/GoogleFirestore.md
create mode 100644 docs/zh/connector-v2/sink/Greenplum.md
create mode 100644 docs/zh/connector-v2/sink/Hbase.md
create mode 100644 docs/zh/connector-v2/sink/HdfsFile.md
create mode 100644 docs/zh/connector-v2/sink/Hive.md
create mode 100644 docs/zh/connector-v2/sink/Http.md
create mode 100644 docs/zh/connector-v2/sink/InfluxDB.md
create mode 100644 docs/zh/connector-v2/sink/IoTDB.md
create mode 100644 docs/zh/connector-v2/sink/Jdbc.md
create mode 100644 docs/zh/connector-v2/sink/Kafka.md
create mode 100644 docs/zh/connector-v2/sink/Kingbase.md
create mode 100644 docs/zh/connector-v2/sink/Kudu.md
create mode 100644 docs/zh/connector-v2/sink/LocalFile.md
create mode 100644 docs/zh/connector-v2/sink/Maxcompute.md
create mode 100644 docs/zh/connector-v2/sink/MongoDB.md
create mode 100644 docs/zh/connector-v2/sink/Mysql.md
create mode 100644 docs/zh/connector-v2/sink/Neo4j.md
create mode 100644 docs/zh/connector-v2/sink/OceanBase.md
create mode 100644 docs/zh/connector-v2/sink/Oracle.md
create mode 100644 docs/zh/connector-v2/sink/OssFile.md
create mode 100644 docs/zh/connector-v2/sink/OssJindoFile.md
create mode 100644 docs/zh/connector-v2/sink/Paimon.md
create mode 100644 docs/zh/connector-v2/sink/Phoenix.md
create mode 100644 docs/zh/connector-v2/sink/PostgreSql.md
create mode 100644 docs/zh/connector-v2/sink/Pulsar.md
create mode 100644 docs/zh/connector-v2/sink/Rabbitmq.md
create mode 100644 docs/zh/connector-v2/sink/Redis.md
create mode 100644 docs/zh/connector-v2/sink/RocketMQ.md
create mode 100644 docs/zh/connector-v2/sink/S3-Redshift.md
create mode 100644 docs/zh/connector-v2/sink/S3File.md
create mode 100644 docs/zh/connector-v2/sink/SelectDB-Cloud.md
create mode 100644 docs/zh/connector-v2/sink/Sentry.md
create mode 100644 docs/zh/connector-v2/sink/SftpFile.md
create mode 100644 docs/zh/connector-v2/sink/Slack.md
create mode 100644 docs/zh/connector-v2/sink/Snowflake.md
create mode 100644 docs/zh/connector-v2/sink/Socket.md
create mode 100644 docs/zh/connector-v2/sink/SqlServer.md
create mode 100644 docs/zh/connector-v2/sink/StarRocks.md
create mode 100644 docs/zh/connector-v2/sink/TDengine.md
create mode 100644 docs/zh/connector-v2/sink/Tablestore.md
create mode 100644 docs/zh/connector-v2/sink/Vertica.md
create mode 100644 docs/zh/connector-v2/sink/common-options.md
create mode 100644 docs/zh/connector-v2/source/AmazonDynamoDB.md
create mode 100644 docs/zh/connector-v2/source/AmazonSqs.md
create mode 100644 docs/zh/connector-v2/source/Cassandra.md
create mode 100644 docs/zh/connector-v2/source/Clickhouse.md
create mode 100644 docs/zh/connector-v2/source/CosFile.md
create mode 100644 docs/zh/connector-v2/source/DB2.md
create mode 100644 docs/zh/connector-v2/source/Doris.md
create mode 100644 docs/zh/connector-v2/source/Elasticsearch.md
create mode 100644 docs/zh/connector-v2/source/FakeSource.md
create mode 100644 docs/zh/connector-v2/source/FtpFile.md
create mode 100644 docs/zh/connector-v2/source/Github.md
create mode 100644 docs/zh/connector-v2/source/Gitlab.md
create mode 100644 docs/zh/connector-v2/source/GoogleSheets.md
create mode 100644 docs/zh/connector-v2/source/Greenplum.md
create mode 100644 docs/zh/connector-v2/source/HdfsFile.md
create mode 100644 docs/zh/connector-v2/source/Hive-jdbc.md
create mode 100644 docs/zh/connector-v2/source/Hive.md
create mode 100644 docs/zh/connector-v2/source/Http.md
create mode 100644 docs/zh/connector-v2/source/Hudi.md
create mode 100644 docs/zh/connector-v2/source/Iceberg.md
create mode 100644 docs/zh/connector-v2/source/InfluxDB.md
create mode 100644 docs/zh/connector-v2/source/IoTDB.md
create mode 100644 docs/zh/connector-v2/source/Jdbc.md
create mode 100644 docs/zh/connector-v2/source/Jira.md
create mode 100644 docs/zh/connector-v2/source/Kingbase.md
create mode 100644 docs/zh/connector-v2/source/Klaviyo.md
create mode 100644 docs/zh/connector-v2/source/Kudu.md
create mode 100644 docs/zh/connector-v2/source/Lemlist.md
create mode 100644 docs/zh/connector-v2/source/LocalFile.md
create mode 100644 docs/zh/connector-v2/source/Maxcompute.md
create mode 100644 docs/zh/connector-v2/source/MongoDB-CDC.md
create mode 100644 docs/zh/connector-v2/source/MongoDB.md
create mode 100644 docs/zh/connector-v2/source/MyHours.md
create mode 100644 docs/zh/connector-v2/source/MySQL-CDC.md
create mode 100644 docs/zh/connector-v2/source/Mysql.md
create mode 100644 docs/zh/connector-v2/source/Neo4j.md
create mode 100644 docs/zh/connector-v2/source/Notion.md
create mode 100644 docs/zh/connector-v2/source/OceanBase.md
create mode 100644 docs/zh/connector-v2/source/OneSignal.md
create mode 100644 docs/zh/connector-v2/source/OpenMldb.md
create mode 100644 docs/zh/connector-v2/source/Oracle-CDC.md
create mode 100644 docs/zh/connector-v2/source/Oracle.md
create mode 100644 docs/zh/connector-v2/source/OssFile.md
create mode 100644 docs/zh/connector-v2/source/OssJindoFile.md
create mode 100644 docs/zh/connector-v2/source/Paimon.md
create mode 100644 docs/zh/connector-v2/source/Persistiq.md
create mode 100644 docs/zh/connector-v2/source/Phoenix.md
create mode 100644 docs/zh/connector-v2/source/Postgre-CDC.md
create mode 100644 docs/zh/connector-v2/source/PostgreSQL.md
create mode 100644 docs/zh/connector-v2/source/Pulsar.md
create mode 100644 docs/zh/connector-v2/source/Rabbitmq.md
create mode 100644 docs/zh/connector-v2/source/Redis.md
create mode 100644 docs/zh/connector-v2/source/RocketMQ.md
create mode 100644 docs/zh/connector-v2/source/S3File.md
create mode 100644 docs/zh/connector-v2/source/SftpFile.md
create mode 100644 docs/zh/connector-v2/source/Snowflake.md
create mode 100644 docs/zh/connector-v2/source/Socket.md
create mode 100644 docs/zh/connector-v2/source/SqlServer-CDC.md
create mode 100644 docs/zh/connector-v2/source/SqlServer.md
create mode 100644 docs/zh/connector-v2/source/StarRocks.md
create mode 100644 docs/zh/connector-v2/source/TDengine.md
create mode 100644 docs/zh/connector-v2/source/Vertica.md
create mode 100644 docs/zh/connector-v2/source/common-options.md
create mode 100644 docs/zh/connector-v2/source/kafka.md
create mode 100644 docs/zh/contribution/coding-guide.md
create mode 100644 docs/zh/contribution/contribute-plugin.md
create mode 100644 docs/zh/contribution/contribute-transform-v2-guide.md
create mode 100644 docs/zh/contribution/new-license.md
create mode 100644 docs/zh/contribution/setup.md
create mode 100644 docs/zh/faq.md
create mode 100644 docs/zh/images/architecture_diagram.png
create mode 100644 docs/zh/images/azkaban.png
create mode 100644 docs/zh/images/checkstyle.png
create mode 100644 docs/zh/images/kafka.png
create mode 100644 docs/zh/images/seatunnel-workflow.svg
create mode 100644 docs/zh/images/seatunnel_architecture.png
create mode 100644 docs/zh/images/seatunnel_starter.png
create mode 100644 docs/zh/images/workflow.png
create mode 100644 docs/zh/other-engine/flink.md
create mode 100644 docs/zh/other-engine/spark.md
create mode 100644 docs/zh/seatunnel-engine/about.md
create mode 100644 docs/zh/seatunnel-engine/checkpoint-storage.md
create mode 100644 docs/zh/seatunnel-engine/cluster-manager.md
create mode 100644 docs/zh/seatunnel-engine/cluster-mode.md
create mode 100644 docs/zh/seatunnel-engine/deployment.md
create mode 100644 docs/zh/seatunnel-engine/engine-jar-storage-mode.md
create mode 100644 docs/zh/seatunnel-engine/local-mode.md
create mode 100644 docs/zh/seatunnel-engine/rest-api.md
create mode 100644 docs/zh/seatunnel-engine/savepoint.md
create mode 100644 docs/zh/seatunnel-engine/tcp.md
create mode 100644 docs/zh/start-v2/docker/docker.md
create mode 100644 docs/zh/start-v2/kubernetes/kubernetes.mdx
create mode 100644 docs/zh/start-v2/locally/deployment.md
create mode 100644 docs/zh/start-v2/locally/quick-start-flink.md
create mode 100644 docs/zh/start-v2/locally/quick-start-seatunnel-engine.md
create mode 100644 docs/zh/start-v2/locally/quick-start-spark.md
create mode 100644 docs/zh/transform-v2/common-options.md
create mode 100644 docs/zh/transform-v2/copy.md
create mode 100644 docs/zh/transform-v2/field-mapper.md
create mode 100644 docs/zh/transform-v2/filter-rowkind.md
create mode 100644 docs/zh/transform-v2/filter.md
create mode 100644 docs/zh/transform-v2/jsonpath.md
create mode 100644 docs/zh/transform-v2/replace.md
create mode 100644 docs/zh/transform-v2/split.md
create mode 100644 docs/zh/transform-v2/sql-functions.md
create mode 100644 docs/zh/transform-v2/sql-udf.md
create mode 100644 docs/zh/transform-v2/sql.md
diff --git a/docs/zh/Connector-v2-release-state.md b/docs/zh/Connector-v2-release-state.md
new file mode 100644
index 00000000000..308cb010b42
--- /dev/null
+++ b/docs/zh/Connector-v2-release-state.md
@@ -0,0 +1,86 @@
+# Connector Release Status
+
+SeaTunnel uses a grading system for connectors to help you understand what to expect from a connector:
+
+| | Alpha | Beta | General Availability (GA) |
+|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Expectations | An alpha connector signifies a connector under development and helps SeaTunnel gather early feedback and issues reported by early adopters. We strongly discourage using alpha releases for production use cases | A beta connector is considered stable and reliable with no backwards incompatible changes but has not been validated by a broader group of users. We expect to find and fix a few issues and bugs in the release before it’s ready for GA. | A generally available connector has been deemed ready for use in a production environment and is officially supported by SeaTunnel. Its documentation is considered sufficient to support widespread adoption. |
+| | | | |
+| Production Readiness | No | Yes | Yes |
+
+## Connector V2 Health
+
+| Connector Name | Type | Status | Support Version |
+|-------------------------------------------------------------|--------|--------|-----------------|
+| [AmazonDynamoDB](connector-v2/sink/AmazonDynamoDB.md) | Sink | Beta | 2.3.0 |
+| [AmazonDynamoDB](connector-v2/source/AmazonDynamoDB.md) | Source | Beta | 2.3.0 |
+| [Asset](connector-v2/sink/Assert.md) | Sink | Beta | 2.2.0-beta |
+| [Cassandra](connector-v2/sink/Cassandra.md) | Sink | Beta | 2.3.0 |
+| [Cassandra](connector-v2/source/Cassandra.md) | Source | Beta | 2.3.0 |
+| [ClickHouse](connector-v2/source/Clickhouse.md) | Source | GA | 2.2.0-beta |
+| [ClickHouse](connector-v2/sink/Clickhouse.md) | Sink | GA | 2.2.0-beta |
+| [ClickHouseFile](connector-v2/sink/ClickhouseFile.md) | Sink | GA | 2.2.0-beta |
+| [Console](connector-v2/sink/Console.md) | Sink | GA | 2.2.0-beta |
+| [DataHub](connector-v2/sink/Datahub.md) | Sink | Alpha | 2.2.0-beta |
+| [Doris](connector-v2/sink/Doris.md) | Sink | Beta | 2.3.0 |
+| [DingTalk](connector-v2/sink/DingTalk.md) | Sink | Alpha | 2.2.0-beta |
+| [Elasticsearch](connector-v2/sink/Elasticsearch.md) | Sink | GA | 2.2.0-beta |
+| [Email](connector-v2/sink/Email.md) | Sink | Alpha | 2.2.0-beta |
+| [Enterprise WeChat](connector-v2/sink/Enterprise-WeChat.md) | Sink | Alpha | 2.2.0-beta |
+| [FeiShu](connector-v2/sink/Feishu.md) | Sink | Alpha | 2.2.0-beta |
+| [Fake](connector-v2/source/FakeSource.md) | Source | GA | 2.2.0-beta |
+| [FtpFile](connector-v2/sink/FtpFile.md) | Sink | Beta | 2.2.0-beta |
+| [Greenplum](connector-v2/sink/Greenplum.md) | Sink | Beta | 2.2.0-beta |
+| [Greenplum](connector-v2/source/Greenplum.md) | Source | Beta | 2.2.0-beta |
+| [HdfsFile](connector-v2/sink/HdfsFile.md) | Sink | GA | 2.2.0-beta |
+| [HdfsFile](connector-v2/source/HdfsFile.md) | Source | GA | 2.2.0-beta |
+| [Hive](connector-v2/sink/Hive.md) | Sink | GA | 2.2.0-beta |
+| [Hive](connector-v2/source/Hive.md) | Source | GA | 2.2.0-beta |
+| [Http](connector-v2/sink/Http.md) | Sink | Beta | 2.2.0-beta |
+| [Http](connector-v2/source/Http.md) | Source | Beta | 2.2.0-beta |
+| [Hudi](connector-v2/source/Hudi.md) | Source | Beta | 2.2.0-beta |
+| [Iceberg](connector-v2/source/Iceberg.md) | Source | Beta | 2.2.0-beta |
+| [InfluxDB](connector-v2/sink/InfluxDB.md) | Sink | Beta | 2.3.0 |
+| [InfluxDB](connector-v2/source/InfluxDB.md) | Source | Beta | 2.3.0-beta |
+| [IoTDB](connector-v2/source/IoTDB.md) | Source | GA | 2.2.0-beta |
+| [IoTDB](connector-v2/sink/IoTDB.md) | Sink | GA | 2.2.0-beta |
+| [Jdbc](connector-v2/source/Jdbc.md) | Source | GA | 2.2.0-beta |
+| [Jdbc](connector-v2/sink/Jdbc.md) | Sink | GA | 2.2.0-beta |
+| [Kafka](connector-v2/source/kafka.md) | Source | GA | 2.3.0 |
+| [Kafka](connector-v2/sink/Kafka.md) | Sink | GA | 2.2.0-beta |
+| [Kudu](connector-v2/source/Kudu.md) | Source | Beta | 2.2.0-beta |
+| [Kudu](connector-v2/sink/Kudu.md) | Sink | Beta | 2.2.0-beta |
+| [Lemlist](connector-v2/source/Lemlist.md) | Source | Beta | 2.3.0 |
+| [LocalFile](connector-v2/sink/LocalFile.md) | Sink | GA | 2.2.0-beta |
+| [LocalFile](connector-v2/source/LocalFile.md) | Source | GA | 2.2.0-beta |
+| [Maxcompute](connector-v2/source/Maxcompute.md) | Source | Alpha | 2.3.0 |
+| [Maxcompute](connector-v2/sink/Maxcompute.md) | Sink | Alpha | 2.3.0 |
+| [MongoDB](connector-v2/source/MongoDB.md) | Source | Beta | 2.2.0-beta |
+| [MongoDB](connector-v2/sink/MongoDB.md) | Sink | Beta | 2.2.0-beta |
+| [MyHours](connector-v2/source/MyHours.md) | Source | Alpha | 2.2.0-beta |
+| [MySqlCDC](connector-v2/source/MySQL-CDC.md) | Source | GA | 2.3.0 |
+| [Neo4j](connector-v2/sink/Neo4j.md) | Sink | Beta | 2.2.0-beta |
+| [Notion](connector-v2/source/Notion.md) | Source | Alpha | 2.3.0 |
+| [OneSignal](connector-v2/source/OneSignal.md) | Source | Beta | 2.3.0 |
+| [OpenMldb](connector-v2/source/OpenMldb.md) | Source | Beta | 2.3.0 |
+| [OssFile](connector-v2/sink/OssFile.md) | Sink | Beta | 2.2.0-beta |
+| [OssFile](connector-v2/source/OssFile.md) | Source | Beta | 2.2.0-beta |
+| [Phoenix](connector-v2/sink/Phoenix.md) | Sink | Beta | 2.2.0-beta |
+| [Phoenix](connector-v2/source/Phoenix.md) | Source | Beta | 2.2.0-beta |
+| [Pulsar](connector-v2/source/Pulsar.md) | Source | Beta | 2.2.0-beta |
+| [RabbitMQ](connector-v2/sink/Rabbitmq.md) | Sink | Beta | 2.3.0 |
+| [RabbitMQ](connector-v2/source/Rabbitmq.md) | Source | Beta | 2.3.0 |
+| [Redis](connector-v2/sink/Redis.md) | Sink | Beta | 2.2.0-beta |
+| [Redis](connector-v2/source/Redis.md) | Source | Beta | 2.2.0-beta |
+| [S3Redshift](connector-v2/sink/S3-Redshift.md) | Sink | GA | 2.3.0-beta |
+| [S3File](connector-v2/source/S3File.md) | Source | GA | 2.3.0-beta |
+| [S3File](connector-v2/sink/S3File.md) | Sink | GA | 2.3.0-beta |
+| [Sentry](connector-v2/sink/Sentry.md) | Sink | Alpha | 2.2.0-beta |
+| [SFtpFile](connector-v2/sink/SftpFile.md) | Sink | Beta | 2.3.0 |
+| [SFtpFile](connector-v2/source/SftpFile.md) | Source | Beta | 2.3.0 |
+| [Slack](connector-v2/sink/Slack.md) | Sink | Beta | 2.3.0 |
+| [Socket](connector-v2/sink/Socket.md) | Sink | Beta | 2.2.0-beta |
+| [Socket](connector-v2/source/Socket.md) | Source | Beta | 2.2.0-beta |
+| [StarRocks](connector-v2/sink/StarRocks.md) | Sink | Alpha | 2.3.0 |
+| [Tablestore](connector-v2/sink/Tablestore.md) | Sink | Alpha | 2.3.0 |
+
diff --git a/docs/zh/about.md b/docs/zh/about.md
new file mode 100644
index 00000000000..6081c300dde
--- /dev/null
+++ b/docs/zh/about.md
@@ -0,0 +1,72 @@
+# 关于 SeaTunnel
+
+
+
+[![Slack](https://img.shields.io/badge/slack-%23seatunnel-4f8eba?logo=slack)](https://s.apache.org/seatunnel-slack)
+[![Twitter Follow](https://img.shields.io/twitter/follow/ASFSeaTunnel.svg?label=Follow&logo=twitter)](https://twitter.com/ASFSeaTunnel)
+
+SeaTunnel是一个非常易用、超高性能的分布式数据集成平台,支持实时
+海量数据同步。 每天可稳定高效同步数百亿数据,拥有
+已被近百家企业应用于生产。
+
+## 我们为什么需要 SeaTunnel
+
+SeaTunnel专注于数据集成和数据同步,主要旨在解决数据集成领域的常见问题:
+
+- 数据源多样:常用数据源有数百种,版本不兼容。 随着新技术的出现,更多的数据源不断出现。 用户很难找到一个能够全面、快速支持这些数据源的工具。
+- 同步场景复杂:数据同步需要支持离线全量同步、离线增量同步、CDC、实时同步、全库同步等多种同步场景。
+- 资源需求高:现有的数据集成和数据同步工具往往需要大量的计算资源或JDBC连接资源来完成海量小表的实时同步。 这增加了企业的负担。
+- 缺乏质量和监控:数据集成和同步过程经常会出现数据丢失或重复的情况。 同步过程缺乏监控,无法直观了解任务过程中数据的真实情况。
+- 技术栈复杂:企业使用的技术组件不同,用户需要针对不同组件开发相应的同步程序来完成数据集成。
+- 管理和维护困难:受限于底层技术组件(Flink/Spark)不同,离线同步和实时同步往往需要分开开发和管理,增加了管理和维护的难度。
+
+## Features of SeaTunnel
+
+- 丰富且可扩展的Connector:SeaTunnel提供了不依赖于特定执行引擎的Connector API。 基于该API开发的Connector(Source、Transform、Sink)可以运行在很多不同的引擎上,例如目前支持的SeaTunnel Engine、Flink、Spark等。
+- Connector插件:插件式设计让用户可以轻松开发自己的Connector并将其集成到SeaTunnel项目中。 目前,SeaTunnel 支持超过 100 个连接器,并且数量正在激增。 这是[当前支持的连接器]的列表(Connector-v2-release-state.md)
+- 批流集成:基于SeaTunnel Connector API开发的Connector完美兼容离线同步、实时同步、全量同步、增量同步等场景。 它们大大降低了管理数据集成任务的难度。
+- 支持分布式快照算法,保证数据一致性。
+- 多引擎支持:SeaTunnel默认使用SeaTunnel引擎进行数据同步。 SeaTunnel还支持使用Flink或Spark作为Connector的执行引擎,以适应企业现有的技术组件。 SeaTunnel 支持 Spark 和 Flink 的多个版本。
+- JDBC复用、数据库日志多表解析:SeaTunnel支持多表或全库同步,解决了过度JDBC连接的问题; 支持多表或全库日志读取解析,解决了CDC多表同步场景下需要处理日志重复读取解析的问题。
+- 高吞吐量、低延迟:SeaTunnel支持并行读写,提供稳定可靠、高吞吐量、低延迟的数据同步能力。
+- 完善的实时监控:SeaTunnel支持数据同步过程中每一步的详细监控信息,让用户轻松了解同步任务读写的数据数量、数据大小、QPS等信息。
+- 支持两种作业开发方法:编码和画布设计。 SeaTunnel Web 项目 https://github.com/apache/seatunnel-web 提供作业、调度、运行和监控功能的可视化管理。
+
+## SeaTunnel work flowchart
+
+![SeaTunnel work flowchart](images/architecture_diagram.png)
+
+The runtime process of SeaTunnel is shown in the figure above.
+
+The user configures the job information and selects the execution engine to submit the job.
+
+The Source Connector is responsible for parallel reading the data and sending the data to the downstream Transform or directly to the Sink, and the Sink writes the data to the destination. It is worth noting that Source, Transform and Sink can be easily developed and extended by yourself.
+
+SeaTunnel is an EL(T) data integration platform. Therefore, in SeaTunnel, Transform can only be used to perform some simple transformations on data, such as converting the data of a column to uppercase or lowercase, changing the column name, or splitting a column into multiple columns.
+
+The default engine use by SeaTunnel is [SeaTunnel Engine](seatunnel-engine/about.md). If you choose to use the Flink or Spark engine, SeaTunnel will package the Connector into a Flink or Spark program and submit it to Flink or Spark to run.
+
+## Connector
+
+- **Source Connectors** SeaTunnel supports reading data from various relational, graph, NoSQL, document, and memory databases; distributed file systems such as HDFS; and a variety of cloud storage solutions, such as S3 and OSS. We also support data reading of many common SaaS services. You can access the detailed list [here](connector-v2/source). If you want, You can develop your own source connector and easily integrate it into SeaTunnel.
+
+- **Transform Connector** If the schema is different between source and Sink, You can use the Transform Connector to change the schema read from source and make it the same as the Sink schema.
+
+- **Sink Connector** SeaTunnel supports writing data to various relational, graph, NoSQL, document, and memory databases; distributed file systems such as HDFS; and a variety of cloud storage solutions, such as S3 and OSS. We also support writing data to many common SaaS services. You can access the detailed list [here](connector-v2/sink). If you want, you can develop your own Sink connector and easily integrate it into SeaTunnel.
+
+## Who uses SeaTunnel
+
+SeaTunnel has lots of users. You can find more information about them in [users](https://seatunnel.apache.org/user).
+
+## Landscapes
+
+
+
+
+
+SeaTunnel enriches the CNCF CLOUD NATIVE Landscape .
+
+
+## Learn more
+
+You can see [Quick Start](/docs/category/start-v2) for the next steps.
diff --git a/docs/zh/command/usage.mdx b/docs/zh/command/usage.mdx
new file mode 100644
index 00000000000..d5797e06aca
--- /dev/null
+++ b/docs/zh/command/usage.mdx
@@ -0,0 +1,176 @@
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Command usage
+
+## Command Entrypoint
+
+
+
+
+```bash
+bin/start-seatunnel-spark-2-connector-v2.sh
+```
+
+
+
+
+```bash
+bin/start-seatunnel-spark-3-connector-v2.sh
+```
+
+
+
+
+```bash
+bin/start-seatunnel-flink-13-connector-v2.sh
+```
+
+
+
+
+```bash
+bin/start-seatunnel-flink-15-connector-v2.sh
+```
+
+
+
+
+
+## Options
+
+
+
+
+```bash
+Usage: start-seatunnel-spark-2-connector-v2.sh [options]
+ Options:
+ --check Whether check config (default: false)
+ -c, --config Config file
+ -e, --deploy-mode Spark deploy mode, support [cluster, client] (default:
+ client)
+ -h, --help Show the usage message
+ -m, --master Spark master, support [spark://host:port,
+ mesos://host:port, yarn, k8s://https://host:port,
+ local], default local[*] (default: local[*])
+ -n, --name SeaTunnel job name (default: SeaTunnel)
+ -i, --variable Variable substitution, such as -i city=beijing, or -i
+ date=20190318 (default: [])
+```
+
+
+
+
+```bash
+Usage: start-seatunnel-spark-3-connector-v2.sh [options]
+ Options:
+ --check Whether check config (default: false)
+ -c, --config Config file
+ -e, --deploy-mode Spark deploy mode, support [cluster, client] (default:
+ client)
+ -h, --help Show the usage message
+ -m, --master Spark master, support [spark://host:port,
+ mesos://host:port, yarn, k8s://https://host:port,
+ local], default local[*] (default: local[*])
+ -n, --name SeaTunnel job name (default: SeaTunnel)
+ -i, --variable Variable substitution, such as -i city=beijing, or -i
+ date=20190318 (default: [])
+```
+
+
+
+
+```bash
+Usage: start-seatunnel-flink-13-connector-v2.sh [options]
+ Options:
+ --check Whether check config (default: false)
+ -c, --config Config file
+ -e, --deploy-mode Flink job deploy mode, support [run, run-application]
+ (default: run)
+ -h, --help Show the usage message
+ --master, --target Flink job submitted target master, support [local,
+ remote, yarn-session, yarn-per-job, kubernetes-session,
+ yarn-application, kubernetes-application]
+ -n, --name SeaTunnel job name (default: SeaTunnel)
+ -i, --variable Variable substitution, such as -i city=beijing, or -i
+ date=20190318 (default: [])
+```
+
+
+
+
+```bash
+Usage: start-seatunnel-flink-15-connector-v2.sh [options]
+ Options:
+ --check Whether check config (default: false)
+ -c, --config Config file
+ -e, --deploy-mode Flink job deploy mode, support [run, run-application]
+ (default: run)
+ -h, --help Show the usage message
+ --master, --target Flink job submitted target master, support [local,
+ remote, yarn-session, yarn-per-job, kubernetes-session,
+ yarn-application, kubernetes-application]
+ -n, --name SeaTunnel job name (default: SeaTunnel)
+ -i, --variable Variable substitution, such as -i city=beijing, or -i
+ date=20190318 (default: [])
+```
+
+
+
+
+## Example
+
+
+
+
+```bash
+bin/start-seatunnel-spark-2-connector-v2.sh --config config/v2.batch.config.template -m local -e client
+```
+
+
+
+
+```bash
+bin/start-seatunnel-spark-3-connector-v2.sh --config config/v2.batch.config.template -m local -e client
+```
+
+
+
+
+```bash
+bin/start-seatunnel-flink-13-connector-v2.sh --config config/v2.batch.config.template
+```
+
+
+
+
+```bash
+bin/start-seatunnel-flink-15-connector-v2.sh --config config/v2.batch.config.template
+```
+
+
+
diff --git a/docs/zh/concept/JobEnvConfig.md b/docs/zh/concept/JobEnvConfig.md
new file mode 100644
index 00000000000..3608b500f76
--- /dev/null
+++ b/docs/zh/concept/JobEnvConfig.md
@@ -0,0 +1,51 @@
+# JobEnvConfig
+
+This document describes env configuration information, the common parameters can be used in all engines. In order to better distinguish between engine parameters, the additional parameters of other engine need to carry a prefix.
+In flink engine, we use `flink.` as the prefix. In the spark engine, we do not use any prefixes to modify parameters, because the official spark parameters themselves start with `spark.`
+
+## Common Parameter
+
+The following configuration parameters are common to all engines
+
+### job.name
+
+This parameter configures the task name.
+
+### jars
+
+Third-party packages can be loaded via `jars`, like `jars="file://local/jar1.jar;file://local/jar2.jar"`
+
+### job.mode
+
+You can configure whether the task is in batch mode or stream mode through `job.mode`, like `job.mode = "BATCH"` or `job.mode = "STREAMING"`
+
+### checkpoint.interval
+
+Gets the interval in which checkpoints are periodically scheduled.
+
+In `STREAMING` mode, checkpoints is required, if you do not set it, it will be obtained from the application configuration file `seatunnel.yaml`. In `BATCH` mode, you can disable checkpoints by not setting this parameter.
+
+### parallelism
+
+This parameter configures the parallelism of source and sink.
+
+### shade.identifier
+
+Specify the method of encryption, if you didn't have the requirement for encrypting or decrypting config files, this option can be ignored.
+
+For more details, you can refer to the documentation [config-encryption-decryption](../connector-v2/Config-Encryption-Decryption.md)
+
+## Flink Engine Parameter
+
+Here are some SeaTunnel parameter names corresponding to the names in Flink, not all of them, please refer to the official [flink documentation](https://flink.apache.org/) for more.
+
+| Flink Configuration Name | SeaTunnel Configuration Name |
+|---------------------------------|---------------------------------------|
+| pipeline.max-parallelism | flink.pipeline.max-parallelism |
+| execution.checkpointing.mode | flink.execution.checkpointing.mode |
+| execution.checkpointing.timeout | flink.execution.checkpointing.timeout |
+| ... | ... |
+
+## Spark Engine Parameter
+
+Because spark configuration items have not been modified, they are not listed here, please refer to the official [spark documentation](https://spark.apache.org/).
diff --git a/docs/zh/concept/config.md b/docs/zh/concept/config.md
new file mode 100644
index 00000000000..1c422dd55e4
--- /dev/null
+++ b/docs/zh/concept/config.md
@@ -0,0 +1,199 @@
+---
+
+sidebar_position: 2
+-------------------
+
+# Intro to config file
+
+In SeaTunnel, the most important thing is the Config file, through which users can customize their own data
+synchronization requirements to maximize the potential of SeaTunnel. So next, I will introduce you how to
+configure the Config file.
+
+The main format of the Config file is `hocon`, for more details of this format type you can refer to [HOCON-GUIDE](https://github.com/lightbend/config/blob/main/HOCON.md),
+BTW, we also support the `json` format, but you should know that the name of the config file should end with `.json`
+
+## Example
+
+Before you read on, you can find config file
+examples [here](https://github.com/apache/seatunnel/tree/dev/config) and in distribute package's
+config directory.
+
+## Config file structure
+
+The Config file will be similar to the one below.
+
+### hocon
+
+```hocon
+env {
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ result_table_name = "fake"
+ row.num = 100
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ card = "int"
+ }
+ }
+ }
+}
+
+transform {
+ Filter {
+ source_table_name = "fake"
+ result_table_name = "fake1"
+ fields = [name, card]
+ }
+}
+
+sink {
+ Clickhouse {
+ host = "clickhouse:8123"
+ database = "default"
+ table = "seatunnel_console"
+ fields = ["name", "card"]
+ username = "default"
+ password = ""
+ source_table_name = "fake1"
+ }
+}
+```
+
+### json
+
+```json
+
+{
+ "env": {
+ "job.mode": "batch"
+ },
+ "source": [
+ {
+ "plugin_name": "FakeSource",
+ "result_table_name": "fake",
+ "row.num": 100,
+ "schema": {
+ "fields": {
+ "name": "string",
+ "age": "int",
+ "card": "int"
+ }
+ }
+ }
+ ],
+ "transform": [
+ {
+ "plugin_name": "Filter",
+ "source_table_name": "fake",
+ "result_table_name": "fake1",
+ "fields": ["name", "card"]
+ }
+ ],
+ "sink": [
+ {
+ "plugin_name": "Clickhouse",
+ "host": "clickhouse:8123",
+ "database": "default",
+ "table": "seatunnel_console",
+ "fields": ["name", "card"],
+ "username": "default",
+ "password": "",
+ "source_table_name": "fake1"
+ }
+ ]
+}
+
+```
+
+As you can see, the Config file contains several sections: env, source, transform, sink. Different modules
+have different functions. After you understand these modules, you will understand how SeaTunnel works.
+
+### env
+
+Used to add some engine optional parameters, no matter which engine (Spark or Flink), the corresponding
+optional parameters should be filled in here.
+
+Note that we have separated the parameters by engine, and for the common parameters, we can configure them as before.
+For flink and spark engine, the specific configuration rules of their parameters can be referred to [JobEnvConfig](./JobEnvConfig.md).
+
+
+
+### source
+
+source is used to define where SeaTunnel needs to fetch data, and use the fetched data for the next step.
+Multiple sources can be defined at the same time. The supported source at now
+check [Source of SeaTunnel](../connector-v2/source). Each source has its own specific parameters to define how to
+fetch data, and SeaTunnel also extracts the parameters that each source will use, such as
+the `result_table_name` parameter, which is used to specify the name of the data generated by the current
+source, which is convenient for follow-up used by other modules.
+
+### transform
+
+When we have the data source, we may need to further process the data, so we have the transform module. Of
+course, this uses the word 'may', which means that we can also directly treat the transform as non-existent,
+directly from source to sink. Like below.
+
+```hocon
+env {
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ result_table_name = "fake"
+ row.num = 100
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ card = "int"
+ }
+ }
+ }
+}
+
+sink {
+ Clickhouse {
+ host = "clickhouse:8123"
+ database = "default"
+ table = "seatunnel_console"
+ fields = ["name", "age", "card"]
+ username = "default"
+ password = ""
+ source_table_name = "fake1"
+ }
+}
+```
+
+Like source, transform has specific parameters that belong to each module. The supported source at now check.
+The supported transform at now check [Transform V2 of SeaTunnel](../transform-v2)
+
+### sink
+
+Our purpose with SeaTunnel is to synchronize data from one place to another, so it is critical to define how
+and where data is written. With the sink module provided by SeaTunnel, you can complete this operation quickly
+and efficiently. Sink and source are very similar, but the difference is reading and writing. So go check out
+our [supported sinks](../connector-v2/sink).
+
+### Other
+
+You will find that when multiple sources and multiple sinks are defined, which data is read by each sink, and
+which is the data read by each transform? We use `result_table_name` and `source_table_name` two key
+configurations. Each source module will be configured with a `result_table_name` to indicate the name of the
+data source generated by the data source, and other transform and sink modules can use `source_table_name` to
+refer to the corresponding data source name, indicating that I want to read the data for processing. Then
+transform, as an intermediate processing module, can use both `result_table_name` and `source_table_name`
+configurations at the same time. But you will find that in the above example Config, not every module is
+configured with these two parameters, because in SeaTunnel, there is a default convention, if these two
+parameters are not configured, then the generated data from the last module of the previous node will be used.
+This is much more convenient when there is only one source.
+
+## What's More
+
+If you want to know the details of this format configuration, Please
+see [HOCON](https://github.com/lightbend/config/blob/main/HOCON.md).
diff --git a/docs/zh/concept/connector-v2-features.md b/docs/zh/concept/connector-v2-features.md
new file mode 100644
index 00000000000..7eb3cd48752
--- /dev/null
+++ b/docs/zh/concept/connector-v2-features.md
@@ -0,0 +1,71 @@
+# Intro To Connector V2 Features
+
+## Differences Between Connector V2 And Connector v1
+
+Since https://github.com/apache/seatunnel/issues/1608 We Added Connector V2 Features.
+Connector V2 is a connector defined based on the SeaTunnel Connector API interface. Unlike Connector V1, Connector V2 supports the following features.
+
+* **Multi Engine Support** SeaTunnel Connector API is an engine independent API. The connectors developed based on this API can run in multiple engines. Currently, Flink and Spark are supported, and we will support other engines in the future.
+* **Multi Engine Version Support** Decoupling the connector from the engine through the translation layer solves the problem that most connectors need to modify the code in order to support a new version of the underlying engine.
+* **Unified Batch And Stream** Connector V2 can perform batch processing or streaming processing. We do not need to develop connectors for batch and stream separately.
+* **Multiplexing JDBC/Log connection.** Connector V2 supports JDBC resource reuse and sharing database log parsing.
+
+## Source Connector Features
+
+Source connectors have some common core features, and each source connector supports them to varying degrees.
+
+### exactly-once
+
+If each piece of data in the data source will only be sent downstream by the source once, we think this source connector supports exactly once.
+
+In SeaTunnel, we can save the read **Split** and its **offset**(The position of the read data in split at that time,
+such as line number, byte size, offset, etc) as **StateSnapshot** when checkpoint. If the task restarted, we will get the last **StateSnapshot**
+and then locate the **Split** and **offset** read last time and continue to send data downstream.
+
+For example `File`, `Kafka`.
+
+### column projection
+
+If the connector supports reading only specified columns from the data source (note that if you read all columns first and then filter unnecessary columns through the schema, this method is not a real column projection)
+
+For example `JDBCSource` can use sql define read columns.
+
+`KafkaSource` will read all content from topic and then use `schema` to filter unnecessary columns, This is not `column projection`.
+
+### batch
+
+Batch Job Mode, The data read is bounded and the job will stop when all data read complete.
+
+### stream
+
+Streaming Job Mode, The data read is unbounded and the job never stop.
+
+### parallelism
+
+Parallelism Source Connector support config `parallelism`, every parallelism will create a task to read the data.
+In the **Parallelism Source Connector**, the source will be split into multiple splits, and then the enumerator will allocate the splits to the SourceReader for processing.
+
+### support user-defined split
+
+User can config the split rule.
+
+### support multiple table read
+
+Supports reading multiple tables in one SeaTunnel job
+
+## Sink Connector Features
+
+Sink connectors have some common core features, and each sink connector supports them to varying degrees.
+
+### exactly-once
+
+When any piece of data flows into a distributed system, if the system processes any piece of data accurately only once in the whole processing process and the processing results are correct, it is considered that the system meets the exact once consistency.
+
+For sink connector, the sink connector supports exactly-once if any piece of data only write into target once. There are generally two ways to achieve this:
+
+* The target database supports key deduplication. For example `MySQL`, `Kudu`.
+* The target support **XA Transaction**(This transaction can be used across sessions. Even if the program that created the transaction has ended, the newly started program only needs to know the ID of the last transaction to resubmit or roll back the transaction). Then we can use **Two-phase Commit** to ensure **exactly-once**. For example `File`, `MySQL`.
+
+### cdc(change data capture)
+
+If a sink connector supports writing row kinds(INSERT/UPDATE_BEFORE/UPDATE_AFTER/DELETE) based on primary key, we think it supports cdc(change data capture).
diff --git a/docs/zh/concept/schema-feature.md b/docs/zh/concept/schema-feature.md
new file mode 100644
index 00000000000..15f8186cce1
--- /dev/null
+++ b/docs/zh/concept/schema-feature.md
@@ -0,0 +1,263 @@
+# Intro to schema feature
+
+## Why we need schema
+
+Some NoSQL databases or message queue are not strongly limited schema, so the schema cannot be obtained through the api.
+At this time, a schema needs to be defined to convert to TableSchema and obtain data.
+
+## SchemaOptions
+
+We can use SchemaOptions to define schema, the SchemaOptions contains some config to define the schema. e.g. columns, primaryKey, constraintKeys.
+
+```
+schema = {
+ table = "database.schema.table"
+ schema_first = false
+ comment = "comment"
+ columns = [
+ ...
+ ]
+ primaryKey {
+ ...
+ }
+
+ constraintKeys {
+ ...
+ }
+}
+```
+
+### table
+
+The table full name of the table identifier which the schema belongs to, it contains database, schema, table name. e.g. `database.schema.table`, `database.table`, `table`.
+
+### schema_first
+
+Default is false.
+
+If the schema_first is true, the schema will be used first, this means if we set `table = "a.b"`, `a` will be parsed as schema rather than database, then we can support write `table = "schema.table"`.
+
+### comment
+
+The comment of the CatalogTable which the schema belongs to.
+
+### Columns
+
+Columns is a list of config used to define the column in schema, each column can contains name, type, nullable, defaultValue, comment field.
+
+```
+columns = [
+ {
+ name = id
+ type = bigint
+ nullable = false
+ columnLength = 20
+ defaultValue = 0
+ comment = "primary key id"
+ }
+]
+```
+
+| Field | Required | Default Value | Description |
+|:-------------|:---------|:--------------|----------------------------------------------------------------------------------|
+| name | Yes | - | The name of the column |
+| type | Yes | - | The data type of the column |
+| nullable | No | true | If the column can be nullable |
+| columnLength | No | 0 | The length of the column which will be useful when you need to define the length |
+| defaultValue | No | null | The default value of the column |
+| comment | No | null | The comment of the column |
+
+#### What type supported at now
+
+| Data type | Value type in Java | Description |
+|:----------|:---------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| string | `java.lang.String` | string |
+| boolean | `java.lang.Boolean` | boolean |
+| tinyint | `java.lang.Byte` | -128 to 127 regular. 0 to 255 unsigned*. Specify the maximum number of digits in parentheses. |
+| smallint | `java.lang.Short` | -32768 to 32767 General. 0 to 65535 unsigned*. Specify the maximum number of digits in parentheses. |
+| int | `java.lang.Integer` | All numbers from -2,147,483,648 to 2,147,483,647 are allowed. |
+| bigint | `java.lang.Long` | All numbers between -9,223,372,036,854,775,808 and 9,223,372,036,854,775,807 are allowed. |
+| float | `java.lang.Float` | Float-precision numeric data from -1.79E+308 to 1.79E+308. |
+| double | `java.lang.Double` | Double precision floating point. Handle most decimals. |
+| decimal | `java.math.BigDecimal` | DOUBLE type stored as a string, allowing a fixed decimal point. |
+| null | `java.lang.Void` | null |
+| bytes | `byte[]` | bytes. |
+| date | `java.time.LocalDate` | Only the date is stored. From January 1, 0001 to December 31, 9999. |
+| time | `java.time.LocalTime` | Only store time. Accuracy is 100 nanoseconds. |
+| timestamp | `java.time.LocalDateTime` | Stores a unique number that is updated whenever a row is created or modified. timestamp is based on the internal clock and does not correspond to real time. There can only be one timestamp variable per table. |
+| row | `org.apache.seatunnel.api.table.type.SeaTunnelRow` | Row type,can be nested. |
+| map | `java.util.Map` | A Map is an object that maps keys to values. The key type includes `int` `string` `boolean` `tinyint` `smallint` `bigint` `float` `double` `decimal` `date` `time` `timestamp` `null` , and the value type includes `int` `string` `boolean` `tinyint` `smallint` `bigint` `float` `double` `decimal` `date` `time` `timestamp` `null` `array` `map` `row`. |
+| array | `ValueType[]` | A array is a data type that represents a collection of elements. The element type includes `int` `string` `boolean` `tinyint` `smallint` `bigint` `float` `double`. |
+
+#### How to declare type supported
+
+SeaTunnel provides a simple and direct way to declare basic types. Basic type keywords include `string`, `boolean`, `tinyint`, `smallint`, `int`, `bigint`, `float`, `double`, `date`, `time`, `timestamp`, and `null`. The keyword names for basic types can be used directly as type declarations, and SeaTunnel is case-insensitive to type keywords. For example, if you need to declare a field with integer type, you can simply define the field as `int` or `"int"`.
+
+> The null type declaration must be enclosed in double quotes, like `"null"`. This approach helps avoid confusion with [HOCON](https://github.com/lightbend/config/blob/main/HOCON.md)'s `null` type which represents undefined object.
+
+When declaring complex types (such as **decimal**, **array**, **map**, and **row**), pay attention to specific considerations.
+- When declaring a decimal type, precision and scale settings are required, and the type definition follows the format `decimal(precision, scale)`. It's essential to emphasize that the declaration of the decimal type must be enclosed in `"`; you cannot use the type name directly, as with basic types. For example, when declaring a decimal field with precision 10 and scale 2, you specify the field type as `"decimal(10,2)"`.
+- When declaring an array type, you need to specify the element type, and the type definition follows the format `array`, where `T` represents the element type. The element type includes `int`,`string`,`boolean`,`tinyint`,`smallint`,`bigint`,`float` and `double`. Similar to the decimal type declaration, it also be enclosed in `"`. For example, when declaring a field with an array of integers, you specify the field type as `"array"`.
+- When declaring a map type, you need to specify the key and value types. The map type definition follows the format `map`, where `K` represents the key type and `V` represents the value type. `K` can be any basic type and decimal type, and `V` can be any type supported by SeaTunnel. Similar to previous type declarations, the map type declaration must be enclosed in double quotes. For example, when declaring a field with map type, where the key type is string and the value type is integer, you can declare the field as `"map"`.
+- When declaring a row type, you need to define a [HOCON](https://github.com/lightbend/config/blob/main/HOCON.md) object to describe the fields and their types. The field types can be any type supported by SeaTunnel. For example, when declaring a row type containing an integer field `a` and a string field `b`, you can declare it as `{a = int, b = string}`. Enclosing the definition in `"` as a string is also acceptable, so `"{a = int, b = string}"` is equivalent to `{a = int, c = string}`. Since HOCON is compatible with JSON, `"{\"a\":\"int\", \"b\":\"string\"}"` is equivalent to `"{a = int, b = string}"`.
+
+Here is an example of complex type declarations:
+
+```hocon
+schema {
+ fields {
+ c_decimal = "decimal(10, 2)"
+ c_array = "array"
+ c_row = {
+ c_int = int
+ c_string = string
+ c_row = {
+ c_int = int
+ }
+ }
+ # Hocon style declare row type in generic type
+ map0 = "map"
+ # Json style declare row type in generic type
+ map1 = "map"
+ }
+}
+```
+
+### PrimaryKey
+
+Primary key is a config used to define the primary key in schema, it contains name, columns field.
+
+```
+primaryKey {
+ name = id
+ columns = [id]
+}
+```
+
+| Field | Required | Default Value | Description |
+|:--------|:---------|:--------------|-----------------------------------|
+| name | Yes | - | The name of the primaryKey |
+| columns | Yes | - | The column list in the primaryKey |
+
+### ConstraintKeys
+
+Constraint keys is a list of config used to define the constraint keys in schema, it contains constraintName, constraintType, constraintColumns field.
+
+```
+constraintKeys = [
+ {
+ constraintName = "id_index"
+ constraintType = KEY
+ constraintColumns = [
+ {
+ columnName = "id"
+ sortType = ASC
+ }
+ ]
+ },
+ ]
+```
+
+| Field | Required | Default Value | Description |
+|:------------------|:---------|:--------------|-------------------------------------------------------------------------------------------------------------------------------------------|
+| constraintName | Yes | - | The name of the constraintKey |
+| constraintType | No | KEY | The type of the constraintKey |
+| constraintColumns | Yes | - | The column list in the primaryKey, each column should contains constraintType and sortType, sortType support ASC and DESC, default is ASC |
+
+#### What constraintType supported at now
+
+| ConstraintType | Description |
+|:---------------|:------------|
+| INDEX_KEY | key |
+| UNIQUE_KEY | unique key |
+
+## How to use schema
+
+### Recommended
+
+```
+source {
+ FakeSource {
+ parallelism = 2
+ result_table_name = "fake"
+ row.num = 16
+ schema {
+ table = "FakeDatabase.FakeTable"
+ columns = [
+ {
+ name = id
+ type = bigint
+ nullable = false
+ defaultValue = 0
+ comment = "primary key id"
+ },
+ {
+ name = name
+ type = "string"
+ nullable = true
+ comment = "name"
+ },
+ {
+ name = age
+ type = int
+ nullable = true
+ comment = "age"
+ }
+ ]
+ primaryKey {
+ name = "id"
+ columnNames = [id]
+ }
+ constraintKeys = [
+ {
+ constraintName = "unique_name"
+ constraintType = UNIQUE_KEY
+ constraintColumns = [
+ {
+ columnName = "name"
+ sortType = ASC
+ }
+ ]
+ },
+ ]
+ }
+ }
+}
+```
+
+### Deprecated
+
+If you only need to define the column, you can use fields to define the column, this is a simple way but will be remove in the future.
+
+```
+source {
+ FakeSource {
+ parallelism = 2
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ id = bigint
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(2, 1)"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+```
+
+## When we should use it or not
+
+If there is a `schema` configuration project in Options,the connector can then customize the schema. Like `Fake` `Pulsar` `Http` source connector etc.
diff --git a/docs/zh/concept/speed-limit.md b/docs/zh/concept/speed-limit.md
new file mode 100644
index 00000000000..4b7e7c03ca1
--- /dev/null
+++ b/docs/zh/concept/speed-limit.md
@@ -0,0 +1,44 @@
+# Speed Control
+
+## Introduction
+
+The SeaTunnel provides a powerful speed control feature that allows you to manage the rate at which data is synchronized.
+This functionality is essential when you need to ensure efficient and controlled data transfer between systems.
+The speed control is primarily governed by two key parameters: `read_limit.rows_per_second` and `read_limit.bytes_per_second`.
+This document will guide you through the usage of these parameters and how to leverage them effectively.
+
+## Support Those Engines
+
+> SeaTunnel Zeta
+> Flink
+> Spark
+
+## Configuration
+
+To use the speed control feature, you need to configure the `read_limit.rows_per_second` or `read_limit.bytes_per_second` parameters in your job config.
+
+Example env config in your config file:
+
+```hocon
+env {
+ job.mode=STREAMING
+ job.name=SeaTunnel_Job
+ read_limit.bytes_per_second=7000000
+ read_limit.rows_per_second=400
+}
+source {
+ MySQL-CDC {
+ // ignore...
+ }
+}
+transform {
+}
+sink {
+ Console {
+ }
+}
+```
+
+We have placed `read_limit.bytes_per_second` and `read_limit.rows_per_second` in the `env` parameters, completing the speed control configuration.
+You can configure both of these parameters simultaneously or choose to configure only one of them. The value of each `value` represents the maximum rate at which each thread is restricted.
+Therefore, when configuring the respective values, please take into account the parallelism of your tasks.
diff --git a/docs/zh/connector-v2/Config-Encryption-Decryption.md b/docs/zh/connector-v2/Config-Encryption-Decryption.md
new file mode 100644
index 00000000000..e49db8c1107
--- /dev/null
+++ b/docs/zh/connector-v2/Config-Encryption-Decryption.md
@@ -0,0 +1,180 @@
+# Config File Encryption And Decryption
+
+## Introduction
+
+In most production environments, sensitive configuration items such as passwords are required to be encrypted and cannot be stored in plain text, SeaTunnel provides a convenient one-stop solution for this.
+
+## How to use
+
+SeaTunnel comes with the function of base64 encryption and decryption, but it is not recommended for production use, it is recommended that users implement custom encryption and decryption logic. You can refer to this chapter [How to implement user-defined encryption and decryption](#How to implement user-defined encryption and decryption) get more details about it.
+
+Base64 encryption support encrypt the following parameters:
+- username
+- password
+- auth
+
+Next, I'll show how to quickly use SeaTunnel's own `base64` encryption:
+
+1. And a new option `shade.identifier` in env block of config file, this option indicate what the encryption method that you want to use, in this example, we should add `shade.identifier = base64` in config as the following shown:
+
+ ```hocon
+ #
+ # 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.
+ #
+
+ env {
+ parallelism = 1
+ shade.identifier = "base64"
+ }
+
+ source {
+ MySQL-CDC {
+ result_table_name = "fake"
+ parallelism = 1
+ server-id = 5656
+ port = 56725
+ hostname = "127.0.0.1"
+ username = "seatunnel"
+ password = "seatunnel_password"
+ database-name = "inventory_vwyw0n"
+ table-name = "products"
+ base-url = "jdbc:mysql://localhost:56725"
+ }
+ }
+
+ transform {
+ }
+
+ sink {
+ # choose stdout output plugin to output data to console
+ Clickhouse {
+ host = "localhost:8123"
+ database = "default"
+ table = "fake_all"
+ username = "seatunnel"
+ password = "seatunnel_password"
+
+ # cdc options
+ primary_key = "id"
+ support_upsert = true
+ }
+ }
+ ```
+2. Using the shell based on different calculate engine to encrypt config file, in this example we use zeta:
+
+ ```shell
+ ${SEATUNNEL_HOME}/bin/seatunnel.sh --config config/v2.batch.template --encrypt
+ ```
+
+ Then you can see the encrypted configuration file in the terminal:
+
+ ```log
+ 2023-02-20 17:50:58,319 INFO org.apache.seatunnel.core.starter.command.ConfEncryptCommand - Encrypt config:
+ {
+ "env" : {
+ "parallelism" : 1,
+ "shade.identifier" : "base64"
+ },
+ "source" : [
+ {
+ "base-url" : "jdbc:mysql://localhost:56725",
+ "hostname" : "127.0.0.1",
+ "password" : "c2VhdHVubmVsX3Bhc3N3b3Jk",
+ "port" : 56725,
+ "database-name" : "inventory_vwyw0n",
+ "parallelism" : 1,
+ "result_table_name" : "fake",
+ "table-name" : "products",
+ "plugin_name" : "MySQL-CDC",
+ "server-id" : 5656,
+ "username" : "c2VhdHVubmVs"
+ }
+ ],
+ "transform" : [],
+ "sink" : [
+ {
+ "database" : "default",
+ "password" : "c2VhdHVubmVsX3Bhc3N3b3Jk",
+ "support_upsert" : true,
+ "host" : "localhost:8123",
+ "plugin_name" : "Clickhouse",
+ "primary_key" : "id",
+ "table" : "fake_all",
+ "username" : "c2VhdHVubmVs"
+ }
+ ]
+ }
+ ```
+3. Of course, not only encrypted configuration files are supported, but if the user wants to see the decrypted configuration file, you can execute this command:
+
+ ```shell
+ ${SEATUNNEL_HOME}/bin/seatunnel.sh --config config/v2.batch.template --decrypt
+ ```
+
+## How to implement user-defined encryption and decryption
+
+If you want to customize the encryption method and the configuration of the encryption, this section will help you to solve the problem.
+
+1. Create a java maven project
+
+2. Add `seatunnel-api` module in dependencies like the following shown:
+
+ ```xml
+
+ org.apache.seatunnel
+ seatunnel-api
+ ${seatunnel.version}
+
+ ```
+3. Create a new class and implement interface `ConfigShade`, this interface has the following methods:
+
+ ```java
+ /**
+ * The interface that provides the ability to encrypt and decrypt {@link
+ * org.apache.seatunnel.shade.com.typesafe.config.Config}
+ */
+ public interface ConfigShade {
+
+ /**
+ * The unique identifier of the current interface, used it to select the correct {@link
+ * ConfigShade}
+ */
+ String getIdentifier();
+
+ /**
+ * Encrypt the content
+ *
+ * @param content The content to encrypt
+ */
+ String encrypt(String content);
+
+ /**
+ * Decrypt the content
+ *
+ * @param content The content to decrypt
+ */
+ String decrypt(String content);
+
+ /** To expand the options that user want to encrypt */
+ default String[] sensitiveOptions() {
+ return new String[0];
+ }
+ }
+ ```
+4. Add `org.apache.seatunnel.api.configuration.ConfigShade` in `resources/META-INF/services`
+5. Package it to jar and add jar to `${SEATUNNEL_HOME}/lib`
+6. Change the option `shade.identifier` to the value that you defined in `ConfigShade#getIdentifier`of you config file, please enjoy it \^_\^
+
diff --git a/docs/zh/connector-v2/Error-Quick-Reference-Manual.md b/docs/zh/connector-v2/Error-Quick-Reference-Manual.md
new file mode 100644
index 00000000000..2519bfbe655
--- /dev/null
+++ b/docs/zh/connector-v2/Error-Quick-Reference-Manual.md
@@ -0,0 +1,280 @@
+# Error Quick Reference Manual
+
+This document records some common error codes and corresponding solutions of SeaTunnel, aiming to quickly solve the
+problems encountered by users.
+
+## SeaTunnel API Error Codes
+
+| code | description | solution |
+|--------|------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| API-01 | Configuration item validate failed | When users encounter this error code, it is usually due to a problem with the connector parameters configured by the user, please check the connector documentation and correct the parameters |
+| API-02 | Option item validate failed | - |
+| API-03 | Catalog initialize failed | When users encounter this error code, it is usually because the connector initialization catalog failed, please check the connector connector options whether are correct |
+| API-04 | Database not existed | When users encounter this error code, it is usually because the database that you want to access is not existed, please double check the database exists |
+| API-05 | Table not existed | When users encounter this error code, it is usually because the table that you want to access is not existed, please double check the table exists |
+| API-06 | Factory initialize failed | When users encounter this error code, it is usually because there is a problem with the jar package dependency, please check whether your local SeaTunnel installation package is complete |
+| API-07 | Database already existed | When users encounter this error code, it means that the database you want to create has already existed, please delete database and try again |
+| API-08 | Table already existed | When users encounter this error code, it means that the table you want to create has already existed, please delete table and try again |
+
+## SeaTunnel Common Error Codes
+
+| code | description | solution |
+|-----------|------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| COMMON-01 | File operation failed, such as (read,list,write,move,copy,sync) etc... | When users encounter this error code, it is usually there are some problems in the file operation, please check if the file is OK |
+| COMMON-02 | Json covert/parse operation failed | When users encounter this error code, it is usually there are some problems about json converting or parsing, please check if the json format is correct |
+| COMMON-03 | Reflect class operation failed | When users encounter this error code, it is usually there are some problems on class reflect operation, please check the jar dependency whether exists in classpath |
+| COMMON-04 | Serialize class operation failed | When users encounter this error code, it is usually there are some problems on class serialize operation, please check java environment |
+| COMMON-05 | Unsupported operation | When users encounter this error code, users may trigger an unsupported operation such as enabled some unsupported features |
+| COMMON-06 | Illegal argument | When users encounter this error code, it maybe user-configured parameters are not legal, please correct it according to the tips |
+| COMMON-07 | Unsupported data type | When users encounter this error code, it maybe connectors don't support this data type |
+| COMMON-08 | Sql operation failed, such as (execute,addBatch,close) etc... | When users encounter this error code, it is usually there are some problems on sql execute process, please check the sql whether correct |
+| COMMON-09 | Get table schema from upstream data failed | When users encounter this error code, it maybe SeaTunnel try to get schema information from connector source data failed, please check your configuration whether correct and connector is work |
+| COMMON-10 | Flush data operation that in sink connector failed | When users encounter this error code, it maybe SeaTunnel try to flush batch data to sink connector field, please check your configuration whether correct and connector is work |
+| COMMON-11 | Sink writer operation failed, such as (open, close) etc... | When users encounter this error code, it maybe some operation of writer such as Parquet,Orc,IceBerg failed, you need to check if the corresponding file or resource has read and write permissions |
+| COMMON-12 | Source reader operation failed, such as (open, close) etc... | When users encounter this error code, it maybe some operation of reader such as Parquet,Orc,IceBerg failed, you need to check if the corresponding file or resource has read and write permissions |
+| COMMON-13 | Http operation failed, such as (open, close, response) etc... | When users encounter this error code, it maybe some http requests failed, please check your network environment |
+| COMMON-14 | Kerberos authorized failed | When users encounter this error code, it maybe some The Kerberos authorized is misconfigured |
+| COMMON-15 | Class load operation failed | When users encounter this error code, it maybe some The corresponding jar does not exist, or the type is not supported |
+
+## Assert Connector Error Codes
+
+| code | description | solution |
+|-----------|----------------------|-------------------------------------------------------------------------------------------|
+| ASSERT-01 | Rule validate failed | When users encounter this error code, it means that upstream data does not meet the rules |
+
+## Cassandra Connector Error Codes
+
+| code | description | solution |
+|--------------|-------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| CASSANDRA-01 | Field is not existed in target table | When users encounter this error code, it means that the fields of upstream data don't meet with target cassandra table, please check target cassandra table structure |
+| CASSANDRA-02 | Add batch SeaTunnelRow data into a batch failed | When users encounter this error code, it means that cassandra has some problems, please check it whether is work |
+| CASSANDRA-03 | Close cql session of cassandra failed | When users encounter this error code, it means that cassandra has some problems, please check it whether is work |
+| CASSANDRA-04 | No data in source table | When users encounter this error code, it means that source cassandra table has no data, please check it |
+| CASSANDRA-05 | Parse ip address from string failed | When users encounter this error code, it means that upstream data does not match ip address format, please check it |
+
+## Slack Connector Error Codes
+
+| code | description | solution |
+|----------|---------------------------------------------|--------------------------------------------------------------------------------------------------------------------|
+| SLACK-01 | Conversation can not be founded in channels | When users encounter this error code, it means that the channel is not existed in slack workspace, please check it |
+| SLACK-02 | Write to slack channel failed | When users encounter this error code, it means that slack has some problems, please check it whether is work |
+
+## MyHours Connector Error Codes
+
+| code | description | solution |
+|------------|--------------------------|--------------------------------------------------------------------------------------------------------------------------|
+| MYHOURS-01 | Get myhours token failed | When users encounter this error code, it means that login to the MyHours Failed, please check your network and try again |
+
+## Rabbitmq Connector Error Codes
+
+| code | description | solution |
+|-------------|---------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
+| RABBITMQ-01 | handle queue consumer shutdown signal failed | When users encounter this error code, it means that job has some problems, please check it whether is work well |
+| RABBITMQ-02 | create rabbitmq client failed | When users encounter this error code, it means that rabbitmq has some problems, please check it whether is work |
+| RABBITMQ-03 | close connection failed | When users encounter this error code, it means that rabbitmq has some problems, please check it whether is work |
+| RABBITMQ-04 | send messages failed | When users encounter this error code, it means that rabbitmq has some problems, please check it whether is work |
+| RABBITMQ-05 | messages could not be acknowledged during checkpoint creation | When users encounter this error code, it means that job has some problems, please check it whether is work well |
+| RABBITMQ-06 | messages could not be acknowledged with basicReject | When users encounter this error code, it means that job has some problems, please check it whether is work well |
+| RABBITMQ-07 | parse uri failed | When users encounter this error code, it means that rabbitmq connect uri incorrect, please check it |
+| RABBITMQ-08 | initialize ssl context failed | When users encounter this error code, it means that rabbitmq has some problems, please check it whether is work |
+| RABBITMQ-09 | setup ssl factory failed | When users encounter this error code, it means that rabbitmq has some problems, please check it whether is work |
+
+## Socket Connector Error Codes
+
+| code | description | solution |
+|-----------|----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|
+| SOCKET-01 | Cannot connect to socket server | When the user encounters this error code, it means that the connection address may not match, please check |
+| SOCKET-02 | Failed to send message to socket server | When the user encounters this error code, it means that there is a problem sending data and retry is not enabled, please check |
+| SOCKET-03 | Unable to write; interrupted while doing another attempt | When the user encounters this error code, it means that the data writing is interrupted abnormally, please check |
+
+## TableStore Connector Error Codes
+
+| code | description | solution |
+|---------------|-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|
+| TABLESTORE-01 | Failed to send these rows of data | When users encounter this error code, it means that failed to write these rows of data, please check the rows that failed to import |
+
+## Hive Connector Error Codes
+
+| code | description | solution |
+|---------|---------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
+| HIVE-01 | Get name node host from table location failed | When users encounter this error code, it means that the metastore inforamtion has some problems, please check it |
+| HIVE-02 | Initialize hive metastore client failed | When users encounter this error code, it means that connect to hive metastore service failed, please check it whether is work |
+| HIVE-03 | Get hive table information from hive metastore service failed | When users encounter this error code, it means that hive metastore service has some problems, please check it whether is work |
+
+## Elasticsearch Connector Error Codes
+
+| code | description | solution |
+|------------------|-----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|
+| ELASTICSEARCH-01 | Bulk es response error | When the user encounters this error code, it means that the connection was aborted, please check it whether is work |
+| ELASTICSEARCH-02 | Get elasticsearch version failed | When the user encounters this error code, it means that the connection was aborted, please check it whether is work |
+| ELASTICSEARCH-03 | Fail to scroll request | When the user encounters this error code, it means that the connection was aborted, please check it whether is work |
+| ELASTICSEARCH-04 | Get elasticsearch document index count failed | When the user encounters this error code, it means that the es index may not wrong or the connection was aborted, please check |
+
+## Kafka Connector Error Codes
+
+| code | description | solution |
+|----------|-----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
+| KAFKA-01 | Incompatible KafkaProducer version | When users encounter this error code, it means that KafkaProducer version is incompatible, please check it |
+| KAFKA-02 | Get transactionManager in KafkaProducer exception | When users encounter this error code, it means that can not get transactionManager in KafkaProducer, please check it |
+| KAFKA-03 | Add the split checkpoint state to reader failed | When users encounter this error code, it means that add the split checkpoint state to reader failed, please retry it |
+| KAFKA-04 | Add a split back to the split enumerator,it will only happen when a SourceReader failed | When users encounter this error code, it means that add a split back to the split enumerator failed, please check it |
+| KAFKA-05 | Error occurred when the kafka consumer thread was running | When users encounter this error code, it means that an error occurred when the kafka consumer thread was running, please check it |
+| KAFKA-06 | Kafka failed to consume data | When users encounter this error code, it means that Kafka failed to consume data, please check config and retry it |
+| KAFKA-07 | Kafka failed to close consumer | When users encounter this error code, it means that Kafka failed to close consumer |
+
+## InfluxDB Connector Error Codes
+
+| code | description | solution |
+|-------------|------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
+| INFLUXDB-01 | Connect influxdb failed, due to influxdb version info is unknown | When the user encounters this error code, it indicates that the connection to influxdb failed. Please check |
+| INFLUXDB-02 | Get column index of query result exception | When the user encounters this error code, it indicates that obtaining the column index failed. Please check |
+
+## Kudu Connector Error Codes
+
+| code | description | solution |
+|---------|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
+| KUDU-01 | Get the Kuduscan object for each splice failed | When users encounter this error code, it is usually there are some problems with getting the KuduScan Object for each splice, please check your configuration whether correct and Kudu is work |
+| KUDU-02 | Close Kudu client failed | When users encounter this error code, it is usually there are some problems with closing the Kudu client, please check the Kudu is work | |
+| KUDU-03 | Value type does not match column type | When users encounter this error code, it is usually there are some problems on matching the Type between value type and colum type, please check if the data type is supported |
+| KUDU-04 | Upsert data to Kudu failed | When users encounter this error code, it means that Kudu has some problems, please check it whether is work |
+| KUDU-05 | Insert data to Kudu failed | When users encounter this error code, it means that Kudu has some problems, please check it whether is work |
+| KUDU-06 | Initialize the Kudu client failed | When users encounter this error code, it is usually there are some problems with initializing the Kudu client, please check your configuration whether correct and connector is work |
+| KUDU-07 | Generate Kudu Parameters in the preparation phase failed | When users encounter this error code, it means that there are some problems on Kudu parameters generation, please check your configuration |
+
+## IotDB Connector Error Codes
+
+| code | description | solution |
+|----------|--------------------------------|------------------------------------------------------------------------------------------------------------|
+| IOTDB-01 | Close IoTDB session failed | When the user encounters this error code, it indicates that closing the session failed. Please check |
+| IOTDB-02 | Initialize IoTDB client failed | When the user encounters this error code, it indicates that the client initialization failed. Please check |
+| IOTDB-03 | Close IoTDB client failed | When the user encounters this error code, it indicates that closing the client failed. Please check |
+
+## File Connector Error Codes
+
+| code | description | solution |
+|---------|-----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| FILE-01 | File type is invalid | When users encounter this error code, it means that the this file is not the format that user assigned, please check it |
+| FILE-02 | Data deserialization failed | When users encounter this error code, it means that data from files not satisfied the schema that user assigned, please check data from files whether is correct |
+| FILE-03 | Get file list failed | When users encounter this error code, it means that connector try to traverse the path and get file list failed, please check file system whether is work |
+| FILE-04 | File list is empty | When users encounter this error code, it means that the path user want to sync is empty, please check file path |
+
+## Doris Connector Error Codes
+
+| code | description | solution |
+|----------|---------------------|-----------------------------------------------------------------------------------------------------------------------------------|
+| Doris-01 | stream load error. | When users encounter this error code, it means that stream load to Doris failed, please check data from files whether is correct. |
+| Doris-02 | commit error. | When users encounter this error code, it means that commit to Doris failed, please check network. |
+| Doris-03 | rest service error. | When users encounter this error code, it means that rest service failed, please check network and config. |
+
+## SelectDB Cloud Connector Error Codes
+
+| code | description | solution |
+|-------------|-----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
+| SelectDB-01 | stage load file error | When users encounter this error code, it means that stage load file to SelectDB Cloud failed, please check the configuration and network. |
+| SelectDB-02 | commit copy into sql failed | When users encounter this error code, it means that commit copy into sql to SelectDB Cloud failed, please check the configuration. |
+
+## Clickhouse Connector Error Codes
+
+| code | description | solution |
+|---------------|---------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| CLICKHOUSE-01 | Field is not existed in target table | When users encounter this error code, it means that the fields of upstream data don't meet with target clickhouse table, please check target clickhouse table structure |
+| CLICKHOUSE-02 | Can’t find password of shard node | When users encounter this error code, it means that no password is configured for each node, please check |
+| CLICKHOUSE-03 | Can’t delete directory | When users encounter this error code, it means that the directory does not exist or does not have permission, please check |
+| CLICKHOUSE-04 | Ssh operation failed, such as (login,connect,authentication,close) etc... | When users encounter this error code, it means that the ssh request failed, please check your network environment |
+| CLICKHOUSE-05 | Get cluster list from clickhouse failed | When users encounter this error code, it means that the clickhouse cluster is not configured correctly, please check |
+| CLICKHOUSE-06 | Shard key not found in table | When users encounter this error code, it means that the shard key of the distributed table is not configured, please check |
+
+## Jdbc Connector Error Codes
+
+| code | description | solution |
+|---------|----------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| JDBC-01 | Fail to create driver of class | When users encounter this error code, it means that driver package may not be added. Check whether the driver exists |
+| JDBC-02 | No suitable driver found | When users encounter this error code, it means that no password is configured for each node, please check |
+| JDBC-03 | Xa operation failed, such as (commit, rollback) etc.. | When users encounter this error code, it means that if a distributed sql transaction fails, check the transaction execution of the corresponding database to determine the cause of the transaction failure |
+| JDBC-04 | Connector database failed | When users encounter this error code, it means that database connection failure, check whether the url is correct or whether the corresponding service is normal |
+| JDBC-05 | transaction operation failed, such as (commit, rollback) etc.. | When users encounter this error code, it means that if a sql transaction fails, check the transaction execution of the corresponding database to determine the cause of the transaction failure |
+| JDBC-06 | No suitable dialect factory found | When users encounter this error code, it means that may be an unsupported dialect type |
+| JDBC-07 | The jdbc type don't support sink | When users encounter this error code, it means that jdbc type don't support sink |
+| JDBC-08 | Kerberos authentication failed | When users encounter this error code, it means that database connection Kerberos authentication failed |
+
+## Pulsar Connector Error Codes
+
+| code | description | solution |
+|-----------|--------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|
+| PULSAR-01 | Open pulsar admin failed | When users encounter this error code, it means that open pulsar admin failed, please check it |
+| PULSAR-02 | Open pulsar client failed | When users encounter this error code, it means that open pulsar client failed, please check it |
+| PULSAR-03 | Pulsar authentication failed | When users encounter this error code, it means that Pulsar Authentication failed, please check it |
+| PULSAR-04 | Subscribe topic from pulsar failed | When users encounter this error code, it means that Subscribe topic from pulsar failed, please check it |
+| PULSAR-05 | Get last cursor of pulsar topic failed | When users encounter this error code, it means that get last cursor of pulsar topic failed, please check it |
+| PULSAR-06 | Get partition information of pulsar topic failed | When users encounter this error code, it means that Get partition information of pulsar topic failed, please check it |
+| PULSAR-07 | Pulsar consumer acknowledgeCumulative failed | When users encounter this error code, it means that Pulsar consumer acknowledgeCumulative failed |
+| PULSAR-08 | Pulsar create producer failed | When users encounter this error code, it means that create producer failed, please check it |
+| PULSAR-09 | Pulsar create transaction failed | When users encounter this error code, it means that Pulsar create transaction failed, please check it |
+| PULSAR-10 | Pulsar send message failed | When users encounter this error code, it means that Pulsar sned message failed, please check it |
+
+## StarRocks Connector Error Codes
+
+| code | description | solution |
+|--------------|-------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
+| STARROCKS-01 | Flush batch data to sink connector failed | When users encounter this error code, it means that flush batch data to sink connector failed, please check it |
+| STARROCKS-02 | Writing records to StarRocks failed | When users encounter this error code, it means that writing records to StarRocks failed, please check data from files whether is correct |
+| STARROCKS-03 | Close StarRocks BE reader failed. | it means that StarRocks has some problems, please check it whether is work |
+| STARROCKS-04 | Create StarRocks BE reader failed. | it means that StarRocks has some problems, please check it whether is work |
+| STARROCKS-05 | Scan data from StarRocks BE failed. | When users encounter this error code, it means that scan data from StarRocks failed, please check it |
+| STARROCKS-06 | Request query Plan failed. | When users encounter this error code, it means that scan data from StarRocks failed, please check it |
+| STARROCKS-07 | Read Arrow data failed. | When users encounter this error code, it means that that job has some problems, please check it whether is work well |
+
+## DingTalk Connector Error Codes
+
+| code | description | solution |
+|-------------|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------|
+| DINGTALK-01 | Send response to DinkTalk server failed | When users encounter this error code, it means that send response message to DinkTalk server failed, please check it |
+| DINGTALK-02 | Get sign from DinkTalk server failed | When users encounter this error code, it means that get signature from DinkTalk server failed , please check it |
+
+## Iceberg Connector Error Codes
+
+| code | description | solution |
+|------------|--------------------------------|----------------------------------------------------------------------------------------------------------|
+| ICEBERG-01 | File Scan Split failed | When users encounter this error code, it means that the file scanning and splitting failed. Please check |
+| ICEBERG-02 | Invalid starting record offset | When users encounter this error code, it means that the starting record offset is invalid. Please check |
+
+## Email Connector Error Codes
+
+| code | description | solution |
+|----------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| EMAIL-01 | Send email failed | When users encounter this error code, it means that send email to target server failed, please adjust the network environment according to the abnormal information |
+
+## S3Redshift Connector Error Codes
+
+| code | description | solution |
+|---------------|---------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| S3RedShift-01 | Aggregate committer error | S3Redshift Sink Connector will write data to s3 and then move file to the target s3 path. And then use `Copy` action copy the data to Redshift. Please check the error log and find out the specific reason. |
+
+## Google Firestore Connector Error Codes
+
+| code | description | solution |
+|--------------|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
+| FIRESTORE-01 | Close Firestore client failed | When users encounter this error code, it is usually there are some problems with closing the Firestore client, please check the Firestore is work |
+
+## FilterFieldTransform Error Codes
+
+| code | description | solution |
+|---------------------------|------------------------|-------------------------|
+| FILTER_FIELD_TRANSFORM-01 | filter field not found | filter field not found. |
+
+## RocketMq Connector Error Codes
+
+| code | description | solution |
+|-------------|-------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
+| ROCKETMQ-01 | Add a split back to the split enumerator failed, it will only happen when a SourceReader failed | When users encounter this error code, it means that add a split back to the split enumerator failed, please check it. |
+| ROCKETMQ-02 | Add the split checkpoint state to reader failed | When users encounter this error code, it means that add the split checkpoint state to reader failed, please check it. |
+| ROCKETMQ-03 | Rocketmq failed to consume data | When users encounter this error code, it means that rocketmq failed to consume data, please check it., please check it. |
+| ROCKETMQ-04 | Error occurred when the rocketmq consumer thread was running | When the user encounters this error code, it means that an error occurred while running the Rocketmq consumer thread |
+| ROCKETMQ-05 | Rocketmq producer failed to send message | When users encounter this error code, it means that Rocketmq producer failed to send message, please check it. |
+| ROCKETMQ-06 | Rocketmq producer failed to start | When users encounter this error code, it means that Rocketmq producer failed to start, please check it. |
+| ROCKETMQ-07 | Rocketmq consumer failed to start | When users encounter this error code, it means that Rocketmq consumer failed to start, please check it. |
+| ROCKETMQ-08 | Unsupported start mode | When users encounter this error code, it means that the configured start mode is not supported, please check it. |
+| ROCKETMQ-09 | Failed to get the offsets of the current consumer group | When users encounter this error code, it means that failed to get the offsets of the current consumer group, please check it. |
+| ROCKETMQ-10 | Failed to search offset through timestamp | When users encounter this error code, it means that failed to search offset through timestamp, please check it. |
+| ROCKETMQ-11 | Failed to get topic min and max topic | When users encounter this error code, it means that failed to get topic min and max topic, please check it. |
+
diff --git a/docs/zh/connector-v2/formats/avro.md b/docs/zh/connector-v2/formats/avro.md
new file mode 100644
index 00000000000..638657b3456
--- /dev/null
+++ b/docs/zh/connector-v2/formats/avro.md
@@ -0,0 +1,111 @@
+# Avro format
+
+Avro is very popular in streaming data pipeline. Now seatunnel supports Avro format in kafka connector.
+
+# How To Use
+
+## Kafka uses example
+
+- This is an example to generate data from fake source and sink to kafka with avro format.
+
+```bash
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ row.num = 90
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ c_row = {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ }
+ }
+ }
+ result_table_name = "fake"
+ }
+}
+
+sink {
+ Kafka {
+ bootstrap.servers = "kafkaCluster:9092"
+ topic = "test_avro_topic_fake_source"
+ format = avro
+ }
+}
+```
+
+- This is an example read data from kafka with avro format and print to console.
+
+```bash
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ Kafka {
+ bootstrap.servers = "kafkaCluster:9092"
+ topic = "test_avro_topic"
+ result_table_name = "kafka_table"
+ kafka.auto.offset.reset = "earliest"
+ format = avro
+ format_error_handle_way = skip
+ schema = {
+ fields {
+ id = bigint
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(2, 1)"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+sink {
+ Console {
+ source_table_name = "kafka_table"
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/formats/canal-json.md b/docs/zh/connector-v2/formats/canal-json.md
new file mode 100644
index 00000000000..1697a8c6189
--- /dev/null
+++ b/docs/zh/connector-v2/formats/canal-json.md
@@ -0,0 +1,114 @@
+# Canal Format
+
+Changelog-Data-Capture Format Format: Serialization Schema Format: Deserialization Schema
+
+Canal is a CDC (Changelog Data Capture) tool that can stream changes in real-time from MySQL into other systems. Canal provides a unified format schema for changelog and supports to serialize messages using JSON and protobuf (protobuf is the default format for Canal).
+
+SeaTunnel supports to interpret Canal JSON messages as INSERT/UPDATE/DELETE messages into seatunnel system. This is useful in many cases to leverage this feature, such as
+
+ synchronizing incremental data from databases to other systems
+ auditing logs
+ real-time materialized views on databases
+ temporal join changing history of a database table and so on.
+
+SeaTunnel also supports to encode the INSERT/UPDATE/DELETE messages in SeaTunnel as Canal JSON messages, and emit to storage like Kafka. However, currently SeaTunnel can’t combine UPDATE_BEFORE and UPDATE_AFTER into a single UPDATE message. Therefore, SeaTunnel encodes UPDATE_BEFORE and UPDATE_AFTER as DELETE and INSERT Canal messages.
+
+# Format Options
+
+| Option | Default | Required | Description |
+|--------------------------------|---------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| format | (none) | yes | Specify what format to use, here should be 'canal_json'. |
+| canal_json.ignore-parse-errors | false | no | Skip fields and rows with parse errors instead of failing. Fields are set to null in case of errors. |
+| canal_json.database.include | (none) | no | An optional regular expression to only read the specific databases changelog rows by regular matching the "database" meta field in the Canal record. The pattern string is compatible with Java's Pattern. |
+| canal_json.table.include | (none) | no | An optional regular expression to only read the specific tables changelog rows by regular matching the "table" meta field in the Canal record. The pattern string is compatible with Java's Pattern. |
+
+# How to use
+
+## Kafka uses example
+
+Canal provides a unified format for changelog, here is a simple example for an update operation captured from a MySQL products table:
+
+```bash
+{
+ "data": [
+ {
+ "id": "111",
+ "name": "scooter",
+ "description": "Big 2-wheel scooter",
+ "weight": "5.18"
+ }
+ ],
+ "database": "inventory",
+ "es": 1589373560000,
+ "id": 9,
+ "isDdl": false,
+ "mysqlType": {
+ "id": "INTEGER",
+ "name": "VARCHAR(255)",
+ "description": "VARCHAR(512)",
+ "weight": "FLOAT"
+ },
+ "old": [
+ {
+ "weight": "5.15"
+ }
+ ],
+ "pkNames": [
+ "id"
+ ],
+ "sql": "",
+ "sqlType": {
+ "id": 4,
+ "name": 12,
+ "description": 12,
+ "weight": 7
+ },
+ "table": "products",
+ "ts": 1589373560798,
+ "type": "UPDATE"
+}
+```
+
+Note: please refer to Canal documentation about the meaning of each fields.
+
+The MySQL products table has 4 columns (id, name, description and weight).
+The above JSON message is an update change event on the products table where the weight value of the row with id = 111 is changed from 5.18 to 5.15.
+Assuming the messages have been synchronized to Kafka topic products_binlog, then we can use the following SeaTunnel to consume this topic and interpret the change events.
+
+```bash
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ Kafka {
+ bootstrap.servers = "kafkaCluster:9092"
+ topic = "products_binlog"
+ result_table_name = "kafka_name"
+ start_mode = earliest
+ schema = {
+ fields {
+ id = "int"
+ name = "string"
+ description = "string"
+ weight = "string"
+ }
+ },
+ format = canal_json
+ }
+
+}
+
+transform {
+}
+
+sink {
+ Kafka {
+ bootstrap.servers = "localhost:9092"
+ topic = "consume-binlog"
+ format = canal_json
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/formats/cdc-compatible-debezium-json.md b/docs/zh/connector-v2/formats/cdc-compatible-debezium-json.md
new file mode 100644
index 00000000000..b35501a62a7
--- /dev/null
+++ b/docs/zh/connector-v2/formats/cdc-compatible-debezium-json.md
@@ -0,0 +1,55 @@
+# CDC Compatible Debezium-json
+
+SeaTunnel supports to interpret cdc record as Debezium-JSON messages publish to mq(kafka) system.
+
+This is useful in many cases to leverage this feature, such as compatible with the debezium ecosystem.
+
+# How To Use
+
+## MySQL-CDC Sink Kafka
+
+```bash
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 15000
+}
+
+source {
+ MySQL-CDC {
+ result_table_name = "table1"
+
+ base-url="jdbc:mysql://localhost:3306/test"
+ "startup.mode"=INITIAL
+ table-names=[
+ "database1.t1",
+ "database1.t2",
+ "database2.t1"
+ ]
+
+ # compatible_debezium_json options
+ format = compatible_debezium_json
+ debezium = {
+ # include schema into kafka message
+ key.converter.schemas.enable = false
+ value.converter.schemas.enable = false
+ # include ddl
+ include.schema.changes = true
+ # topic prefix
+ database.server.name = "mysql_cdc_1"
+ }
+ }
+}
+
+sink {
+ Kafka {
+ source_table_name = "table1"
+
+ bootstrap.servers = "localhost:9092"
+
+ # compatible_debezium_json options
+ format = compatible_debezium_json
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/formats/debezium-json.md b/docs/zh/connector-v2/formats/debezium-json.md
new file mode 100644
index 00000000000..a01e6c70d65
--- /dev/null
+++ b/docs/zh/connector-v2/formats/debezium-json.md
@@ -0,0 +1,107 @@
+# Debezium Format
+
+Changelog-Data-Capture Format: Serialization Schema Format: Deserialization Schema
+
+Debezium is a set of distributed services to capture changes in your databases so that your applications can see those changes and respond to them. Debezium records all row-level changes within each database table in a *change event stream*, and applications simply read these streams to see the change events in the same order in which they occurred.
+
+Seatunnel supports to interpret Debezium JSON messages as INSERT/UPDATE/DELETE messages into seatunnel system. This is useful in many cases to leverage this feature, such as
+
+ synchronizing incremental data from databases to other systems
+ auditing logs
+ real-time materialized views on databases
+ temporal join changing history of a database table and so on.
+
+Seatunnel also supports to encode the INSERT/UPDATE/DELETE messages in Seatunnel asDebezium JSON messages, and emit to storage like Kafka.
+
+# Format Options
+
+| Option | Default | Required | Description |
+|-----------------------------------|---------|----------|------------------------------------------------------------------------------------------------------|
+| format | (none) | yes | Specify what format to use, here should be 'debezium_json'. |
+| debezium-json.ignore-parse-errors | false | no | Skip fields and rows with parse errors instead of failing. Fields are set to null in case of errors. |
+
+# How To Use
+
+## Kafka Uses example
+
+Debezium provides a unified format for changelog, here is a simple example for an update operation captured from a MySQL products table:
+
+```bash
+{
+ "before": {
+ "id": 111,
+ "name": "scooter",
+ "description": "Big 2-wheel scooter ",
+ "weight": 5.18
+ },
+ "after": {
+ "id": 111,
+ "name": "scooter",
+ "description": "Big 2-wheel scooter ",
+ "weight": 5.17
+ },
+ "source": {
+ "version": "1.1.1.Final",
+ "connector": "mysql",
+ "name": "dbserver1",
+ "ts_ms": 1589362330000,
+ "snapshot": "false",
+ "db": "inventory",
+ "table": "products",
+ "server_id": 223344,
+ "gtid": null,
+ "file": "mysql-bin.000003",
+ "pos": 2090,
+ "row": 0,
+ "thread": 2,
+ "query": null
+ },
+ "op": "u",
+ "ts_ms": 1589362330904,
+ "transaction": null
+}
+```
+
+Note: please refer to Debezium documentation about the meaning of each fields.
+
+The MySQL products table has 4 columns (id, name, description and weight).
+The above JSON message is an update change event on the products table where the weight value of the row with id = 111 is changed from 5.18 to 5.15.
+Assuming the messages have been synchronized to Kafka topic products_binlog, then we can use the following Seatunnel conf to consume this topic and interpret the change events by Debezium format.
+
+```bash
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ Kafka {
+ bootstrap.servers = "kafkaCluster:9092"
+ topic = "products_binlog"
+ result_table_name = "kafka_name"
+ start_mode = earliest
+ schema = {
+ fields {
+ id = "int"
+ name = "string"
+ description = "string"
+ weight = "string"
+ }
+ }
+ format = debezium_json
+ }
+
+}
+
+transform {
+}
+
+sink {
+ Kafka {
+ bootstrap.servers = "kafkaCluster:9092"
+ topic = "consume-binlog"
+ format = debezium_json
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/formats/kafka-compatible-kafkaconnect-json.md b/docs/zh/connector-v2/formats/kafka-compatible-kafkaconnect-json.md
new file mode 100644
index 00000000000..def638367ca
--- /dev/null
+++ b/docs/zh/connector-v2/formats/kafka-compatible-kafkaconnect-json.md
@@ -0,0 +1,47 @@
+# Kafka source compatible kafka-connect-json
+
+Seatunnel connector kafka supports parsing data extracted through kafka connect source, especially data extracted from kafka connect jdbc and kafka connect debezium
+
+# How To Use
+
+## Kafka Sink Mysql
+
+```bash
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ Kafka {
+ bootstrap.servers = "localhost:9092"
+ topic = "jdbc_source_record"
+ result_table_name = "kafka_table"
+ start_mode = earliest
+ schema = {
+ fields {
+ id = "int"
+ name = "string"
+ description = "string"
+ weight = "string"
+ }
+ },
+ format = COMPATIBLE_KAFKA_CONNECT_JSON
+ }
+}
+
+
+sink {
+ Jdbc {
+ driver = com.mysql.cj.jdbc.Driver
+ url = "jdbc:mysql://localhost:3306/seatunnel"
+ user = st_user
+ password = seatunnel
+ generate_sink_sql = true
+ database = seatunnel
+ table = jdbc_sink
+ primary_keys = ["id"]
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/formats/ogg-json.md b/docs/zh/connector-v2/formats/ogg-json.md
new file mode 100644
index 00000000000..629edde72e5
--- /dev/null
+++ b/docs/zh/connector-v2/formats/ogg-json.md
@@ -0,0 +1,93 @@
+# Ogg Format
+
+[Oracle GoldenGate](https://www.oracle.com/integration/goldengate/) (a.k.a ogg) is a managed service providing a real-time data mesh platform, which uses replication to keep data highly available, and enabling real-time analysis. Customers can design, execute, and monitor their data replication and stream data processing solutions without the need to allocate or manage compute environments. Ogg provides a format schema for changelog and supports to serialize messages using JSON.
+
+Seatunnel supports to interpret Ogg JSON messages as INSERT/UPDATE/DELETE messages into seatunnel system. This is useful in many cases to leverage this feature, such as
+
+ synchronizing incremental data from databases to other systems
+ auditing logs
+ real-time materialized views on databases
+ temporal join changing history of a database table and so on.
+
+Seatunnel also supports to encode the INSERT/UPDATE/DELETE messages in Seatunnel as Ogg JSON messages, and emit to storage like Kafka. However, currently Seatunnel can’t combine UPDATE_BEFORE and UPDATE_AFTER into a single UPDATE message. Therefore, Seatunnel encodes UPDATE_BEFORE and UPDATE_AFTER as DELETE and INSERT Ogg messages.
+
+# Format Options
+
+| Option | Default | Required | Description |
+|------------------------------|---------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| format | (none) | yes | Specify what format to use, here should be '-json'. |
+| ogg_json.ignore-parse-errors | false | no | Skip fields and rows with parse errors instead of failing. Fields are set to null in case of errors. |
+| ogg_json.database.include | (none) | no | An optional regular expression to only read the specific databases changelog rows by regular matching the "database" meta field in the Canal record. The pattern string is compatible with Java's Pattern. |
+| ogg_json.table.include | (none) | no | An optional regular expression to only read the specific tables changelog rows by regular matching the "table" meta field in the Canal record. The pattern string is compatible with Java's Pattern. |
+
+# How to use Ogg format
+
+## Kafka uses example
+
+Ogg provides a unified format for changelog, here is a simple example for an update operation captured from a Oracle products table:
+
+```bash
+{
+ "before": {
+ "id": 111,
+ "name": "scooter",
+ "description": "Big 2-wheel scooter",
+ "weight": 5.18
+ },
+ "after": {
+ "id": 111,
+ "name": "scooter",
+ "description": "Big 2-wheel scooter",
+ "weight": 5.15
+ },
+ "op_type": "U",
+ "op_ts": "2020-05-13 15:40:06.000000",
+ "current_ts": "2020-05-13 15:40:07.000000",
+ "primary_keys": [
+ "id"
+ ],
+ "pos": "00000000000000000000143",
+ "table": "PRODUCTS"
+}
+```
+
+Note: please refer to documentation about the meaning of each fields.
+
+The Oracle products table has 4 columns (id, name, description and weight).
+The above JSON message is an update change event on the products table where the weight value of the row with id = 111 is changed from 5.18 to 5.15.
+Assuming the messages have been synchronized to Kafka topic products_binlog, then we can use the following Seatunnel to consume this topic and interpret the change events.
+
+```bash
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+}
+source {
+ Kafka {
+ bootstrap.servers = "127.0.0.1:9092"
+ topic = "ogg"
+ result_table_name = "kafka_name"
+ start_mode = earliest
+ schema = {
+ fields {
+ id = "int"
+ name = "string"
+ description = "string"
+ weight = "double"
+ }
+ },
+ format = ogg_json
+ }
+}
+sink {
+ jdbc {
+ url = "jdbc:mysql://127.0.0.1/test"
+ driver = "com.mysql.cj.jdbc.Driver"
+ user = "root"
+ password = "12345678"
+ table = "ogg"
+ primary_keys = ["id"]
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/AmazonDynamoDB.md b/docs/zh/connector-v2/sink/AmazonDynamoDB.md
new file mode 100644
index 00000000000..63211077c74
--- /dev/null
+++ b/docs/zh/connector-v2/sink/AmazonDynamoDB.md
@@ -0,0 +1,66 @@
+# AmazonDynamoDB
+
+> Amazon DynamoDB sink connector
+
+## Description
+
+Write data to Amazon DynamoDB
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| Name | Type | Required | Default value |
+|-------------------|--------|----------|---------------|
+| url | string | yes | - |
+| region | string | yes | - |
+| access_key_id | string | yes | - |
+| secret_access_key | string | yes | - |
+| table | string | yes | - |
+| batch_size | string | no | 25 |
+| common-options | | no | - |
+
+### url [string]
+
+The URL to write to Amazon DynamoDB.
+
+### region [string]
+
+The region of Amazon DynamoDB.
+
+### accessKeyId [string]
+
+The access id of Amazon DynamoDB.
+
+### secretAccessKey [string]
+
+The access secret of Amazon DynamoDB.
+
+### table [string]
+
+The table of Amazon DynamoDB.
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+## Example
+
+```bash
+Amazondynamodb {
+ url = "http://127.0.0.1:8000"
+ region = "us-east-1"
+ accessKeyId = "dummy-key"
+ secretAccessKey = "dummy-secret"
+ table = "TableName"
+ }
+```
+
+## Changelog
+
+### next version
+
+- Add Amazon DynamoDB Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/AmazonSqs.md b/docs/zh/connector-v2/sink/AmazonSqs.md
new file mode 100644
index 00000000000..8efabfa395b
--- /dev/null
+++ b/docs/zh/connector-v2/sink/AmazonSqs.md
@@ -0,0 +1,87 @@
+# AmazonSqs
+
+> Amazon SQS sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+Write data to Amazon SQS
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------|--------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The Queue URL to read from Amazon SQS. |
+| region | String | No | - | The AWS region for the SQS service |
+| format | String | No | json | Data format. The default format is json. Optional text format, canal-json and debezium-json.If you use json or text format. The default field separator is ", ". If you customize the delimiter, add the "field_delimiter" option.If you use canal format, please refer to [canal-json](../formats/canal-json.md) for details.If you use debezium format, please refer to [debezium-json](../formats/debezium-json.md) for details. |
+| format_error_handle_way | String | No | fail | The processing method of data format error. The default value is fail, and the optional value is (fail, skip). When fail is selected, data format error will block and an exception will be thrown. When skip is selected, data format error will skip this line data. |
+| field_delimiter | String | No | , | Customize the field delimiter for data format. |
+
+## Task Example
+
+```bash
+source {
+ FakeSource {
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ c_row = {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ }
+ }
+ }
+ result_table_name = "fake"
+ }
+}
+
+sink {
+ AmazonSqs {
+ url = "http://127.0.0.1:8000"
+ region = "us-east-1"
+ queue = "queueName"
+ format = text
+ field_delimiter = "|"
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/Assert.md b/docs/zh/connector-v2/sink/Assert.md
new file mode 100644
index 00000000000..e02d0fc6b96
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Assert.md
@@ -0,0 +1,498 @@
+# Assert
+
+> Assert sink connector
+
+## Description
+
+A flink sink plugin which can assert illegal data by user defined rules
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| Name | Type | Required | Default |
+|------------------------------------------------------------------------------------------------|-------------------------------------------------|----------|---------|
+| rules | ConfigMap | yes | - |
+| rules.field_rules | string | yes | - |
+| rules.field_rules.field_name | string\|ConfigMap | yes | - |
+| rules.field_rules.field_type | string | no | - |
+| rules.field_rules.field_value | ConfigList | no | - |
+| rules.field_rules.field_value.rule_type | string | no | - |
+| rules.field_rules.field_value.rule_value | numeric | no | - |
+| rules.field_rules.field_value.equals_to | boolean\|numeric\|string\|ConfigList\|ConfigMap | no | - |
+| rules.row_rules | string | yes | - |
+| rules.row_rules.rule_type | string | no | - |
+| rules.row_rules.rule_value | string | no | - |
+| rules.catalog_table_rule | ConfigMap | no | - |
+| rules.catalog_table_rule.primary_key_rule | ConfigMap | no | - |
+| rules.catalog_table_rule.primary_key_rule.primary_key_name | string | no | - |
+| rules.catalog_table_rule.primary_key_rule.primary_key_columns | ConfigList | no | - |
+| rules.catalog_table_rule.constraint_key_rule | ConfigList | no | - |
+| rules.catalog_table_rule.constraint_key_rule.constraint_key_name | string | no | - |
+| rules.catalog_table_rule.constraint_key_rule.constraint_key_type | string | no | - |
+| rules.catalog_table_rule.constraint_key_rule.constraint_key_columns | ConfigList | no | - |
+| rules.catalog_table_rule.constraint_key_rule.constraint_key_columns.constraint_key_column_name | string | no | - |
+| rules.catalog_table_rule.constraint_key_rule.constraint_key_columns.constraint_key_sort_type | string | no | - |
+| rules.catalog_table_rule.column_rule | ConfigList | no | - |
+| rules.catalog_table_rule.column_rule.name | string | no | - |
+| rules.catalog_table_rule.column_rule.type | string | no | - |
+| rules.catalog_table_rule.column_rule.column_length | int | no | - |
+| rules.catalog_table_rule.column_rule.nullable | boolean | no | - |
+| rules.catalog_table_rule.column_rule.default_value | string | no | - |
+| rules.catalog_table_rule.column_rule.comment | comment | no | - |
+| rules.table-names | ConfigList | no | - |
+| common-options | | no | - |
+
+### rules [ConfigMap]
+
+Rule definition of user's available data. Each rule represents one field validation or row num validation.
+
+### field_rules [ConfigList]
+
+field rules for field validation
+
+### field_name [string]
+
+field name(string)
+
+### field_type [string | ConfigMap]
+
+Field type declarations should adhere to this [guide](../../concept/schema-feature.md#how-to-declare-type-supported).
+
+### field_value [ConfigList]
+
+A list value rule define the data value validation
+
+### rule_type [string]
+
+The following rules are supported for now
+- NOT_NULL `value can't be null`
+- NULL `value can be null`
+- MIN `define the minimum value of data`
+- MAX `define the maximum value of data`
+- MIN_LENGTH `define the minimum string length of a string data`
+- MAX_LENGTH `define the maximum string length of a string data`
+- MIN_ROW `define the minimun number of rows`
+- MAX_ROW `define the maximum number of rows`
+
+### rule_value [numeric]
+
+The value related to rule type. When the `rule_type` is `MIN`, `MAX`, `MIN_LENGTH`, `MAX_LENGTH`, `MIN_ROW` or `MAX_ROW`, users need to assign a value to the `rule_value`.
+
+### equals_to [boolean | numeric | string | ConfigList | ConfigMap]
+
+`equals_to` is used to compare whether the field value is equal to the configured expected value. You can assign values of all types to `equals_to`. These types are detailed [here](../../concept/schema-feature.md#what-type-supported-at-now). For instance, if one field is a row with three fields, and the declaration of row type is `{a = array, b = map, c={c_0 = int, b = string}}`, users can assign the value `[["a", "b"], { k0 = 9999.99, k1 = 111.11 }, [123, "abcd"]]` to `equals_to`.
+
+> The way of defining field values is consistent with [FakeSource](../source/FakeSource.md#customize-the-data-content-simple).
+>
+> `equals_to` cannot be applied to `null` type fields. However, users can use the rule type `NULL` for verification, such as `{rule_type = NULL}`.
+
+### catalog_table_rule [ConfigMap]
+
+Used to assert the catalog table is same with the user defined table.
+
+### table-names [ConfigList]
+
+Used to assert the table should be in the data.
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Example
+
+the whole config obey with `hocon` style
+
+```hocon
+Assert {
+ rules =
+ {
+ row_rules = [
+ {
+ rule_type = MAX_ROW
+ rule_value = 10
+ },
+ {
+ rule_type = MIN_ROW
+ rule_value = 5
+ }
+ ],
+ field_rules = [{
+ field_name = name
+ field_type = string
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ },
+ {
+ rule_type = MIN_LENGTH
+ rule_value = 5
+ },
+ {
+ rule_type = MAX_LENGTH
+ rule_value = 10
+ }
+ ]
+ }, {
+ field_name = age
+ field_type = int
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = 23
+ },
+ {
+ rule_type = MIN
+ rule_value = 32767
+ },
+ {
+ rule_type = MAX
+ rule_value = 2147483647
+ }
+ ]
+ }
+ ]
+ catalog_table_rule {
+ primary_key_rule = {
+ primary_key_name = "primary key"
+ primary_key_columns = ["id"]
+ }
+ constraint_key_rule = [
+ {
+ constraint_key_name = "unique_name"
+ constraint_key_type = UNIQUE_KEY
+ constraint_key_columns = [
+ {
+ constraint_key_column_name = "id"
+ constraint_key_sort_type = ASC
+ }
+ ]
+ }
+ ]
+ column_rule = [
+ {
+ name = "id"
+ type = bigint
+ },
+ {
+ name = "name"
+ type = string
+ },
+ {
+ name = "age"
+ type = int
+ }
+ ]
+ }
+ }
+
+ }
+```
+
+Here is a more complex example about `equals_to`. The example involves FakeSource. You may want to learn it, please read this [document](../source/FakeSource.md).
+
+```hocon
+source {
+ FakeSource {
+ row.num = 1
+ schema = {
+ fields {
+ c_null = "null"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_date = date
+ c_timestamp = timestamp
+ c_time = time
+ c_bytes = bytes
+ c_array = "array"
+ c_map = "map"
+ c_map_nest = "map"
+ c_row = {
+ c_null = "null"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_date = date
+ c_timestamp = timestamp
+ c_time = time
+ c_bytes = bytes
+ c_array = "array"
+ c_map = "map"
+ }
+ }
+ }
+ rows = [
+ {
+ kind = INSERT
+ fields = [
+ null, "AAA", false, 1, 1, 333, 323232, 3.1, 9.33333, 99999.99999999, "2012-12-21", "2012-12-21T12:34:56", "12:34:56",
+ "bWlJWmo=",
+ [0, 1, 2],
+ "{ 12:01:26 = v0 }",
+ { k1 = [123, "BBB-BB"]},
+ [
+ null, "AAA", false, 1, 1, 333, 323232, 3.1, 9.33333, 99999.99999999, "2012-12-21", "2012-12-21T12:34:56", "12:34:56",
+ "bWlJWmo=",
+ [0, 1, 2],
+ { k0 = v0 }
+ ]
+ ]
+ }
+ ]
+ result_table_name = "fake"
+ }
+}
+
+sink{
+ Assert {
+ source_table_name = "fake"
+ rules =
+ {
+ row_rules = [
+ {
+ rule_type = MAX_ROW
+ rule_value = 1
+ },
+ {
+ rule_type = MIN_ROW
+ rule_value = 1
+ }
+ ],
+ field_rules = [
+ {
+ field_name = c_null
+ field_type = "null"
+ field_value = [
+ {
+ rule_type = NULL
+ }
+ ]
+ },
+ {
+ field_name = c_string
+ field_type = string
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = "AAA"
+ }
+ ]
+ },
+ {
+ field_name = c_boolean
+ field_type = boolean
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = false
+ }
+ ]
+ },
+ {
+ field_name = c_tinyint
+ field_type = tinyint
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = 1
+ }
+ ]
+ },
+ {
+ field_name = c_smallint
+ field_type = smallint
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = 1
+ }
+ ]
+ },
+ {
+ field_name = c_int
+ field_type = int
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = 333
+ }
+ ]
+ },
+ {
+ field_name = c_bigint
+ field_type = bigint
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = 323232
+ }
+ ]
+ },
+ {
+ field_name = c_float
+ field_type = float
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = 3.1
+ }
+ ]
+ },
+ {
+ field_name = c_double
+ field_type = double
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = 9.33333
+ }
+ ]
+ },
+ {
+ field_name = c_decimal
+ field_type = "decimal(30, 8)"
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = 99999.99999999
+ }
+ ]
+ },
+ {
+ field_name = c_date
+ field_type = date
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = "2012-12-21"
+ }
+ ]
+ },
+ {
+ field_name = c_timestamp
+ field_type = timestamp
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = "2012-12-21T12:34:56"
+ }
+ ]
+ },
+ {
+ field_name = c_time
+ field_type = time
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = "12:34:56"
+ }
+ ]
+ },
+ {
+ field_name = c_bytes
+ field_type = bytes
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = "bWlJWmo="
+ }
+ ]
+ },
+ {
+ field_name = c_array
+ field_type = "array"
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = [0, 1, 2]
+ }
+ ]
+ },
+ {
+ field_name = c_map
+ field_type = "map"
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = "{ 12:01:26 = v0 }"
+ }
+ ]
+ },
+ {
+ field_name = c_map_nest
+ field_type = "map"
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = { k1 = [123, "BBB-BB"] }
+ }
+ ]
+ },
+ {
+ field_name = c_row
+ field_type = {
+ c_null = "null"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_date = date
+ c_timestamp = timestamp
+ c_time = time
+ c_bytes = bytes
+ c_array = "array"
+ c_map = "map"
+ }
+ field_value = [
+ {
+ rule_type = NOT_NULL
+ equals_to = [
+ null, "AAA", false, 1, 1, 333, 323232, 3.1, 9.33333, 99999.99999999, "2012-12-21", "2012-12-21T12:34:56", "12:34:56",
+ "bWlJWmo=",
+ [0, 1, 2],
+ { k0 = v0 }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Assert Sink Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [Improve] 1.Support check the number of rows ([2844](https://github.com/apache/seatunnel/pull/2844)) ([3031](https://github.com/apache/seatunnel/pull/3031)):
+ - check rows not empty
+ - check minimum number of rows
+ - check maximum number of rows
+- [Improve] 2.Support direct define of data values(row) ([2844](https://github.com/apache/seatunnel/pull/2844)) ([3031](https://github.com/apache/seatunnel/pull/3031))
+- [Improve] 3.Support setting parallelism as 1 ([2844](https://github.com/apache/seatunnel/pull/2844)) ([3031](https://github.com/apache/seatunnel/pull/3031))
+
diff --git a/docs/zh/connector-v2/sink/Cassandra.md b/docs/zh/connector-v2/sink/Cassandra.md
new file mode 100644
index 00000000000..73c6d3aba55
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Cassandra.md
@@ -0,0 +1,95 @@
+# Cassandra
+
+> Cassandra sink connector
+
+## Description
+
+Write data to Apache Cassandra.
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-------------------|---------|----------|---------------|
+| host | String | Yes | - |
+| keyspace | String | Yes | - |
+| table | String | Yes | - |
+| username | String | No | - |
+| password | String | No | - |
+| datacenter | String | No | datacenter1 |
+| consistency_level | String | No | LOCAL_ONE |
+| fields | String | No | LOCAL_ONE |
+| batch_size | int | No | 5000 |
+| batch_type | String | No | UNLOGGED |
+| async_write | boolean | No | true |
+
+### host [string]
+
+`Cassandra` cluster address, the format is `host:port` , allowing multiple `hosts` to be specified. Such as
+`"cassandra1:9042,cassandra2:9042"`.
+
+### keyspace [string]
+
+The `Cassandra` keyspace.
+
+### table [String]
+
+The `Cassandra` table name.
+
+### username [string]
+
+`Cassandra` user username.
+
+### password [string]
+
+`Cassandra` user password.
+
+### datacenter [String]
+
+The `Cassandra` datacenter, default is `datacenter1`.
+
+### consistency_level [String]
+
+The `Cassandra` write consistency level, default is `LOCAL_ONE`.
+
+### fields [array]
+
+The data field that needs to be output to `Cassandra` , if not configured, it will be automatically adapted
+according to the sink table `schema`.
+
+### batch_size [number]
+
+The number of rows written through [Cassandra-Java-Driver](https://github.com/datastax/java-driver) each time,
+default is `5000`.
+
+### batch_type [String]
+
+The `Cassandra` batch processing mode, default is `UNLOGGER`.
+
+### async_write [boolean]
+
+Whether `cassandra` writes in asynchronous mode, default is `true`.
+
+## Examples
+
+```hocon
+sink {
+ Cassandra {
+ host = "localhost:9042"
+ username = "cassandra"
+ password = "cassandra"
+ datacenter = "datacenter1"
+ keyspace = "test"
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Cassandra Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/Clickhouse.md b/docs/zh/connector-v2/sink/Clickhouse.md
new file mode 100644
index 00000000000..3798e2baae3
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Clickhouse.md
@@ -0,0 +1,180 @@
+# Clickhouse
+
+> Clickhouse sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+> The Clickhouse sink plug-in can achieve accuracy once by implementing idempotent writing, and needs to cooperate with aggregatingmergetree and other engines that support deduplication.
+
+## Description
+
+Used to write data to Clickhouse.
+
+## Supported DataSource Info
+
+In order to use the Clickhouse connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Dependency |
+|------------|--------------------|------------------------------------------------------------------------------------------------------------------|
+| Clickhouse | universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/seatunnel-connectors-v2/connector-clickhouse) |
+
+## Data Type Mapping
+
+| SeaTunnel Data Type | Clickhouse Data Type |
+|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
+| STRING | String / Int128 / UInt128 / Int256 / UInt256 / Point / Ring / Polygon MultiPolygon |
+| INT | Int8 / UInt8 / Int16 / UInt16 / Int32 |
+| BIGINT | UInt64 / Int64 / IntervalYear / IntervalQuarter / IntervalMonth / IntervalWeek / IntervalDay / IntervalHour / IntervalMinute / IntervalSecond |
+| DOUBLE | Float64 |
+| DECIMAL | Decimal |
+| FLOAT | Float32 |
+| DATE | Date |
+| TIME | DateTime |
+| ARRAY | Array |
+| MAP | Map |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|---------------------------------------|---------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| host | String | Yes | - | `ClickHouse` cluster address, the format is `host:port` , allowing multiple `hosts` to be specified. Such as `"host1:8123,host2:8123"`. |
+| database | String | Yes | - | The `ClickHouse` database. |
+| table | String | Yes | - | The table name. |
+| username | String | Yes | - | `ClickHouse` user username. |
+| password | String | Yes | - | `ClickHouse` user password. |
+| clickhouse.config | Map | No | | In addition to the above mandatory parameters that must be specified by `clickhouse-jdbc` , users can also specify multiple optional parameters, which cover all the [parameters](https://github.com/ClickHouse/clickhouse-jdbc/tree/master/clickhouse-client#configuration) provided by `clickhouse-jdbc`. |
+| bulk_size | String | No | 20000 | The number of rows written through [Clickhouse-jdbc](https://github.com/ClickHouse/clickhouse-jdbc) each time, the `default is 20000`. |
+| split_mode | String | No | false | This mode only support clickhouse table which engine is 'Distributed'.And `internal_replication` option-should be `true`.They will split distributed table data in seatunnel and perform write directly on each shard. The shard weight define is clickhouse will counted. |
+| sharding_key | String | No | - | When use split_mode, which node to send data to is a problem, the default is random selection, but the 'sharding_key' parameter can be used to specify the field for the sharding algorithm. This option only worked when 'split_mode' is true. |
+| primary_key | String | No | - | Mark the primary key column from clickhouse table, and based on primary key execute INSERT/UPDATE/DELETE to clickhouse table. |
+| support_upsert | Boolean | No | false | Support upsert row by query primary key. |
+| allow_experimental_lightweight_delete | Boolean | No | false | Allow experimental lightweight delete based on `*MergeTree` table engine. |
+| common-options | | No | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details. |
+
+## How to Create a Clickhouse Data Synchronization Jobs
+
+The following example demonstrates how to create a data synchronization job that writes randomly generated data to a Clickhouse database:
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+ checkpoint.interval = 1000
+}
+
+source {
+ FakeSource {
+ row.num = 2
+ bigint.min = 0
+ bigint.max = 10000000
+ split.num = 1
+ split.read-interval = 300
+ schema {
+ fields {
+ c_bigint = bigint
+ }
+ }
+ }
+}
+
+sink {
+ Clickhouse {
+ host = "127.0.0.1:9092"
+ database = "default"
+ table = "test"
+ username = "xxxxx"
+ password = "xxxxx"
+ }
+}
+```
+
+### Tips
+
+> 1.[SeaTunnel Deployment Document](../../start-v2/locally/deployment.md).
+> 2.The table to be written to needs to be created in advance before synchronization.
+> 3.When sink is writing to the ClickHouse table, you don't need to set its schema because the connector will query ClickHouse for the current table's schema information before writing.
+
+## Clickhouse Sink Config
+
+```hocon
+sink {
+ Clickhouse {
+ host = "localhost:8123"
+ database = "default"
+ table = "fake_all"
+ username = "xxxxx"
+ password = "xxxxx"
+ clickhouse.config = {
+ max_rows_to_read = "100"
+ read_overflow_mode = "throw"
+ }
+ }
+}
+```
+
+## Split Mode
+
+```hocon
+sink {
+ Clickhouse {
+ host = "localhost:8123"
+ database = "default"
+ table = "fake_all"
+ username = "xxxxx"
+ password = "xxxxx"
+
+ # split mode options
+ split_mode = true
+ sharding_key = "age"
+ }
+}
+```
+
+## CDC(Change data capture) Sink
+
+```hocon
+sink {
+ Clickhouse {
+ host = "localhost:8123"
+ database = "default"
+ table = "fake_all"
+ username = "xxxxx"
+ password = "xxxxx"
+
+ # cdc options
+ primary_key = "id"
+ support_upsert = true
+ }
+}
+```
+
+## CDC(Change data capture) for *MergeTree engine
+
+```hocon
+sink {
+ Clickhouse {
+ host = "localhost:8123"
+ database = "default"
+ table = "fake_all"
+ username = "xxxxx"
+ password = "xxxxx"
+
+ # cdc options
+ primary_key = "id"
+ support_upsert = true
+ allow_experimental_lightweight_delete = true
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/ClickhouseFile.md b/docs/zh/connector-v2/sink/ClickhouseFile.md
new file mode 100644
index 00000000000..ebafbc01628
--- /dev/null
+++ b/docs/zh/connector-v2/sink/ClickhouseFile.md
@@ -0,0 +1,147 @@
+# ClickhouseFile
+
+> Clickhouse file sink connector
+
+## Description
+
+Generate the clickhouse data file with the clickhouse-local program, and then send it to the clickhouse
+server, also call bulk load. This connector only support clickhouse table which engine is 'Distributed'.And `internal_replication` option
+should be `true`. Supports Batch and Streaming mode.
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+:::tip
+
+Write data to Clickhouse can also be done using JDBC
+
+:::
+
+## Options
+
+| Name | Type | Required | Default |
+|------------------------|---------|----------|----------------------------------------|
+| host | string | yes | - |
+| database | string | yes | - |
+| table | string | yes | - |
+| username | string | yes | - |
+| password | string | yes | - |
+| clickhouse_local_path | string | yes | - |
+| sharding_key | string | no | - |
+| copy_method | string | no | scp |
+| node_free_password | boolean | no | false |
+| node_pass | list | no | - |
+| node_pass.node_address | string | no | - |
+| node_pass.username | string | no | "root" |
+| node_pass.password | string | no | - |
+| compatible_mode | boolean | no | false |
+| file_fields_delimiter | string | no | "\t" |
+| file_temp_path | string | no | "/tmp/seatunnel/clickhouse-local/file" |
+| common-options | | no | - |
+
+### host [string]
+
+`ClickHouse` cluster address, the format is `host:port` , allowing multiple `hosts` to be specified. Such as `"host1:8123,host2:8123"` .
+
+### database [string]
+
+The `ClickHouse` database
+
+### table [string]
+
+The table name
+
+### username [string]
+
+`ClickHouse` user username
+
+### password [string]
+
+`ClickHouse` user password
+
+### sharding_key [string]
+
+When ClickhouseFile split data, which node to send data to is a problem, the default is random selection, but the
+'sharding_key' parameter can be used to specify the field for the sharding algorithm.
+
+### clickhouse_local_path [string]
+
+The address of the clickhouse-local program on the spark node. Since each task needs to be called,
+clickhouse-local should be located in the same path of each spark node.
+
+### copy_method [string]
+
+Specifies the method used to transfer files, the default is scp, optional scp and rsync
+
+### node_free_password [boolean]
+
+Because seatunnel need to use scp or rsync for file transfer, seatunnel need clickhouse server-side access.
+If each spark node and clickhouse server are configured with password-free login,
+you can configure this option to true, otherwise you need to configure the corresponding node password in the node_pass configuration
+
+### node_pass [list]
+
+Used to save the addresses and corresponding passwords of all clickhouse servers
+
+### node_pass.node_address [string]
+
+The address corresponding to the clickhouse server
+
+### node_pass.username [string]
+
+The username corresponding to the clickhouse server, default root user.
+
+### node_pass.password [string]
+
+The password corresponding to the clickhouse server.
+
+### compatible_mode [boolean]
+
+In the lower version of Clickhouse, the ClickhouseLocal program does not support the `--path` parameter,
+you need to use this mode to take other ways to realize the `--path` parameter function
+
+### file_fields_delimiter [string]
+
+ClickhouseFile uses csv format to temporarily save data. If the data in the row contains the delimiter value
+of csv, it may cause program exceptions.
+Avoid this with this configuration. Value string has to be an exactly one character long
+
+### file_temp_path [string]
+
+The directory where ClickhouseFile stores temporary files locally.
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Examples
+
+```hocon
+ClickhouseFile {
+ host = "192.168.0.1:8123"
+ database = "default"
+ table = "fake_all"
+ username = "default"
+ password = ""
+ clickhouse_local_path = "/Users/seatunnel/Tool/clickhouse local"
+ sharding_key = "age"
+ node_free_password = false
+ node_pass = [{
+ node_address = "192.168.0.1"
+ password = "seatunnel"
+ }]
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Support write data to ClickHouse File and move to ClickHouse data dir
+
+### Next version
+
+- [BugFix] Fix generated data part name conflict and improve file commit logic [3416](https://github.com/apache/seatunnel/pull/3416)
+- [Feature] Support compatible_mode compatible with lower version Clickhouse [3416](https://github.com/apache/seatunnel/pull/3416)
+
diff --git a/docs/zh/connector-v2/sink/Console.md b/docs/zh/connector-v2/sink/Console.md
new file mode 100644
index 00000000000..5d83c810263
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Console.md
@@ -0,0 +1,124 @@
+# Console
+
+> Console sink connector
+
+## Support Connector Version
+
+- All versions
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+Used to send data to Console. Both support streaming and batch mode.
+
+> For example, if the data from upstream is [`age: 12, name: jared`], the content send to console is the following: `{"name":"jared","age":17}`
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|--------------------|---------|----------|---------|-----------------------------------------------------------------------------------------------------|
+| common-options | | No | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+| log.print.data | boolean | No | - | Flag to determine whether data should be printed in the logs. The default value is `true` |
+| log.print.delay.ms | int | No | - | Delay in milliseconds between printing each data item to the logs. The default value is `0`. |
+
+## Task Example
+
+### Simple:
+
+> This is a randomly generated data, written to the console, with a degree of parallelism of 1
+
+```
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+}
+
+source {
+ FakeSource {
+ result_table_name = "fake"
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+}
+
+sink {
+ Console {
+ source_table_name = "fake"
+ }
+}
+```
+
+### Multiple Sources Simple:
+
+> This is a multiple source and you can specify a data source to write to the specified end
+
+```
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+}
+
+source {
+ FakeSource {
+ result_table_name = "fake1"
+ schema = {
+ fields {
+ id = "int"
+ name = "string"
+ age = "int"
+ sex = "string"
+ }
+ }
+ }
+ FakeSource {
+ result_table_name = "fake2"
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+}
+
+sink {
+ Console {
+ source_table_name = "fake1"
+ }
+ Console {
+ source_table_name = "fake2"
+ }
+}
+```
+
+## Console Sample Data
+
+This is a printout from our console
+
+```
+2022-12-19 11:01:45,417 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - output rowType: name, age
+2022-12-19 11:01:46,489 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - subtaskIndex=0 rowIndex=1: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: CpiOd, 8520946
+2022-12-19 11:01:46,490 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - subtaskIndex=0 rowIndex=2: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: eQqTs, 1256802974
+2022-12-19 11:01:46,490 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - subtaskIndex=0 rowIndex=3: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: UsRgO, 2053193072
+2022-12-19 11:01:46,490 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - subtaskIndex=0 rowIndex=4: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: jDQJj, 1993016602
+2022-12-19 11:01:46,490 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - subtaskIndex=0 rowIndex=5: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: rqdKp, 1392682764
+2022-12-19 11:01:46,490 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - subtaskIndex=0 rowIndex=6: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: wCoWN, 986999925
+2022-12-19 11:01:46,490 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - subtaskIndex=0 rowIndex=7: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: qomTU, 72775247
+2022-12-19 11:01:46,490 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - subtaskIndex=0 rowIndex=8: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: jcqXR, 1074529204
+2022-12-19 11:01:46,490 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - subtaskIndex=0 rowIndex=9: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: AkWIO, 1961723427
+2022-12-19 11:01:46,490 INFO org.apache.seatunnel.connectors.seatunnel.console.sink.ConsoleSinkWriter - subtaskIndex=0 rowIndex=10: SeaTunnelRow#tableId=-1 SeaTunnelRow#kind=INSERT: hBoib, 929089763
+```
+
diff --git a/docs/zh/connector-v2/sink/CosFile.md b/docs/zh/connector-v2/sink/CosFile.md
new file mode 100644
index 00000000000..f0d6517a055
--- /dev/null
+++ b/docs/zh/connector-v2/sink/CosFile.md
@@ -0,0 +1,260 @@
+# CosFile
+
+> Cos file sink connector
+
+## Description
+
+Output data to cos file system.
+
+:::tip
+
+If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+
+If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+To use this connector you need put hadoop-cos-{hadoop.version}-{version}.jar and cos_api-bundle-{version}.jar in ${SEATUNNEL_HOME}/lib dir, download: [Hadoop-Cos-release](https://github.com/tencentyun/hadoop-cos/releases). It only supports hadoop version 2.6.5+ and version 8.0.2+.
+
+:::
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+By default, we use 2PC commit to ensure `exactly-once`
+
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|----------------------------------|---------|----------|--------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
+| path | string | yes | - | |
+| tmp_path | string | no | /tmp/seatunnel | The result file will write to a tmp path first and then use `mv` to submit tmp dir to target dir. Need a COS dir. |
+| bucket | string | yes | - | |
+| secret_id | string | yes | - | |
+| secret_key | string | yes | - | |
+| region | string | yes | - | |
+| custom_filename | boolean | no | false | Whether you need custom the filename |
+| file_name_expression | string | no | "${transactionId}" | Only used when custom_filename is true |
+| filename_time_format | string | no | "yyyy.MM.dd" | Only used when custom_filename is true |
+| file_format_type | string | no | "csv" | |
+| field_delimiter | string | no | '\001' | Only used when file_format is text |
+| row_delimiter | string | no | "\n" | Only used when file_format is text |
+| have_partition | boolean | no | false | Whether you need processing partitions. |
+| partition_by | array | no | - | Only used then have_partition is true |
+| partition_dir_expression | string | no | "${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/" | Only used then have_partition is true |
+| is_partition_field_write_in_file | boolean | no | false | Only used then have_partition is true |
+| sink_columns | array | no | | When this parameter is empty, all fields are sink columns |
+| is_enable_transaction | boolean | no | true | |
+| batch_size | int | no | 1000000 | |
+| compress_codec | string | no | none | |
+| common-options | object | no | - | |
+| max_rows_in_memory | int | no | - | Only used when file_format is excel. |
+| sheet_name | string | no | Sheet${Random number} | Only used when file_format is excel. |
+
+### path [string]
+
+The target dir path is required.
+
+### bucket [string]
+
+The bucket address of cos file system, for example: `cosn://seatunnel-test-1259587829`
+
+### secret_id [string]
+
+The secret id of cos file system.
+
+### secret_key [string]
+
+The secret key of cos file system.
+
+### region [string]
+
+The region of cos file system.
+
+### custom_filename [boolean]
+
+Whether custom the filename
+
+### file_name_expression [string]
+
+Only used when `custom_filename` is `true`
+
+`file_name_expression` describes the file expression which will be created into the `path`. We can add the variable `${now}` or `${uuid}` in the `file_name_expression`, like `test_${uuid}_${now}`,
+`${now}` represents the current time, and its format can be defined by specifying the option `filename_time_format`.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+### filename_time_format [string]
+
+Only used when `custom_filename` is `true`
+
+When the format in the `file_name_expression` parameter is `xxxx-${now}` , `filename_time_format` can specify the time format of the path, and the default value is `yyyy.MM.dd` . The commonly used time formats are listed as follows:
+
+| Symbol | Description |
+|--------|--------------------|
+| y | Year |
+| M | Month |
+| d | Day of month |
+| H | Hour in day (0-23) |
+| m | Minute in hour |
+| s | Second in minute |
+
+### file_format_type [string]
+
+We supported as the following file types:
+
+`text` `json` `csv` `orc` `parquet` `excel`
+
+Please note that, The final file name will end with the file_format's suffix, the suffix of the text file is `txt`.
+
+### field_delimiter [string]
+
+The separator between columns in a row of data. Only needed by `text` file format.
+
+### row_delimiter [string]
+
+The separator between rows in a file. Only needed by `text` file format.
+
+### have_partition [boolean]
+
+Whether you need processing partitions.
+
+### partition_by [array]
+
+Only used when `have_partition` is `true`.
+
+Partition data based on selected fields.
+
+### partition_dir_expression [string]
+
+Only used when `have_partition` is `true`.
+
+If the `partition_by` is specified, we will generate the corresponding partition directory based on the partition information, and the final file will be placed in the partition directory.
+
+Default `partition_dir_expression` is `${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/`. `k0` is the first partition field and `v0` is the value of the first partition field.
+
+### is_partition_field_write_in_file [boolean]
+
+Only used when `have_partition` is `true`.
+
+If `is_partition_field_write_in_file` is `true`, the partition field and the value of it will be write into data file.
+
+For example, if you want to write a Hive Data File, Its value should be `false`.
+
+### sink_columns [array]
+
+Which columns need be written to file, default value is all the columns get from `Transform` or `Source`.
+The order of the fields determines the order in which the file is actually written.
+
+### is_enable_transaction [boolean]
+
+If `is_enable_transaction` is true, we will ensure that data will not be lost or duplicated when it is written to the target directory.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+Only support `true` now.
+
+### batch_size [int]
+
+The maximum number of rows in a file. For SeaTunnel Engine, the number of lines in the file is determined by `batch_size` and `checkpoint.interval` jointly decide. If the value of `checkpoint.interval` is large enough, sink writer will write rows in a file until the rows in the file larger than `batch_size`. If `checkpoint.interval` is small, the sink writer will create a new file when a new checkpoint trigger.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc: `lzo` `snappy` `lz4` `zlib` `none`
+- parquet: `lzo` `snappy` `lz4` `gzip` `brotli` `zstd` `none`
+
+Tips: excel type does not support any compression format
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+### max_rows_in_memory [int]
+
+When File Format is Excel,The maximum number of data items that can be cached in the memory.
+
+### sheet_name [string]
+
+Writer the sheet of the workbook
+
+## Example
+
+For text file format with `have_partition` and `custom_filename` and `sink_columns`
+
+```hocon
+
+ CosFile {
+ path="/sink"
+ bucket = "cosn://seatunnel-test-1259587829"
+ secret_id = "xxxxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxxxx"
+ region = "ap-chengdu"
+ file_format_type = "text"
+ field_delimiter = "\t"
+ row_delimiter = "\n"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ custom_filename = true
+ file_name_expression = "${transactionId}_${now}"
+ filename_time_format = "yyyy.MM.dd"
+ sink_columns = ["name","age"]
+ is_enable_transaction = true
+ }
+
+```
+
+For parquet file format with `have_partition` and `sink_columns`
+
+```hocon
+
+ CosFile {
+ path="/sink"
+ bucket = "cosn://seatunnel-test-1259587829"
+ secret_id = "xxxxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxxxx"
+ region = "ap-chengdu"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ file_format_type = "parquet"
+ sink_columns = ["name","age"]
+ }
+
+```
+
+For orc file format simple config
+
+```bash
+
+ CosFile {
+ path="/sink"
+ bucket = "cosn://seatunnel-test-1259587829"
+ secret_id = "xxxxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxxxx"
+ region = "ap-chengdu"
+ file_format_type = "orc"
+ }
+
+```
+
+## Changelog
+
+### next version
+
+- Add file cos sink connector ([4979](https://github.com/apache/seatunnel/pull/4979))
+
diff --git a/docs/zh/connector-v2/sink/DB2.md b/docs/zh/connector-v2/sink/DB2.md
new file mode 100644
index 00000000000..5c3de373063
--- /dev/null
+++ b/docs/zh/connector-v2/sink/DB2.md
@@ -0,0 +1,175 @@
+# DB2
+
+> JDBC DB2 Sink Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+Write data through jdbc. Support Batch mode and Streaming mode, support concurrent writing, support exactly-once
+semantics (using XA transaction guarantee).
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.ibm.db2.jcc/db2jcc) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.ibm.db2.jcc/db2jcc) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [cdc](../../concept/connector-v2-features.md)
+
+> Use `Xa transactions` to ensure `exactly-once`. So only support `exactly-once` for the database which is
+> support `Xa transactions`. You can set `is_exactly_once=true` to enable it.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|--------------------------------|-----------------------------------|-----------------------------------------------------------------------|
+| DB2 | Different dependency version has different driver class. | com.ibm.db2.jdbc.app.DB2Driver | jdbc:db2://127.0.0.1:50000/dbname | [Download](https://mvnrepository.com/artifact/com.ibm.db2.jcc/db2jcc) |
+
+## Data Type Mapping
+
+| DB2 Data Type | SeaTunnel Data Type |
+|------------------------------------------------------------------------------------------------------|---------------------|
+| BOOLEAN | BOOLEAN |
+| SMALLINT | SHORT |
+| INT INTEGER | INTEGER |
+| BIGINT | LONG |
+| DECIMAL DEC NUMERIC NUM | DECIMAL(38,18) |
+| REAL | FLOAT |
+| FLOAT DOUBLE DOUBLE PRECISION DECFLOAT | DOUBLE |
+| CHAR VARCHAR LONG VARCHAR CLOB GRAPHIC VARGRAPHIC LONG VARGRAPHIC DBCLOB | STRING |
+| BLOB | BYTES |
+| DATE | DATE |
+| TIME | TIME |
+| TIMESTAMP | TIMESTAMP |
+| ROWID XML | Not supported yet |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|---------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:db2://127.0.0.1:50000/dbname |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use DB2 the value is `com.ibm.db2.jdbc.app.DB2Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | No | - | Use this sql write upstream input datas to database. e.g `INSERT ...`,`query` have the higher priority |
+| database | String | No | - | Use this `database` and `table-name` auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| table | String | No | - | Use database and this table-name auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| primary_keys | Array | No | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql. |
+| support_upsert_by_query_primary_key_exist | Boolean | No | false | Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE_AFTER) based on query primary key exists. This configuration is only used when database unsupport upsert syntax. **Note**: that this method has low performance |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete. |
+| max_retries | Int | No | 0 | The number of retries to submit failed (executeBatch) |
+| batch_size | Int | No | 1000 | For batch writing, when the number of buffered records reaches the number of `batch_size` or the time reaches `checkpoint.interval` , the data will be flushed into the database |
+| is_exactly_once | Boolean | No | false | Whether to enable exactly-once semantics, which will use Xa transactions. If on, you need to set `xa_data_source_class_name`. |
+| generate_sink_sql | Boolean | No | false | Generate sql statements based on the database table you want to write to |
+| xa_data_source_class_name | String | No | - | The xa data source class name of the database Driver, for example, DB2 is `com.db2.cj.jdbc.Db2XADataSource`, and please refer to appendix for other data sources |
+| max_commit_attempts | Int | No | 3 | The number of retries for transaction commit failures |
+| transaction_timeout_sec | Int | No | -1 | The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect exactly-once semantics |
+| auto_commit | Boolean | No | true | Automatic transaction commit is enabled by default |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | no | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to JDBC Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having two fields, name (string type) and age (int type). The final target table is test_table will also be 16 rows of data in the table. Before run this job, you need create database test and table test_table in your DB2. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ jdbc {
+ url = "jdbc:db2://127.0.0.1:50000/dbname"
+ driver = "com.ibm.db2.jdbc.app.DB2Driver"
+ user = "root"
+ password = "123456"
+ query = "insert into test_table(name,age) values(?,?)"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
+### Generate Sink SQL
+
+> This example not need to write complex sql statements, you can configure the database name table name to automatically generate add statements for you
+
+```
+sink {
+ jdbc {
+ url = "jdbc:db2://127.0.0.1:50000/dbname"
+ driver = "com.ibm.db2.jdbc.app.DB2Driver"
+ user = "root"
+ password = "123456"
+ # Automatically generate sql statements based on database table names
+ generate_sink_sql = true
+ database = test
+ table = test_table
+ }
+}
+```
+
+### Exactly-once :
+
+> For accurate write scene we guarantee accurate once
+
+```
+sink {
+ jdbc {
+ url = "jdbc:db2://127.0.0.1:50000/dbname"
+ driver = "com.ibm.db2.jdbc.app.DB2Driver"
+
+ max_retries = 0
+ user = "root"
+ password = "123456"
+ query = "insert into test_table(name,age) values(?,?)"
+
+ is_exactly_once = "true"
+
+ xa_data_source_class_name = "com.db2.cj.jdbc.Db2XADataSource"
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/Datahub.md b/docs/zh/connector-v2/sink/Datahub.md
new file mode 100644
index 00000000000..c4c1856f923
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Datahub.md
@@ -0,0 +1,79 @@
+# DataHub
+
+> DataHub sink connector
+
+## Description
+
+A sink plugin which use send message to DataHub
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------------|--------|----------|---------------|
+| endpoint | string | yes | - |
+| accessId | string | yes | - |
+| accessKey | string | yes | - |
+| project | string | yes | - |
+| topic | string | yes | - |
+| timeout | int | yes | - |
+| retryTimes | int | yes | - |
+| common-options | | no | - |
+
+### endpoint [string]
+
+your DataHub endpoint start with http (string)
+
+### accessId [string]
+
+your DataHub accessId which cloud be access from Alibaba Cloud (string)
+
+### accessKey[string]
+
+your DataHub accessKey which cloud be access from Alibaba Cloud (string)
+
+### project [string]
+
+your DataHub project which is created in Alibaba Cloud (string)
+
+### topic [string]
+
+your DataHub topic (string)
+
+### timeout [int]
+
+the max connection timeout (int)
+
+### retryTimes [int]
+
+the max retry times when your client put record failed (int)
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+sink {
+ DataHub {
+ endpoint="yourendpoint"
+ accessId="xxx"
+ accessKey="xxx"
+ project="projectname"
+ topic="topicname"
+ timeout=3000
+ retryTimes=3
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add DataHub Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/DingTalk.md b/docs/zh/connector-v2/sink/DingTalk.md
new file mode 100644
index 00000000000..52d896df40a
--- /dev/null
+++ b/docs/zh/connector-v2/sink/DingTalk.md
@@ -0,0 +1,49 @@
+# DingTalk
+
+> DinkTalk sink connector
+
+## Description
+
+A sink plugin which use DingTalk robot send message
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------------|--------|----------|---------------|
+| url | string | yes | - |
+| secret | string | yes | - |
+| common-options | | no | - |
+
+### url [string]
+
+DingTalk robot address format is https://oapi.dingtalk.com/robot/send?access_token=XXXXXX(string)
+
+### secret [string]
+
+DingTalk robot secret (string)
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+sink {
+ DingTalk {
+ url="https://oapi.dingtalk.com/robot/send?access_token=ec646cccd028d978a7156ceeac5b625ebd94f586ea0743fa501c100007890"
+ secret="SEC093249eef7aa57d4388aa635f678930c63db3d28b2829d5b2903fc1e5c10000"
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add DingTalk Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/Doris.md b/docs/zh/connector-v2/sink/Doris.md
new file mode 100644
index 00000000000..7e8d9c6341f
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Doris.md
@@ -0,0 +1,336 @@
+# Doris
+
+> Doris sink connector
+
+## Support Doris Version
+
+- exactly-once & cdc supported `Doris version is >= 1.1.x`
+- Array data type supported `Doris version is >= 1.2.x`
+- Map data type will be support in `Doris version is 2.x`
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to send data to Doris. Both support streaming and batch mode.
+The internal implementation of Doris sink connector is cached and imported by stream load in batches.
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|--------------------------------|---------|----------|------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| fenodes | String | Yes | - | `Doris` cluster fenodes address, the format is `"fe_ip:fe_http_port, ..."` |
+| query-port | int | No | 9030 | `Doris` Fenodes query_port |
+| username | String | Yes | - | `Doris` user username |
+| password | String | Yes | - | `Doris` user password |
+| database | String | Yes | - | The database name of `Doris` table, use `${database_name}` to represent the upstream table name |
+| table | String | Yes | - | The table name of `Doris` table, use `${table_name}` to represent the upstream table name |
+| table.identifier | String | Yes | - | The name of `Doris` table, it will deprecate after version 2.3.5, please use `database` and `table` instead. |
+| sink.label-prefix | String | Yes | - | The label prefix used by stream load imports. In the 2pc scenario, global uniqueness is required to ensure the EOS semantics of SeaTunnel. |
+| sink.enable-2pc | bool | No | false | Whether to enable two-phase commit (2pc), the default is false. For two-phase commit, please refer to [here](https://doris.apache.org/docs/dev/sql-manual/sql-reference/Data-Manipulation-Statements/Load/STREAM-LOAD). |
+| sink.enable-delete | bool | No | - | Whether to enable deletion. This option requires Doris table to enable batch delete function (0.15+ version is enabled by default), and only supports Unique model. you can get more detail at this [link](https://doris.apache.org/docs/dev/data-operate/update-delete/batch-delete-manual) |
+| sink.check-interval | int | No | 10000 | check exception with the interval while loading |
+| sink.max-retries | int | No | 3 | the max retry times if writing records to database failed |
+| sink.buffer-size | int | No | 256 * 1024 | the buffer size to cache data for stream load. |
+| sink.buffer-count | int | No | 3 | the buffer count to cache data for stream load. |
+| doris.batch.size | int | No | 1024 | the batch size of the write to doris each http request, when the row reaches the size or checkpoint is executed, the data of cached will write to server. |
+| needs_unsupported_type_casting | boolean | No | false | Whether to enable the unsupported type casting, such as Decimal64 to Double |
+| schema_save_mode | Enum | no | CREATE_SCHEMA_WHEN_NOT_EXIST | the schema save mode, please refer to `schema_save_mode` below |
+| data_save_mode | Enum | no | APPEND_DATA | the data save mode, please refer to `data_save_mode` below |
+| save_mode_create_template | string | no | see below | see below |
+| custom_sql | String | no | - | When data_save_mode selects CUSTOM_PROCESSING, you should fill in the CUSTOM_SQL parameter. This parameter usually fills in a SQL that can be executed. SQL will be executed before synchronization tasks. |
+| doris.config | map | yes | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql,and supported formats. |
+
+### schema_save_mode[Enum]
+
+Before the synchronous task is turned on, different treatment schemes are selected for the existing surface structure of the target side.
+Option introduction:
+`RECREATE_SCHEMA` :Will create when the table does not exist, delete and rebuild when the table is saved
+`CREATE_SCHEMA_WHEN_NOT_EXIST` :Will Created when the table does not exist, skipped when the table is saved
+`ERROR_WHEN_SCHEMA_NOT_EXIST` :Error will be reported when the table does not exist
+
+### data_save_mode[Enum]
+
+Before the synchronous task is turned on, different processing schemes are selected for data existing data on the target side.
+Option introduction:
+`DROP_DATA`: Preserve database structure and delete data
+`APPEND_DATA`:Preserve database structure, preserve data
+`CUSTOM_PROCESSING`:User defined processing
+`ERROR_WHEN_DATA_EXISTS`:When there is data, an error is reported
+
+### save_mode_create_template
+
+We use templates to automatically create Doris tables,
+which will create corresponding table creation statements based on the type of upstream data and schema type,
+and the default template can be modified according to the situation.
+
+```sql
+CREATE TABLE IF NOT EXISTS `${database}`.`${table_name}`
+(
+ ${rowtype_fields}
+) ENGINE = OLAP UNIQUE KEY (${rowtype_primary_key})
+ DISTRIBUTED BY HASH (${rowtype_primary_key})
+ PROPERTIES
+(
+ "replication_num" = "1"
+);
+```
+
+If a custom field is filled in the template, such as adding an `id` field
+
+```sql
+CREATE TABLE IF NOT EXISTS `${database}`.`${table_name}`
+(
+ id,
+ ${rowtype_fields}
+) ENGINE = OLAP UNIQUE KEY (${rowtype_primary_key})
+ DISTRIBUTED BY HASH (${rowtype_primary_key})
+ PROPERTIES
+(
+ "replication_num" = "1"
+);
+```
+
+The connector will automatically obtain the corresponding type from the upstream to complete the filling,
+and remove the id field from `rowtype_fields`. This method can be used to customize the modification of field types and attributes.
+
+You can use the following placeholders
+
+- database: Used to get the database in the upstream schema
+- table_name: Used to get the table name in the upstream schema
+- rowtype_fields: Used to get all the fields in the upstream schema, we will automatically map to the field
+ description of Doris
+- rowtype_primary_key: Used to get the primary key in the upstream schema (maybe a list)
+- rowtype_unique_key: Used to get the unique key in the upstream schema (maybe a list)
+
+## Data Type Mapping
+
+| Doris Data Type | SeaTunnel Data Type |
+|-----------------|-----------------------------------------|
+| BOOLEAN | BOOLEAN |
+| TINYINT | TINYINT |
+| SMALLINT | SMALLINT TINYINT |
+| INT | INT SMALLINT TINYINT |
+| BIGINT | BIGINT INT SMALLINT TINYINT |
+| LARGEINT | BIGINT INT SMALLINT TINYINT |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE FLOAT |
+| DECIMAL | DECIMAL DOUBLE FLOAT |
+| DATE | DATE |
+| DATETIME | TIMESTAMP |
+| CHAR | STRING |
+| VARCHAR | STRING |
+| STRING | STRING |
+| ARRAY | ARRAY |
+| MAP | MAP |
+| JSON | STRING |
+| HLL | Not supported yet |
+| BITMAP | Not supported yet |
+| QUANTILE_STATE | Not supported yet |
+| STRUCT | Not supported yet |
+
+#### Supported import data formats
+
+The supported formats include CSV and JSON
+
+## Task Example
+
+### Simple:
+
+> The following example describes writing multiple data types to Doris, and users need to create corresponding tables downstream
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+ checkpoint.interval = 10000
+}
+
+source {
+ FakeSource {
+ row.num = 10
+ map.size = 10
+ array.size = 10
+ bytes.length = 10
+ string.length = 10
+ schema = {
+ fields {
+ c_map = "map>"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(16, 1)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+sink {
+ Doris {
+ fenodes = "doris_cdc_e2e:8030"
+ username = root
+ password = ""
+ database = "test"
+ table = "e2e_table_sink"
+ sink.label-prefix = "test-cdc"
+ sink.enable-2pc = "true"
+ sink.enable-delete = "true"
+ doris.config {
+ format = "json"
+ read_json_by_line = "true"
+ }
+ }
+}
+```
+
+### CDC(Change Data Capture) Event:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to Doris Sink,FakeSource simulates CDC data with schema, score (int type),Doris needs to create a table sink named test.e2e_table_sink and a corresponding table for it.
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+ checkpoint.interval = 10000
+}
+
+source {
+ FakeSource {
+ schema = {
+ fields {
+ pk_id = bigint
+ name = string
+ score = int
+ sex = boolean
+ number = tinyint
+ height = float
+ sight = double
+ create_time = date
+ update_time = timestamp
+ }
+ }
+ rows = [
+ {
+ kind = INSERT
+ fields = [1, "A", 100, true, 1, 170.0, 4.3, "2020-02-02", "2020-02-02T02:02:02"]
+ },
+ {
+ kind = INSERT
+ fields = [2, "B", 100, true, 1, 170.0, 4.3, "2020-02-02", "2020-02-02T02:02:02"]
+ },
+ {
+ kind = INSERT
+ fields = [3, "C", 100, true, 1, 170.0, 4.3, "2020-02-02", "2020-02-02T02:02:02"]
+ },
+ {
+ kind = UPDATE_BEFORE
+ fields = [1, "A", 100, true, 1, 170.0, 4.3, "2020-02-02", "2020-02-02T02:02:02"]
+ },
+ {
+ kind = UPDATE_AFTER
+ fields = [1, "A_1", 100, true, 1, 170.0, 4.3, "2020-02-02", "2020-02-02T02:02:02"]
+ },
+ {
+ kind = DELETE
+ fields = [2, "B", 100, true, 1, 170.0, 4.3, "2020-02-02", "2020-02-02T02:02:02"]
+ }
+ ]
+ }
+}
+
+sink {
+ Doris {
+ fenodes = "doris_cdc_e2e:8030"
+ username = root
+ password = ""
+ database = "test"
+ table = "e2e_table_sink"
+ sink.label-prefix = "test-cdc"
+ sink.enable-2pc = "true"
+ sink.enable-delete = "true"
+ doris.config {
+ format = "json"
+ read_json_by_line = "true"
+ }
+ }
+}
+
+```
+
+### Use JSON format to import data
+
+```
+sink {
+ Doris {
+ fenodes = "e2e_dorisdb:8030"
+ username = root
+ password = ""
+ database = "test"
+ table = "e2e_table_sink"
+ sink.enable-2pc = "true"
+ sink.label-prefix = "test_json"
+ doris.config = {
+ format="json"
+ read_json_by_line="true"
+ }
+ }
+}
+
+```
+
+### Use CSV format to import data
+
+```
+sink {
+ Doris {
+ fenodes = "e2e_dorisdb:8030"
+ username = root
+ password = ""
+ database = "test"
+ table = "e2e_table_sink"
+ sink.enable-2pc = "true"
+ sink.label-prefix = "test_csv"
+ doris.config = {
+ format = "csv"
+ column_separator = ","
+ }
+ }
+}
+```
+
+## Changelog
+
+### 2.3.0-beta 2022-10-20
+
+- Add Doris Sink Connector
+
+### Next version
+
+- [Improve] Change Doris Config Prefix [3856](https://github.com/apache/seatunnel/pull/3856)
+
+- [Improve] Refactor some Doris Sink code as well as support 2pc and cdc [4235](https://github.com/apache/seatunnel/pull/4235)
+
+:::tip
+
+PR 4235 is an incompatible modification to PR 3856. Please refer to PR 4235 to use the new Doris connector
+
+:::
diff --git a/docs/zh/connector-v2/sink/Elasticsearch.md b/docs/zh/connector-v2/sink/Elasticsearch.md
new file mode 100644
index 00000000000..af61df22883
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Elasticsearch.md
@@ -0,0 +1,219 @@
+# Elasticsearch
+
+## Description
+
+Output data to `Elasticsearch`.
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+:::tip
+
+Engine Supported
+
+* supported `ElasticSearch version is >= 2.x and <= 8.x`
+
+:::
+
+## Options
+
+| name | type | required | default value |
+|-------------------------|---------|----------|------------------------------|
+| hosts | array | yes | - |
+| index | string | yes | - |
+| schema_save_mode | string | yes | CREATE_SCHEMA_WHEN_NOT_EXIST |
+| data_save_mode | string | yes | APPEND_DATA |
+| index_type | string | no | |
+| primary_keys | list | no | |
+| key_delimiter | string | no | `_` |
+| username | string | no | |
+| password | string | no | |
+| max_retry_count | int | no | 3 |
+| max_batch_size | int | no | 10 |
+| tls_verify_certificate | boolean | no | true |
+| tls_verify_hostnames | boolean | no | true |
+| tls_keystore_path | string | no | - |
+| tls_keystore_password | string | no | - |
+| tls_truststore_path | string | no | - |
+| tls_truststore_password | string | no | - |
+| common-options | | no | - |
+
+### hosts [array]
+
+`Elasticsearch` cluster http address, the format is `host:port` , allowing multiple hosts to be specified. Such as `["host1:9200", "host2:9200"]`.
+
+### index [string]
+
+`Elasticsearch` `index` name.Index support contains variables of field name,such as `seatunnel_${age}`,and the field must appear at seatunnel row.
+If not, we will treat it as a normal index.
+
+### index_type [string]
+
+`Elasticsearch` index type, it is recommended not to specify in elasticsearch 6 and above
+
+### primary_keys [list]
+
+Primary key fields used to generate the document `_id`, this is cdc required options.
+
+### key_delimiter [string]
+
+Delimiter for composite keys ("_" by default), e.g., "$" would result in document `_id` "KEY1$KEY2$KEY3".
+
+### username [string]
+
+x-pack username
+
+### password [string]
+
+x-pack password
+
+### max_retry_count [int]
+
+one bulk request max try size
+
+### max_batch_size [int]
+
+batch bulk doc max size
+
+### tls_verify_certificate [boolean]
+
+Enable certificates validation for HTTPS endpoints
+
+### tls_verify_hostname [boolean]
+
+Enable hostname validation for HTTPS endpoints
+
+### tls_keystore_path [string]
+
+The path to the PEM or JKS key store. This file must be readable by the operating system user running SeaTunnel.
+
+### tls_keystore_password [string]
+
+The key password for the key store specified
+
+### tls_truststore_path [string]
+
+The path to PEM or JKS trust store. This file must be readable by the operating system user running SeaTunnel.
+
+### tls_truststore_password [string]
+
+The key password for the trust store specified
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+### schema_save_mode
+
+Before the synchronous task is turned on, different treatment schemes are selected for the existing surface structure of the target side.
+Option introduction:
+RECREATE_SCHEMA :Will create when the table does not exist, delete and rebuild when the table is saved
+CREATE_SCHEMA_WHEN_NOT_EXIST :Will Created when the table does not exist, skipped when the table is saved
+ERROR_WHEN_SCHEMA_NOT_EXIST :Error will be reported when the table does not exist
+
+### data_save_mode
+
+Before the synchronous task is turned on, different processing schemes are selected for data existing data on the target side.
+Option introduction:
+DROP_DATA: Preserve database structure and delete data
+APPEND_DATA:Preserve database structure, preserve data
+ERROR_WHEN_DATA_EXISTS:When there is data, an error is reported
+
+## Examples
+
+Simple
+
+```bash
+sink {
+ Elasticsearch {
+ hosts = ["localhost:9200"]
+ index = "seatunnel-${age}"
+ }
+}
+```
+
+CDC(Change data capture) event
+
+```bash
+sink {
+ Elasticsearch {
+ hosts = ["localhost:9200"]
+ index = "seatunnel-${age}"
+
+ # cdc required options
+ primary_keys = ["key1", "key2", ...]
+ }
+}
+```
+
+SSL (Disable certificates validation)
+
+```hocon
+sink {
+ Elasticsearch {
+ hosts = ["https://localhost:9200"]
+ username = "elastic"
+ password = "elasticsearch"
+
+ tls_verify_certificate = false
+ }
+}
+```
+
+SSL (Disable hostname validation)
+
+```hocon
+sink {
+ Elasticsearch {
+ hosts = ["https://localhost:9200"]
+ username = "elastic"
+ password = "elasticsearch"
+
+ tls_verify_hostname = false
+ }
+}
+```
+
+SSL (Enable certificates validation)
+
+```hocon
+sink {
+ Elasticsearch {
+ hosts = ["https://localhost:9200"]
+ username = "elastic"
+ password = "elasticsearch"
+
+ tls_keystore_path = "${your elasticsearch home}/config/certs/http.p12"
+ tls_keystore_password = "${your password}"
+ }
+}
+```
+
+SAVE_MODE (Add saveMode function)
+
+```hocon
+sink {
+ Elasticsearch {
+ hosts = ["https://localhost:9200"]
+ username = "elastic"
+ password = "elasticsearch"
+
+ schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
+ data_save_mode = "APPEND_DATA"
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Elasticsearch Sink Connector
+
+### next version
+
+- [Feature] Support CDC write DELETE/UPDATE/INSERT events ([3673](https://github.com/apache/seatunnel/pull/3673))
+- [Feature] Support https protocol & compatible with opensearch ([3997](https://github.com/apache/seatunnel/pull/3997))
+
diff --git a/docs/zh/connector-v2/sink/Email.md b/docs/zh/connector-v2/sink/Email.md
new file mode 100644
index 00000000000..4789884ca31
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Email.md
@@ -0,0 +1,87 @@
+# Email
+
+> Email source connector
+
+## Description
+
+Send the data as a file to email.
+
+The tested email version is 1.5.6.
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|--------------------------|--------|----------|---------------|
+| email_from_address | string | yes | - |
+| email_to_address | string | yes | - |
+| email_host | string | yes | - |
+| email_transport_protocol | string | yes | - |
+| email_smtp_auth | string | yes | - |
+| email_authorization_code | string | yes | - |
+| email_message_headline | string | yes | - |
+| email_message_content | string | yes | - |
+| common-options | | no | - |
+
+### email_from_address [string]
+
+Sender Email Address .
+
+### email_to_address [string]
+
+Address to receive mail.
+
+### email_host [string]
+
+SMTP server to connect to.
+
+### email_transport_protocol [string]
+
+The protocol to load the session .
+
+### email_smtp_auth [string]
+
+Whether to authenticate the customer.
+
+### email_authorization_code [string]
+
+authorization code,You can obtain the authorization code from the mailbox Settings.
+
+### email_message_headline [string]
+
+The subject line of the entire message.
+
+### email_message_content [string]
+
+The body of the entire message.
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+## Example
+
+```bash
+
+ EmailSink {
+ email_from_address = "xxxxxx@qq.com"
+ email_to_address = "xxxxxx@163.com"
+ email_host="smtp.qq.com"
+ email_transport_protocol="smtp"
+ email_smtp_auth="true"
+ email_authorization_code=""
+ email_message_headline=""
+ email_message_content=""
+ }
+
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Email Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/Enterprise-WeChat.md b/docs/zh/connector-v2/sink/Enterprise-WeChat.md
new file mode 100644
index 00000000000..253c91497f8
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Enterprise-WeChat.md
@@ -0,0 +1,75 @@
+# Enterprise WeChat
+
+> Enterprise WeChat sink connector
+
+## Description
+
+A sink plugin which use Enterprise WeChat robot send message
+
+> For example, if the data from upstream is [`"alarmStatus": "firing", "alarmTime": "2022-08-03 01:38:49","alarmContent": "The disk usage exceeds the threshold"`], the output content to WeChat Robot is the following:
+>
+> ```
+> alarmStatus: firing
+> alarmTime: 2022-08-03 01:38:49
+> alarmContent: The disk usage exceeds the threshold
+> ```
+>
+> **Tips: WeChat sink only support `string` webhook and the data from source will be treated as body content in web hook.**
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------|--------|----------|---------------|
+| url | String | Yes | - |
+| mentioned_list | array | No | - |
+| mentioned_mobile_list | array | No | - |
+| common-options | | no | - |
+
+### url [string]
+
+Enterprise WeChat webhook url format is https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXXXX(string)
+
+### mentioned_list [array]
+
+A list of userids to remind the specified members in the group (@ a member), @ all means to remind everyone. If the developer can't get the userid, he can use called_ mobile_ list
+
+### mentioned_mobile_list [array]
+
+Mobile phone number list, remind the group member corresponding to the mobile phone number (@ a member), @ all means remind everyone
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Example
+
+simple:
+
+```hocon
+WeChat {
+ url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa"
+ }
+```
+
+```hocon
+WeChat {
+ url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa"
+ mentioned_list=["wangqing","@all"]
+ mentioned_mobile_list=["13800001111","@all"]
+ }
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Enterprise-WeChat Sink Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [BugFix] Fix Enterprise-WeChat Sink data serialization ([2856](https://github.com/apache/seatunnel/pull/2856))
+
diff --git a/docs/zh/connector-v2/sink/Feishu.md b/docs/zh/connector-v2/sink/Feishu.md
new file mode 100644
index 00000000000..b965d8413f0
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Feishu.md
@@ -0,0 +1,66 @@
+# Feishu
+
+> Feishu sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [cdc](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to launch Feishu web hooks using data.
+
+> For example, if the data from upstream is [`age: 12, name: tyrantlucifer`], the body content is the following: `{"age": 12, "name": "tyrantlucifer"}`
+
+**Tips: Feishu sink only support `post json` webhook and the data from source will be treated as body content in web hook.**
+
+## Data Type Mapping
+
+| Seatunnel Data Type | Feishu Data Type |
+|-----------------------------|------------------|
+| ROW MAP | Json |
+| NULL | null |
+| BOOLEAN | boolean |
+| TINYINT | byte |
+| SMALLINT | short |
+| INT | int |
+| BIGINT | long |
+| FLOAT | float |
+| DOUBLE | double |
+| DECIMAL | BigDecimal |
+| BYTES | byte[] |
+| STRING | String |
+| TIME TIMESTAMP TIME | String |
+| ARRAY | JsonArray |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|----------------|--------|----------|---------|-----------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | Feishu webhook url |
+| headers | Map | No | - | Http request headers |
+| common-options | | no | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+
+## Task Example
+
+### Simple:
+
+```hocon
+Feishu {
+ url = "https://www.feishu.cn/flow/api/trigger-webhook/108bb8f208d9b2378c8c7aedad715c19"
+ }
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Feishu Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/FtpFile.md b/docs/zh/connector-v2/sink/FtpFile.md
new file mode 100644
index 00000000000..cdc3512485e
--- /dev/null
+++ b/docs/zh/connector-v2/sink/FtpFile.md
@@ -0,0 +1,263 @@
+# FtpFile
+
+> Ftp file sink connector
+
+## Description
+
+Output data to Ftp .
+
+:::tip
+
+If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+
+If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+:::
+
+## Key features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+By default, we use 2PC commit to ensure `exactly-once`
+
+- [x] file format
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|----------------------------------|---------|----------|--------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
+| host | string | yes | - | |
+| port | int | yes | - | |
+| username | string | yes | - | |
+| password | string | yes | - | |
+| path | string | yes | - | |
+| tmp_path | string | yes | /tmp/seatunnel | The result file will write to a tmp path first and then use `mv` to submit tmp dir to target dir. Need a FTP dir. |
+| connection_mode | string | no | active_local | The target ftp connection mode |
+| custom_filename | boolean | no | false | Whether you need custom the filename |
+| file_name_expression | string | no | "${transactionId}" | Only used when custom_filename is true |
+| filename_time_format | string | no | "yyyy.MM.dd" | Only used when custom_filename is true |
+| file_format_type | string | no | "csv" | |
+| field_delimiter | string | no | '\001' | Only used when file_format_type is text |
+| row_delimiter | string | no | "\n" | Only used when file_format_type is text |
+| have_partition | boolean | no | false | Whether you need processing partitions. |
+| partition_by | array | no | - | Only used then have_partition is true |
+| partition_dir_expression | string | no | "${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/" | Only used then have_partition is true |
+| is_partition_field_write_in_file | boolean | no | false | Only used then have_partition is true |
+| sink_columns | array | no | | When this parameter is empty, all fields are sink columns |
+| is_enable_transaction | boolean | no | true | |
+| batch_size | int | no | 1000000 | |
+| compress_codec | string | no | none | |
+| common-options | object | no | - | |
+| max_rows_in_memory | int | no | - | Only used when file_format_type is excel. |
+| sheet_name | string | no | Sheet${Random number} | Only used when file_format_type is excel. |
+
+### host [string]
+
+The target ftp host is required
+
+### port [int]
+
+The target ftp port is required
+
+### username [string]
+
+The target ftp username is required
+
+### password [string]
+
+The target ftp password is required
+
+### path [string]
+
+The target dir path is required.
+
+### connection_mode [string]
+
+The target ftp connection mode , default is active mode, supported as the following modes:
+
+`active_local` `passive_local`
+
+### custom_filename [boolean]
+
+Whether custom the filename
+
+### file_name_expression [string]
+
+Only used when `custom_filename` is `true`
+
+`file_name_expression` describes the file expression which will be created into the `path`. We can add the variable `${now}` or `${uuid}` in the `file_name_expression`, like `test_${uuid}_${now}`,
+`${now}` represents the current time, and its format can be defined by specifying the option `filename_time_format`.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+### filename_time_format [string]
+
+Only used when `custom_filename` is `true`
+
+When the format in the `file_name_expression` parameter is `xxxx-${now}` , `filename_time_format` can specify the time format of the path, and the default value is `yyyy.MM.dd` . The commonly used time formats are listed as follows:
+
+| Symbol | Description |
+|--------|--------------------|
+| y | Year |
+| M | Month |
+| d | Day of month |
+| H | Hour in day (0-23) |
+| m | Minute in hour |
+| s | Second in minute |
+
+### file_format_type [string]
+
+We supported as the following file types:
+
+`text` `json` `csv` `orc` `parquet` `excel`
+
+Please note that, The final file name will end with the file_format_type's suffix, the suffix of the text file is `txt`.
+
+### field_delimiter [string]
+
+The separator between columns in a row of data. Only needed by `text` file format.
+
+### row_delimiter [string]
+
+The separator between rows in a file. Only needed by `text` file format.
+
+### have_partition [boolean]
+
+Whether you need processing partitions.
+
+### partition_by [array]
+
+Only used when `have_partition` is `true`.
+
+Partition data based on selected fields.
+
+### partition_dir_expression [string]
+
+Only used when `have_partition` is `true`.
+
+If the `partition_by` is specified, we will generate the corresponding partition directory based on the partition information, and the final file will be placed in the partition directory.
+
+Default `partition_dir_expression` is `${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/`. `k0` is the first partition field and `v0` is the value of the first partition field.
+
+### is_partition_field_write_in_file [boolean]
+
+Only used when `have_partition` is `true`.
+
+If `is_partition_field_write_in_file` is `true`, the partition field and the value of it will be write into data file.
+
+For example, if you want to write a Hive Data File, Its value should be `false`.
+
+### sink_columns [array]
+
+Which columns need be wrote to file, default value is all the columns get from `Transform` or `Source`.
+The order of the fields determines the order in which the file is actually written.
+
+### is_enable_transaction [boolean]
+
+If `is_enable_transaction` is true, we will ensure that data will not be lost or duplicated when it is written to the target directory.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+Only support `true` now.
+
+### batch_size [int]
+
+The maximum number of rows in a file. For SeaTunnel Engine, the number of lines in the file is determined by `batch_size` and `checkpoint.interval` jointly decide. If the value of `checkpoint.interval` is large enough, sink writer will write rows in a file until the rows in the file larger than `batch_size`. If `checkpoint.interval` is small, the sink writer will create a new file when a new checkpoint trigger.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc: `lzo` `snappy` `lz4` `zlib` `none`
+- parquet: `lzo` `snappy` `lz4` `gzip` `brotli` `zstd` `none`
+
+Tips: excel type does not support any compression format
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+### max_rows_in_memory [int]
+
+When File Format is Excel,The maximum number of data items that can be cached in the memory.
+
+### sheet_name [string]
+
+Writer the sheet of the workbook
+
+## Example
+
+For text file format simple config
+
+```bash
+
+FtpFile {
+ host = "xxx.xxx.xxx.xxx"
+ port = 21
+ username = "username"
+ password = "password"
+ path = "/data/ftp"
+ file_format_type = "text"
+ field_delimiter = "\t"
+ row_delimiter = "\n"
+ sink_columns = ["name","age"]
+}
+
+```
+
+For text file format with `have_partition` and `custom_filename` and `sink_columns`
+
+```bash
+
+FtpFile {
+ host = "xxx.xxx.xxx.xxx"
+ port = 21
+ username = "username"
+ password = "password"
+ path = "/data/ftp/seatunnel/job1"
+ tmp_path = "/data/ftp/seatunnel/tmp"
+ file_format_type = "text"
+ field_delimiter = "\t"
+ row_delimiter = "\n"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ custom_filename = true
+ file_name_expression = "${transactionId}_${now}"
+ sink_columns = ["name","age"]
+ filename_time_format = "yyyy.MM.dd"
+}
+
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Ftp File Sink Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [BugFix] Fix the bug of incorrect path in windows environment ([2980](https://github.com/apache/seatunnel/pull/2980))
+- [BugFix] Fix filesystem get error ([3117](https://github.com/apache/seatunnel/pull/3117))
+- [BugFix] Solved the bug of can not parse '\t' as delimiter from config file ([3083](https://github.com/apache/seatunnel/pull/3083))
+
+### Next version
+
+- [BugFix] Fixed the following bugs that failed to write data to files ([3258](https://github.com/apache/seatunnel/pull/3258))
+ - When field from upstream is null it will throw NullPointerException
+ - Sink columns mapping failed
+ - When restore writer from states getting transaction directly failed
+- [Improve] Support setting batch size for every file ([3625](https://github.com/apache/seatunnel/pull/3625))
+- [Improve] Support file compress ([3899](https://github.com/apache/seatunnel/pull/3899))
+
diff --git a/docs/zh/connector-v2/sink/GoogleFirestore.md b/docs/zh/connector-v2/sink/GoogleFirestore.md
new file mode 100644
index 00000000000..cdf6ce2f0c7
--- /dev/null
+++ b/docs/zh/connector-v2/sink/GoogleFirestore.md
@@ -0,0 +1,52 @@
+# GoogleFirestore
+
+> Google Firestore sink connector
+
+## Description
+
+Write data to Google Firestore
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-------------|--------|----------|---------------|
+| project_id | string | yes | - |
+| collection | string | yes | - |
+| credentials | string | no | - |
+
+### project_id [string]
+
+The unique identifier for a Google Firestore database project.
+
+### collection [string]
+
+The collection of Google Firestore.
+
+### credentials [string]
+
+The credentials of Google Cloud service account, use base64 codec. If not set, need to check the `GOOGLE APPLICATION CREDENTIALS` environment exists.
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+## Example
+
+```bash
+GoogleFirestore {
+ project_id = "dummy-project-id",
+ collection = "dummy-collection",
+ credentials = "dummy-credentials"
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Google Firestore Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/Greenplum.md b/docs/zh/connector-v2/sink/Greenplum.md
new file mode 100644
index 00000000000..6d4622b437d
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Greenplum.md
@@ -0,0 +1,42 @@
+# Greenplum
+
+> Greenplum sink connector
+
+## Description
+
+Write data to Greenplum using [Jdbc connector](Jdbc.md).
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+:::tip
+
+Not support exactly-once semantics (XA transaction is not yet supported in Greenplum database).
+
+:::
+
+## Options
+
+### driver [string]
+
+Optional jdbc drivers:
+- `org.postgresql.Driver`
+- `com.pivotal.jdbc.GreenplumDriver`
+
+Warn: for license compliance, if you use `GreenplumDriver` the have to provide Greenplum JDBC driver yourself, e.g. copy greenplum-xxx.jar to $SEATNUNNEL_HOME/lib for Standalone.
+
+### url [string]
+
+The URL of the JDBC connection. if you use postgresql driver the value is `jdbc:postgresql://${yous_host}:${yous_port}/${yous_database}`, or you use greenplum driver the value is `jdbc:pivotal:greenplum://${yous_host}:${yous_port};DatabaseName=${yous_database}`
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Greenplum Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/Hbase.md b/docs/zh/connector-v2/sink/Hbase.md
new file mode 100644
index 00000000000..58c0a16c34c
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Hbase.md
@@ -0,0 +1,122 @@
+# Hbase
+
+> Hbase sink connector
+
+## Description
+
+Output data to Hbase
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|--------------------|---------|----------|-----------------|
+| zookeeper_quorum | string | yes | - |
+| table | string | yes | - |
+| rowkey_column | list | yes | - |
+| family_name | config | yes | - |
+| rowkey_delimiter | string | no | "" |
+| version_column | string | no | - |
+| null_mode | string | no | skip |
+| wal_write | boolean | yes | false |
+| write_buffer_size | string | no | 8 * 1024 * 1024 |
+| encoding | string | no | utf8 |
+| hbase_extra_config | string | no | - |
+| common-options | | no | - |
+
+### zookeeper_quorum [string]
+
+The zookeeper cluster host of hbase, example: "hadoop001:2181,hadoop002:2181,hadoop003:2181"
+
+### table [string]
+
+The table name you want to write, example: "seatunnel"
+
+### rowkey_column [list]
+
+The column name list of row keys, example: ["id", "uuid"]
+
+### family_name [config]
+
+The family name mapping of fields. For example the row from upstream like the following shown:
+
+| id | name | age |
+|----|---------------|-----|
+| 1 | tyrantlucifer | 27 |
+
+id as the row key and other fields written to the different families, you can assign
+
+family_name {
+name = "info1"
+age = "info2"
+}
+
+this means that `name` will be written to the family `info1` and the `age` will be written to the family `info2`
+
+if you want other fields written to the same family, you can assign
+
+family_name {
+all_columns = "info"
+}
+
+this means that all fields will be written to the family `info`
+
+### rowkey_delimiter [string]
+
+The delimiter of joining multi row keys, default `""`
+
+### version_column [string]
+
+The version column name, you can use it to assign timestamp for hbase record
+
+### null_mode [double]
+
+The mode of writing null value, support [`skip`, `empty`], default `skip`
+
+- skip: When the field is null, connector will not write this field to hbase
+- empty: When the field is null, connector will write generate empty value for this field
+
+### wal_write [boolean]
+
+The wal log write flag, default `false`
+
+### write_buffer_size [int]
+
+The write buffer size of hbase client, default `8 * 1024 * 1024`
+
+### encoding [string]
+
+The encoding of string field, support [`utf8`, `gbk`], default `utf8`
+
+### hbase_extra_config [config]
+
+The extra configuration of hbase
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+
+Hbase {
+ zookeeper_quorum = "hadoop001:2181,hadoop002:2181,hadoop003:2181"
+ table = "seatunnel_test"
+ rowkey_column = ["name"]
+ family_name {
+ all_columns = seatunnel
+ }
+}
+
+```
+
+## Changelog
+
+### next version
+
+- Add hbase sink connector ([4049](https://github.com/apache/seatunnel/pull/4049))
+
diff --git a/docs/zh/connector-v2/sink/HdfsFile.md b/docs/zh/connector-v2/sink/HdfsFile.md
new file mode 100644
index 00000000000..535b4fc6cda
--- /dev/null
+++ b/docs/zh/connector-v2/sink/HdfsFile.md
@@ -0,0 +1,200 @@
+# HdfsFile
+
+> HDFS File Sink Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+By default, we use 2PC commit to ensure `exactly-once`
+
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+- [x] compress codec
+ - [x] lzo
+
+## Description
+
+Output data to hdfs file
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions |
+|------------|--------------------|
+| HdfsFile | hadoop 2.x and 3.x |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|----------------------------------|---------|----------|--------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| fs.defaultFS | string | yes | - | The hadoop cluster address that start with `hdfs://`, for example: `hdfs://hadoopcluster` |
+| path | string | yes | - | The target dir path is required. |
+| tmp_path | string | yes | /tmp/seatunnel | The result file will write to a tmp path first and then use `mv` to submit tmp dir to target dir. Need a hdfs path. |
+| hdfs_site_path | string | no | - | The path of `hdfs-site.xml`, used to load ha configuration of namenodes |
+| custom_filename | boolean | no | false | Whether you need custom the filename |
+| file_name_expression | string | no | "${transactionId}" | Only used when `custom_filename` is `true`.`file_name_expression` describes the file expression which will be created into the `path`. We can add the variable `${now}` or `${uuid}` in the `file_name_expression`, like `test_${uuid}_${now}`,`${now}` represents the current time, and its format can be defined by specifying the option `filename_time_format`.Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file. |
+| filename_time_format | string | no | "yyyy.MM.dd" | Only used when `custom_filename` is `true`.When the format in the `file_name_expression` parameter is `xxxx-${now}` , `filename_time_format` can specify the time format of the path, and the default value is `yyyy.MM.dd` . The commonly used time formats are listed as follows:[y:Year,M:Month,d:Day of month,H:Hour in day (0-23),m:Minute in hour,s:Second in minute] |
+| file_format_type | string | no | "csv" | We supported as the following file types:`text` `json` `csv` `orc` `parquet` `excel`.Please note that, The final file name will end with the file_format's suffix, the suffix of the text file is `txt`. |
+| field_delimiter | string | no | '\001' | Only used when file_format is text,The separator between columns in a row of data. Only needed by `text` file format. |
+| row_delimiter | string | no | "\n" | Only used when file_format is text,The separator between rows in a file. Only needed by `text` file format. |
+| have_partition | boolean | no | false | Whether you need processing partitions. |
+| partition_by | array | no | - | Only used then have_partition is true,Partition data based on selected fields. |
+| partition_dir_expression | string | no | "${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/" | Only used then have_partition is true,If the `partition_by` is specified, we will generate the corresponding partition directory based on the partition information, and the final file will be placed in the partition directory. Default `partition_dir_expression` is `${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/`. `k0` is the first partition field and `v0` is the value of the first partition field. |
+| is_partition_field_write_in_file | boolean | no | false | Only used when `have_partition` is `true`. If `is_partition_field_write_in_file` is `true`, the partition field and the value of it will be write into data file.For example, if you want to write a Hive Data File, Its value should be `false`. |
+| sink_columns | array | no | | When this parameter is empty, all fields are sink columns.Which columns need be write to file, default value is all of the columns get from `Transform` or `Source`. The order of the fields determines the order in which the file is actually written. |
+| is_enable_transaction | boolean | no | true | If `is_enable_transaction` is true, we will ensure that data will not be lost or duplicated when it is written to the target directory.Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.Only support `true` now. |
+| batch_size | int | no | 1000000 | The maximum number of rows in a file. For SeaTunnel Engine, the number of lines in the file is determined by `batch_size` and `checkpoint.interval` jointly decide. If the value of `checkpoint.interval` is large enough, sink writer will write rows in a file until the rows in the file larger than `batch_size`. If `checkpoint.interval` is small, the sink writer will create a new file when a new checkpoint trigger. |
+| compress_codec | string | no | none | The compress codec of files and the details that supported as the following shown:[txt: `lzo` `none`,json: `lzo` `none`,csv: `lzo` `none`,orc: `lzo` `snappy` `lz4` `zlib` `none`,parquet: `lzo` `snappy` `lz4` `gzip` `brotli` `zstd` `none`].Tips: excel type does not support any compression format. |
+| krb5_path | string | no | /etc/krb5.conf | The krb5 path of kerberos |
+| kerberos_principal | string | no | - | The principal of kerberos |
+| kerberos_keytab_path | string | no | - | The keytab path of kerberos |
+| compress_codec | string | no | none | compress codec |
+| common-options | object | no | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+| max_rows_in_memory | int | no | - | Only used when file_format is excel.When File Format is Excel,The maximum number of data items that can be cached in the memory. |
+| sheet_name | string | no | Sheet${Random number} | Only used when file_format is excel.Writer the sheet of the workbook |
+
+### Tips
+
+> If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x. If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to Hdfs.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ HdfsFile {
+ fs.defaultFS = "hdfs://hadoopcluster"
+ path = "/tmp/hive/warehouse/test2"
+ file_format_type = "orc"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
+### For orc file format simple config
+
+```
+HdfsFile {
+ fs.defaultFS = "hdfs://hadoopcluster"
+ path = "/tmp/hive/warehouse/test2"
+ file_format_type = "orc"
+}
+```
+
+### For text file format with `have_partition` and `custom_filename` and `sink_columns`
+
+```
+HdfsFile {
+ fs.defaultFS = "hdfs://hadoopcluster"
+ path = "/tmp/hive/warehouse/test2"
+ file_format_type = "text"
+ field_delimiter = "\t"
+ row_delimiter = "\n"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ custom_filename = true
+ file_name_expression = "${transactionId}_${now}"
+ filename_time_format = "yyyy.MM.dd"
+ sink_columns = ["name","age"]
+ is_enable_transaction = true
+}
+```
+
+### For parquet file format with `have_partition` and `custom_filename` and `sink_columns`
+
+```
+HdfsFile {
+ fs.defaultFS = "hdfs://hadoopcluster"
+ path = "/tmp/hive/warehouse/test2"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ custom_filename = true
+ file_name_expression = "${transactionId}_${now}"
+ filename_time_format = "yyyy.MM.dd"
+ file_format_type = "parquet"
+ sink_columns = ["name","age"]
+ is_enable_transaction = true
+}
+```
+
+### For kerberos simple config
+
+```
+HdfsFile {
+ fs.defaultFS = "hdfs://hadoopcluster"
+ path = "/tmp/hive/warehouse/test2"
+ hdfs_site_path = "/path/to/your/hdfs_site_path"
+ kerberos_principal = "your_principal@EXAMPLE.COM"
+ kerberos_keytab_path = "/path/to/your/keytab/file.keytab"
+}
+```
+
+### For compress simple config
+
+```
+HdfsFile {
+ fs.defaultFS = "hdfs://hadoopcluster"
+ path = "/tmp/hive/warehouse/test2"
+ compress_codec = "lzo"
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/Hive.md b/docs/zh/connector-v2/sink/Hive.md
new file mode 100644
index 00000000000..2ede5d07893
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Hive.md
@@ -0,0 +1,185 @@
+# Hive
+
+> Hive sink connector
+
+## Description
+
+Write data to Hive.
+
+:::tip
+
+In order to use this connector, You must ensure your spark/flink cluster already integrated hive. The tested hive version is 2.3.9.
+
+If you use SeaTunnel Engine, You need put seatunnel-hadoop3-3.1.4-uber.jar and hive-exec-2.3.9.jar in $SEATUNNEL_HOME/lib/ dir.
+:::
+
+## Key features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+By default, we use 2PC commit to ensure `exactly-once`
+
+- [x] file format
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+- [x] compress codec
+ - [x] lzo
+
+## Options
+
+| name | type | required | default value |
+|----------------------|--------|----------|----------------|
+| table_name | string | yes | - |
+| metastore_uri | string | yes | - |
+| compress_codec | string | no | none |
+| hdfs_site_path | string | no | - |
+| hive_site_path | string | no | - |
+| krb5_path | string | no | /etc/krb5.conf |
+| kerberos_principal | string | no | - |
+| kerberos_keytab_path | string | no | - |
+| common-options | | no | - |
+
+### table_name [string]
+
+Target Hive table name eg: db1.table1
+
+### metastore_uri [string]
+
+Hive metastore uri
+
+### hdfs_site_path [string]
+
+The path of `hdfs-site.xml`, used to load ha configuration of namenodes
+
+### hive_site_path [string]
+
+### krb5_path [string]
+
+The path of `krb5.conf`, used to authentication kerberos
+
+The path of `hive-site.xml`, used to authentication hive metastore
+
+### kerberos_principal [string]
+
+The principal of kerberos
+
+### kerberos_keytab_path [string]
+
+The keytab path of kerberos
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Example
+
+```bash
+
+ Hive {
+ table_name = "default.seatunnel_orc"
+ metastore_uri = "thrift://namenode001:9083"
+ }
+
+```
+
+### example 1
+
+We have a source table like this:
+
+```bash
+create table test_hive_source(
+ test_tinyint TINYINT,
+ test_smallint SMALLINT,
+ test_int INT,
+ test_bigint BIGINT,
+ test_boolean BOOLEAN,
+ test_float FLOAT,
+ test_double DOUBLE,
+ test_string STRING,
+ test_binary BINARY,
+ test_timestamp TIMESTAMP,
+ test_decimal DECIMAL(8,2),
+ test_char CHAR(64),
+ test_varchar VARCHAR(64),
+ test_date DATE,
+ test_array ARRAY,
+ test_map MAP,
+ test_struct STRUCT
+ )
+PARTITIONED BY (test_par1 STRING, test_par2 STRING);
+
+```
+
+We need read data from the source table and write to another table:
+
+```bash
+create table test_hive_sink_text_simple(
+ test_tinyint TINYINT,
+ test_smallint SMALLINT,
+ test_int INT,
+ test_bigint BIGINT,
+ test_boolean BOOLEAN,
+ test_float FLOAT,
+ test_double DOUBLE,
+ test_string STRING,
+ test_binary BINARY,
+ test_timestamp TIMESTAMP,
+ test_decimal DECIMAL(8,2),
+ test_char CHAR(64),
+ test_varchar VARCHAR(64),
+ test_date DATE
+ )
+PARTITIONED BY (test_par1 STRING, test_par2 STRING);
+
+```
+
+The job config file can like this:
+
+```
+env {
+ parallelism = 3
+ job.name="test_hive_source_to_hive"
+}
+
+source {
+ Hive {
+ table_name = "test_hive.test_hive_source"
+ metastore_uri = "thrift://ctyun7:9083"
+ }
+}
+
+sink {
+ # choose stdout output plugin to output data to console
+
+ Hive {
+ table_name = "test_hive.test_hive_sink_text_simple"
+ metastore_uri = "thrift://ctyun7:9083"
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Hive Sink Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [Improve] Hive Sink supports automatic partition repair ([3133](https://github.com/apache/seatunnel/pull/3133))
+
+### 2.3.0 2022-12-30
+
+- [BugFix] Fixed the following bugs that failed to write data to files ([3258](https://github.com/apache/seatunnel/pull/3258))
+ - When field from upstream is null it will throw NullPointerException
+ - Sink columns mapping failed
+ - When restore writer from states getting transaction directly failed
+
+### Next version
+
+- [Improve] Support kerberos authentication ([3840](https://github.com/apache/seatunnel/pull/3840))
+- [Improve] Added partition_dir_expression validation logic ([3886](https://github.com/apache/seatunnel/pull/3886))
+
diff --git a/docs/zh/connector-v2/sink/Http.md b/docs/zh/connector-v2/sink/Http.md
new file mode 100644
index 00000000000..1eb89af0d00
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Http.md
@@ -0,0 +1,64 @@
+# Http
+
+> Http sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [cdc](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to launch web hooks using data.
+
+> For example, if the data from upstream is [`age: 12, name: tyrantlucifer`], the body content is the following: `{"age": 12, "name": "tyrantlucifer"}`
+
+**Tips: Http sink only support `post json` webhook and the data from source will be treated as body content in web hook.**
+
+## Supported DataSource Info
+
+In order to use the Http connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Dependency |
+|------------|--------------------|------------------------------------------------------------------------------------------------------------|
+| Http | universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/seatunnel-connectors-v2/connector-http) |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-----------------------------|--------|----------|---------|-----------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | Http request url |
+| headers | Map | No | - | Http headers |
+| retry | Int | No | - | The max retry times if request http return to `IOException` |
+| retry_backoff_multiplier_ms | Int | No | 100 | The retry-backoff times(millis) multiplier if request http failed |
+| retry_backoff_max_ms | Int | No | 10000 | The maximum retry-backoff times(millis) if request http failed |
+| connect_timeout_ms | Int | No | 12000 | Connection timeout setting, default 12s. |
+| socket_timeout_ms | Int | No | 60000 | Socket timeout setting, default 60s. |
+| common-options | | No | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+
+## Example
+
+simple:
+
+```hocon
+Http {
+ url = "http://localhost/test/webhook"
+ headers {
+ token = "9e32e859ef044462a257e1fc76730066"
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Http Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/InfluxDB.md b/docs/zh/connector-v2/sink/InfluxDB.md
new file mode 100644
index 00000000000..1dba1fbe4dc
--- /dev/null
+++ b/docs/zh/connector-v2/sink/InfluxDB.md
@@ -0,0 +1,108 @@
+# InfluxDB
+
+> InfluxDB sink connector
+
+## Description
+
+Write data to InfluxDB.
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------------|--------|----------|------------------------------|
+| url | string | yes | - |
+| database | string | yes | |
+| measurement | string | yes | |
+| username | string | no | - |
+| password | string | no | - |
+| key_time | string | no | processing time |
+| key_tags | array | no | exclude `field` & `key_time` |
+| batch_size | int | no | 1024 |
+| max_retries | int | no | - |
+| retry_backoff_multiplier_ms | int | no | - |
+| connect_timeout_ms | long | no | 15000 |
+| common-options | config | no | - |
+
+### url
+
+the url to connect to influxDB e.g.
+
+```
+http://influxdb-host:8086
+```
+
+### database [string]
+
+The name of `influxDB` database
+
+### measurement [string]
+
+The name of `influxDB` measurement
+
+### username [string]
+
+`influxDB` user username
+
+### password [string]
+
+`influxDB` user password
+
+### key_time [string]
+
+Specify field-name of the `influxDB` measurement timestamp in SeaTunnelRow. If not specified, use processing-time as timestamp
+
+### key_tags [array]
+
+Specify field-name of the `influxDB` measurement tags in SeaTunnelRow.
+If not specified, include all fields with `influxDB` measurement field
+
+### batch_size [int]
+
+For batch writing, when the number of buffers reaches the number of `batch_size` or the time reaches `checkpoint.interval`, the data will be flushed into the influxDB
+
+### max_retries [int]
+
+The number of retries to flush failed
+
+### retry_backoff_multiplier_ms [int]
+
+Using as a multiplier for generating the next delay for backoff
+
+### max_retry_backoff_ms [int]
+
+The amount of time to wait before attempting to retry a request to `influxDB`
+
+### connect_timeout_ms [long]
+
+the timeout for connecting to InfluxDB, in milliseconds
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Examples
+
+```hocon
+sink {
+ InfluxDB {
+ url = "http://influxdb-host:8086"
+ database = "test"
+ measurement = "sink"
+ key_time = "time"
+ key_tags = ["label"]
+ batch_size = 1
+ }
+}
+
+```
+
+## Changelog
+
+### next version
+
+- Add InfluxDB Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/IoTDB.md b/docs/zh/connector-v2/sink/IoTDB.md
new file mode 100644
index 00000000000..9cbcd68b8a4
--- /dev/null
+++ b/docs/zh/connector-v2/sink/IoTDB.md
@@ -0,0 +1,221 @@
+# IoTDB
+
+> IoTDB sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+Used to write data to IoTDB.
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/org.apache.iotdb/iotdb-jdbc) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/org.apache.iotdb/iotdb-jdbc) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+IoTDB supports the `exactly-once` feature through idempotent writing. If two pieces of data have
+the same `key` and `timestamp`, the new data will overwrite the old one.
+
+:::tip
+
+There is a conflict of thrift version between IoTDB and Spark.Therefore, you need to execute `rm -f $SPARK_HOME/jars/libthrift*` and `cp $IOTDB_HOME/lib/libthrift* $SPARK_HOME/jars/` to resolve it.
+
+:::
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions | Url |
+|------------|--------------------|----------------|
+| IoTDB | `>= 0.13.0` | localhost:6667 |
+
+## Data Type Mapping
+
+| IotDB Data Type | SeaTunnel Data Type |
+|-----------------|---------------------|
+| BOOLEAN | BOOLEAN |
+| INT32 | TINYINT |
+| INT32 | SMALLINT |
+| INT32 | INT |
+| INT64 | BIGINT |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| TEXT | STRING |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-----------------------------|---------|----------|--------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| node_urls | String | Yes | - | `IoTDB` cluster address, the format is `"host1:port"` or `"host1:port,host2:port"` |
+| username | String | Yes | - | `IoTDB` user username |
+| password | String | Yes | - | `IoTDB` user password |
+| key_device | String | Yes | - | Specify field name of the `IoTDB` deviceId in SeaTunnelRow |
+| key_timestamp | String | No | processing time | Specify field-name of the `IoTDB` timestamp in SeaTunnelRow. If not specified, use processing-time as timestamp |
+| key_measurement_fields | Array | No | exclude `device` & `timestamp` | Specify field-name of the `IoTDB` measurement list in SeaTunnelRow. If not specified, include all fields but exclude `device` & `timestamp` |
+| storage_group | Array | No | - | Specify device storage group(path prefix) example: deviceId = ${storage_group} + "." + ${key_device} |
+| batch_size | Integer | No | 1024 | For batch writing, when the number of buffers reaches the number of `batch_size` or the time reaches `batch_interval_ms`, the data will be flushed into the IoTDB |
+| max_retries | Integer | No | - | The number of retries to flush failed |
+| retry_backoff_multiplier_ms | Integer | No | - | Using as a multiplier for generating the next delay for backoff |
+| max_retry_backoff_ms | Integer | No | - | The amount of time to wait before attempting to retry a request to `IoTDB` |
+| default_thrift_buffer_size | Integer | No | - | Thrift init buffer size in `IoTDB` client |
+| max_thrift_frame_size | Integer | No | - | Thrift max frame size in `IoTDB` client |
+| zone_id | string | No | - | java.time.ZoneId in `IoTDB` client |
+| enable_rpc_compression | Boolean | No | - | Enable rpc compression in `IoTDB` client |
+| connection_timeout_in_ms | Integer | No | - | The maximum time (in ms) to wait when connecting to `IoTDB` |
+| common-options | | no | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+
+## Examples
+
+```hocon
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ row.num = 16
+ bigint.template = [1664035200001]
+ schema = {
+ fields {
+ device_name = "string"
+ temperature = "float"
+ moisture = "int"
+ event_ts = "bigint"
+ c_string = "string"
+ c_boolean = "boolean"
+ c_tinyint = "tinyint"
+ c_smallint = "smallint"
+ c_int = "int"
+ c_bigint = "bigint"
+ c_float = "float"
+ c_double = "double"
+ }
+ }
+ }
+}
+```
+
+Upstream SeaTunnelRow data format is the following:
+
+| device_name | temperature | moisture | event_ts | c_string | c_boolean | c_tinyint | c_smallint | c_int | c_bigint | c_float | c_double |
+|--------------------------|-------------|----------|---------------|----------|-----------|-----------|------------|-------|------------|---------|----------|
+| root.test_group.device_a | 36.1 | 100 | 1664035200001 | abc1 | true | 1 | 1 | 1 | 2147483648 | 1.0 | 1.0 |
+| root.test_group.device_b | 36.2 | 101 | 1664035200001 | abc2 | false | 2 | 2 | 2 | 2147483649 | 2.0 | 2.0 |
+| root.test_group.device_c | 36.3 | 102 | 1664035200001 | abc3 | false | 3 | 3 | 3 | 2147483649 | 3.0 | 3.0 |
+
+### Case1
+
+only fill required config.
+use current processing time as timestamp. and include all fields but exclude `device` & `timestamp` as measurement fields
+
+```hocon
+sink {
+ IoTDB {
+ node_urls = "localhost:6667"
+ username = "root"
+ password = "root"
+ key_device = "device_name" # specify the `deviceId` use device_name field
+ }
+}
+```
+
+Output to `IoTDB` data format is the following:
+
+```shell
+IoTDB> SELECT * FROM root.test_group.* align by device;
++------------------------+------------------------+--------------+-----------+--------------+---------+----------+----------+-----------+------+-----------+--------+---------+
+| Time| Device| temperature| moisture| event_ts| c_string| c_boolean| c_tinyint| c_smallint| c_int| c_bigint| c_float| c_double|
++------------------------+------------------------+--------------+-----------+--------------+---------+----------+----------+-----------+------+-----------+--------+---------+
+|2023-09-01T00:00:00.001Z|root.test_group.device_a| 36.1| 100| 1664035200001| abc1| true| 1| 1| 1| 2147483648| 1.0| 1.0|
+|2023-09-01T00:00:00.001Z|root.test_group.device_b| 36.2| 101| 1664035200001| abc2| false| 2| 2| 2| 2147483649| 2.0| 2.0|
+|2023-09-01T00:00:00.001Z|root.test_group.device_c| 36.3| 102| 1664035200001| abc2| false| 3| 3| 3| 2147483649| 3.0| 3.0|
++------------------------+------------------------+--------------+-----------+--------------+---------+---------+-----------+-----------+------+-----------+--------+---------+
+```
+
+### Case2
+
+use source event's time
+
+```hocon
+sink {
+ IoTDB {
+ node_urls = "localhost:6667"
+ username = "root"
+ password = "root"
+ key_device = "device_name" # specify the `deviceId` use device_name field
+ key_timestamp = "event_ts" # specify the `timestamp` use event_ts field
+ }
+}
+```
+
+Output to `IoTDB` data format is the following:
+
+```shell
+IoTDB> SELECT * FROM root.test_group.* align by device;
++------------------------+------------------------+--------------+-----------+--------------+---------+----------+----------+-----------+------+-----------+--------+---------+
+| Time| Device| temperature| moisture| event_ts| c_string| c_boolean| c_tinyint| c_smallint| c_int| c_bigint| c_float| c_double|
++------------------------+------------------------+--------------+-----------+--------------+---------+----------+----------+-----------+------+-----------+--------+---------+
+|2022-09-25T00:00:00.001Z|root.test_group.device_a| 36.1| 100| 1664035200001| abc1| true| 1| 1| 1| 2147483648| 1.0| 1.0|
+|2022-09-25T00:00:00.001Z|root.test_group.device_b| 36.2| 101| 1664035200001| abc2| false| 2| 2| 2| 2147483649| 2.0| 2.0|
+|2022-09-25T00:00:00.001Z|root.test_group.device_c| 36.3| 102| 1664035200001| abc2| false| 3| 3| 3| 2147483649| 3.0| 3.0|
++------------------------+------------------------+--------------+-----------+--------------+---------+---------+-----------+-----------+------+-----------+--------+---------+
+```
+
+### Case3
+
+use source event's time and limit measurement fields
+
+```hocon
+sink {
+ IoTDB {
+ node_urls = "localhost:6667"
+ username = "root"
+ password = "root"
+ key_device = "device_name"
+ key_timestamp = "event_ts"
+ key_measurement_fields = ["temperature", "moisture"]
+ }
+}
+```
+
+Output to `IoTDB` data format is the following:
+
+```shell
+IoTDB> SELECT * FROM root.test_group.* align by device;
++------------------------+------------------------+--------------+-----------+
+| Time| Device| temperature| moisture|
++------------------------+------------------------+--------------+-----------+
+|2022-09-25T00:00:00.001Z|root.test_group.device_a| 36.1| 100|
+|2022-09-25T00:00:00.001Z|root.test_group.device_b| 36.2| 101|
+|2022-09-25T00:00:00.001Z|root.test_group.device_c| 36.3| 102|
++------------------------+------------------------+--------------+-----------+
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add IoTDB Sink Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [Improve] Improve IoTDB Sink Connector ([2917](https://github.com/apache/seatunnel/pull/2917))
+ - Support align by sql syntax
+ - Support sql split ignore case
+ - Support restore split offset to at-least-once
+ - Support read timestamp from RowRecord
+- [BugFix] Fix IoTDB connector sink NPE ([3080](https://github.com/apache/seatunnel/pull/3080))
+
diff --git a/docs/zh/connector-v2/sink/Jdbc.md b/docs/zh/connector-v2/sink/Jdbc.md
new file mode 100644
index 00000000000..bfe49277eaa
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Jdbc.md
@@ -0,0 +1,348 @@
+# JDBC
+
+> JDBC sink connector
+
+## Description
+
+Write data through jdbc. Support Batch mode and Streaming mode, support concurrent writing, support exactly-once
+semantics (using XA transaction guarantee).
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the jdbc driver jar package has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the jdbc driver jar package has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+Use `Xa transactions` to ensure `exactly-once`. So only support `exactly-once` for the database which is
+support `Xa transactions`. You can set `is_exactly_once=true` to enable it.
+
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+## Options
+
+| Name | Type | Required | Default |
+|-------------------------------------------|---------|----------|------------------------------|
+| url | String | Yes | - |
+| driver | String | Yes | - |
+| user | String | No | - |
+| password | String | No | - |
+| query | String | No | - |
+| compatible_mode | String | No | - |
+| database | String | No | - |
+| table | String | No | - |
+| primary_keys | Array | No | - |
+| support_upsert_by_query_primary_key_exist | Boolean | No | false |
+| connection_check_timeout_sec | Int | No | 30 |
+| max_retries | Int | No | 0 |
+| batch_size | Int | No | 1000 |
+| is_exactly_once | Boolean | No | false |
+| generate_sink_sql | Boolean | No | false |
+| xa_data_source_class_name | String | No | - |
+| max_commit_attempts | Int | No | 3 |
+| transaction_timeout_sec | Int | No | -1 |
+| auto_commit | Boolean | No | true |
+| field_ide | String | No | - |
+| properties | Map | No | - |
+| common-options | | No | - |
+| schema_save_mode | Enum | No | CREATE_SCHEMA_WHEN_NOT_EXIST |
+| data_save_mode | Enum | No | APPEND_DATA |
+| custom_sql | String | No | - |
+| enable_upsert | Boolean | No | true |
+
+### driver [string]
+
+The jdbc class name used to connect to the remote data source, if you use MySQL the value is `com.mysql.cj.jdbc.Driver`.
+
+### user [string]
+
+userName
+
+### password [string]
+
+password
+
+### url [string]
+
+The URL of the JDBC connection. Refer to a case: jdbc:postgresql://localhost/test
+
+### query [string]
+
+Use this sql write upstream input datas to database. e.g `INSERT ...`
+
+### compatible_mode [string]
+
+The compatible mode of database, required when the database supports multiple compatible modes. For example, when using OceanBase database, you need to set it to 'mysql' or 'oracle'.
+
+Postgres 9.5 version or below,please set it to `postgresLow` to support cdc
+
+### database [string]
+
+Use this `database` and `table-name` auto-generate sql and receive upstream input datas write to database.
+
+This option is mutually exclusive with `query` and has a higher priority.
+
+### table [string]
+
+Use `database` and this `table-name` auto-generate sql and receive upstream input datas write to database.
+
+This option is mutually exclusive with `query` and has a higher priority.
+
+The table parameter can fill in the name of an unwilling table, which will eventually be used as the table name of the creation table, and supports variables (`${table_name}`, `${schema_name}`). Replacement rules: `${schema_name}` will replace the SCHEMA name passed to the target side, and `${table_name}` will replace the name of the table passed to the table at the target side.
+
+mysql sink for example:
+1. test_${schema_name}_${table_name}_test
+2. sink_sinktable
+3. ss_${table_name}
+
+pgsql (Oracle Sqlserver ...) Sink for example:
+1. ${schema_name}.${table_name} _test
+2. dbo.tt_${table_name} _sink
+3. public.sink_table
+
+Tip: If the target database has the concept of SCHEMA, the table parameter must be written as `xxx.xxx`
+
+### primary_keys [array]
+
+This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql.
+
+### support_upsert_by_query_primary_key_exist [boolean]
+
+Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE_AFTER) based on query primary key exists. This configuration is only used when database unsupported upsert syntax.
+**Note**: that this method has low performance
+
+### connection_check_timeout_sec [int]
+
+The time in seconds to wait for the database operation used to validate the connection to complete.
+
+### max_retries[int]
+
+The number of retries to submit failed (executeBatch)
+
+### batch_size[int]
+
+For batch writing, when the number of buffered records reaches the number of `batch_size` or the time reaches `checkpoint.interval`
+, the data will be flushed into the database
+
+### is_exactly_once[boolean]
+
+Whether to enable exactly-once semantics, which will use Xa transactions. If on, you need to
+set `xa_data_source_class_name`.
+
+### generate_sink_sql[boolean]
+
+Generate sql statements based on the database table you want to write to
+
+### xa_data_source_class_name[string]
+
+The xa data source class name of the database Driver, for example, mysql is `com.mysql.cj.jdbc.MysqlXADataSource`, and
+please refer to appendix for other data sources
+
+### max_commit_attempts[int]
+
+The number of retries for transaction commit failures
+
+### transaction_timeout_sec[int]
+
+The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect
+exactly-once semantics
+
+### auto_commit [boolean]
+
+Automatic transaction commit is enabled by default
+
+### field_ide [String]
+
+The field "field_ide" is used to identify whether the field needs to be converted to uppercase or lowercase when
+synchronizing from the source to the sink. "ORIGINAL" indicates no conversion is needed, "UPPERCASE" indicates
+conversion to uppercase, and "LOWERCASE" indicates conversion to lowercase.
+
+### properties
+
+Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL.
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+### schema_save_mode [Enum]
+
+Before the synchronous task is turned on, different treatment schemes are selected for the existing surface structure of the target side.
+Option introduction:
+`RECREATE_SCHEMA` :Will create when the table does not exist, delete and rebuild when the table is saved
+`CREATE_SCHEMA_WHEN_NOT_EXIST` :Will Created when the table does not exist, skipped when the table is saved
+`ERROR_WHEN_SCHEMA_NOT_EXIST` :Error will be reported when the table does not exist
+
+### data_save_mode [Enum]
+
+Before the synchronous task is turned on, different processing schemes are selected for data existing data on the target side.
+Option introduction:
+`DROP_DATA`: Preserve database structure and delete data
+`APPEND_DATA`:Preserve database structure, preserve data
+`CUSTOM_PROCESSING`:User defined processing
+`ERROR_WHEN_DATA_EXISTS`:When there is data, an error is reported
+
+### custom_sql [String]
+
+When data_save_mode selects CUSTOM_PROCESSING, you should fill in the CUSTOM_SQL parameter. This parameter usually fills in a SQL that can be executed. SQL will be executed before synchronization tasks.
+
+### enable_upsert [boolean]
+
+Enable upsert by primary_keys exist, If the task has no key duplicate data, setting this parameter to `false` can speed up data import
+
+## tips
+
+In the case of is_exactly_once = "true", Xa transactions are used. This requires database support, and some databases require some setup :
+1 postgres needs to set `max_prepared_transactions > 1` such as `ALTER SYSTEM set max_prepared_transactions to 10`.
+2 mysql version need >= `8.0.29` and Non-root users need to grant `XA_RECOVER_ADMIN` permissions. such as `grant XA_RECOVER_ADMIN on test_db.* to 'user1'@'%'`.
+3 mysql can try to add `rewriteBatchedStatements=true` parameter in url for better performance.
+
+## appendix
+
+there are some reference value for params above.
+
+| datasource | driver | url | xa_data_source_class_name | maven |
+|------------|----------------------------------------------|--------------------------------------------------------------------|----------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
+| MySQL | com.mysql.cj.jdbc.Driver | jdbc:mysql://localhost:3306/test | com.mysql.cj.jdbc.MysqlXADataSource | https://mvnrepository.com/artifact/mysql/mysql-connector-java |
+| PostgreSQL | org.postgresql.Driver | jdbc:postgresql://localhost:5432/postgres | org.postgresql.xa.PGXADataSource | https://mvnrepository.com/artifact/org.postgresql/postgresql |
+| DM | dm.jdbc.driver.DmDriver | jdbc:dm://localhost:5236 | dm.jdbc.driver.DmdbXADataSource | https://mvnrepository.com/artifact/com.dameng/DmJdbcDriver18 |
+| Phoenix | org.apache.phoenix.queryserver.client.Driver | jdbc:phoenix:thin:url=http://localhost:8765;serialization=PROTOBUF | / | https://mvnrepository.com/artifact/com.aliyun.phoenix/ali-phoenix-shaded-thin-client |
+| SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://localhost:1433 | com.microsoft.sqlserver.jdbc.SQLServerXADataSource | https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc |
+| Oracle | oracle.jdbc.OracleDriver | jdbc:oracle:thin:@localhost:1521/xepdb1 | oracle.jdbc.xa.OracleXADataSource | https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 |
+| sqlite | org.sqlite.JDBC | jdbc:sqlite:test.db | / | https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc |
+| GBase8a | com.gbase.jdbc.Driver | jdbc:gbase://e2e_gbase8aDb:5258/test | / | https://www.gbase8.cn/wp-content/uploads/2020/10/gbase-connector-java-8.3.81.53-build55.5.7-bin_min_mix.jar |
+| StarRocks | com.mysql.cj.jdbc.Driver | jdbc:mysql://localhost:3306/test | / | https://mvnrepository.com/artifact/mysql/mysql-connector-java |
+| db2 | com.ibm.db2.jcc.DB2Driver | jdbc:db2://localhost:50000/testdb | com.ibm.db2.jcc.DB2XADataSource | https://mvnrepository.com/artifact/com.ibm.db2.jcc/db2jcc/db2jcc4 |
+| saphana | com.sap.db.jdbc.Driver | jdbc:sap://localhost:39015 | / | https://mvnrepository.com/artifact/com.sap.cloud.db.jdbc/ngdbc |
+| Doris | com.mysql.cj.jdbc.Driver | jdbc:mysql://localhost:3306/test | / | https://mvnrepository.com/artifact/mysql/mysql-connector-java |
+| teradata | com.teradata.jdbc.TeraDriver | jdbc:teradata://localhost/DBS_PORT=1025,DATABASE=test | / | https://mvnrepository.com/artifact/com.teradata.jdbc/terajdbc |
+| Redshift | com.amazon.redshift.jdbc42.Driver | jdbc:redshift://localhost:5439/testdb | com.amazon.redshift.xa.RedshiftXADataSource | https://mvnrepository.com/artifact/com.amazon.redshift/redshift-jdbc42 |
+| Snowflake | net.snowflake.client.jdbc.SnowflakeDriver | jdbc:snowflake://.snowflakecomputing.com | / | https://mvnrepository.com/artifact/net.snowflake/snowflake-jdbc |
+| Vertica | com.vertica.jdbc.Driver | jdbc:vertica://localhost:5433 | / | https://repo1.maven.org/maven2/com/vertica/jdbc/vertica-jdbc/12.0.3-0/vertica-jdbc-12.0.3-0.jar |
+| Kingbase | com.kingbase8.Driver | jdbc:kingbase8://localhost:54321/db_test | / | https://repo1.maven.org/maven2/cn/com/kingbase/kingbase8/8.6.0/kingbase8-8.6.0.jar |
+| OceanBase | com.oceanbase.jdbc.Driver | jdbc:oceanbase://localhost:2881 | / | https://repo1.maven.org/maven2/com/oceanbase/oceanbase-client/2.4.3/oceanbase-client-2.4.3.jar |
+
+## Example
+
+Simple
+
+```
+jdbc {
+ url = "jdbc:mysql://localhost:3306/test"
+ driver = "com.mysql.cj.jdbc.Driver"
+ user = "root"
+ password = "123456"
+ query = "insert into test_table(name,age) values(?,?)"
+}
+
+```
+
+Exactly-once
+
+```
+jdbc {
+
+ url = "jdbc:mysql://localhost:3306/test"
+ driver = "com.mysql.cj.jdbc.Driver"
+
+ max_retries = 0
+ user = "root"
+ password = "123456"
+ query = "insert into test_table(name,age) values(?,?)"
+
+ is_exactly_once = "true"
+
+ xa_data_source_class_name = "com.mysql.cj.jdbc.MysqlXADataSource"
+}
+```
+
+CDC(Change data capture) event
+
+```
+sink {
+ jdbc {
+ url = "jdbc:mysql://localhost:3306"
+ driver = "com.mysql.cj.jdbc.Driver"
+ user = "root"
+ password = "123456"
+
+ database = "sink_database"
+ table = "sink_table"
+ primary_keys = ["key1", "key2", ...]
+ }
+}
+```
+
+Add saveMode function
+
+```
+sink {
+ jdbc {
+ url = "jdbc:mysql://localhost:3306"
+ driver = "com.mysql.cj.jdbc.Driver"
+ user = "root"
+ password = "123456"
+
+ database = "sink_database"
+ table = "sink_table"
+ primary_keys = ["key1", "key2", ...]
+ schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
+ data_save_mode="APPEND_DATA"
+ }
+}
+```
+
+Postgresql 9.5 version below support CDC(Change data capture) event
+
+```
+sink {
+ jdbc {
+ url = "jdbc:postgresql://localhost:5432"
+ driver = "org.postgresql.Driver"
+ user = "root"
+ password = "123456"
+ compatible_mode="postgresLow"
+ database = "sink_database"
+ table = "sink_table"
+ support_upsert_by_query_primary_key_exist = true
+ generate_sink_sql = true
+ primary_keys = ["key1", "key2", ...]
+ }
+}
+
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Console Sink Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [BugFix] Fix JDBC split exception ([2904](https://github.com/apache/seatunnel/pull/2904))
+- [Feature] Support Phoenix JDBC Sink ([2499](https://github.com/apache/seatunnel/pull/2499))
+- [Feature] Support SQL Server JDBC Sink ([2646](https://github.com/apache/seatunnel/pull/2646))
+- [Feature] Support Oracle JDBC Sink ([2550](https://github.com/apache/seatunnel/pull/2550))
+- [Feature] Support StarRocks JDBC Sink ([3060](https://github.com/apache/seatunnel/pull/3060))
+- [Feature] Support DB2 JDBC Sink ([2410](https://github.com/apache/seatunnel/pull/2410))
+
+### next version
+
+- [Feature] Support CDC write DELETE/UPDATE/INSERT events ([3378](https://github.com/apache/seatunnel/issues/3378))
+- [Feature] Support Teradata JDBC Sink ([3362](https://github.com/apache/seatunnel/pull/3362))
+- [Feature] Support Sqlite JDBC Sink ([3089](https://github.com/apache/seatunnel/pull/3089))
+- [Feature] Support CDC write DELETE/UPDATE/INSERT events ([3378](https://github.com/apache/seatunnel/issues/3378))
+- [Feature] Support Doris JDBC Sink
+- [Feature] Support Redshift JDBC Sink([#3615](https://github.com/apache/seatunnel/pull/3615))
+- [Improve] Add config item enable upsert by query([#3708](https://github.com/apache/seatunnel/pull/3708))
+- [Improve] Add database field to sink config([#4199](https://github.com/apache/seatunnel/pull/4199))
+- [Improve] Add Vertica connector([#4303](https://github.com/apache/seatunnel/pull/4303))
+
diff --git a/docs/zh/connector-v2/sink/Kafka.md b/docs/zh/connector-v2/sink/Kafka.md
new file mode 100644
index 00000000000..c28dd6a08ec
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Kafka.md
@@ -0,0 +1,193 @@
+# Kafka
+
+> Kafka sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> Seatunnel Zeta
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [cdc](../../concept/connector-v2-features.md)
+
+> By default, we will use 2pc to guarantee the message is sent to kafka exactly once.
+
+## Description
+
+Write Rows to a Kafka topic.
+
+## Supported DataSource Info
+
+In order to use the Kafka connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Maven |
+|------------|--------------------|-------------------------------------------------------------------------------------------------------------|
+| Kafka | Universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/seatunnel-connectors-v2/connector-kafka) |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|----------------------|--------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| topic | String | Yes | - | When the table is used as sink, the topic name is the topic to write data to. |
+| bootstrap.servers | String | Yes | - | Comma separated list of Kafka brokers. |
+| kafka.config | Map | No | - | In addition to the above parameters that must be specified by the `Kafka producer` client, the user can also specify multiple non-mandatory parameters for the `producer` client, covering [all the producer parameters specified in the official Kafka document](https://kafka.apache.org/documentation.html#producerconfigs). |
+| semantics | String | No | NON | Semantics that can be chosen EXACTLY_ONCE/AT_LEAST_ONCE/NON, default NON. |
+| partition_key_fields | Array | No | - | Configure which fields are used as the key of the kafka message. |
+| partition | Int | No | - | We can specify the partition, all messages will be sent to this partition. |
+| assign_partitions | Array | No | - | We can decide which partition to send based on the content of the message. The function of this parameter is to distribute information. |
+| transaction_prefix | String | No | - | If semantic is specified as EXACTLY_ONCE, the producer will write all messages in a Kafka transaction,kafka distinguishes different transactions by different transactionId. This parameter is prefix of kafka transactionId, make sure different job use different prefix. |
+| format | String | No | json | Data format. The default format is json. Optional text format, canal-json, debezium-json and avro.If you use json or text format. The default field separator is ", ". If you customize the delimiter, add the "field_delimiter" option.If you use canal format, please refer to [canal-json](../formats/canal-json.md) for details.If you use debezium format, please refer to [debezium-json](../formats/debezium-json.md) for details. |
+| field_delimiter | String | No | , | Customize the field delimiter for data format. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Parameter Interpretation
+
+### Topic Formats
+
+Currently two formats are supported:
+
+1. Fill in the name of the topic.
+
+2. Use value of a field from upstream data as topic,the format is `${your field name}`, where topic is the value of one of the columns of the upstream data.
+
+ For example, Upstream data is the following:
+
+| name | age | data |
+|------|-----|---------------|
+| Jack | 16 | data-example1 |
+| Mary | 23 | data-example2 |
+
+If `${name}` is set as the topic. So the first row is sent to Jack topic, and the second row is sent to Mary topic.
+
+### Semantics
+
+In EXACTLY_ONCE, producer will write all messages in a Kafka transaction that will be committed to Kafka on a checkpoint.
+In AT_LEAST_ONCE, producer will wait for all outstanding messages in the Kafka buffers to be acknowledged by the Kafka producer on a checkpoint.
+NON does not provide any guarantees: messages may be lost in case of issues on the Kafka broker and messages may be duplicated.
+
+### Partition Key Fields
+
+For example, if you want to use value of fields from upstream data as key, you can assign field names to this property.
+
+Upstream data is the following:
+
+| name | age | data |
+|------|-----|---------------|
+| Jack | 16 | data-example1 |
+| Mary | 23 | data-example2 |
+
+If name is set as the key, then the hash value of the name column will determine which partition the message is sent to.
+If not set partition key fields, the null message key will be sent to.
+The format of the message key is json, If name is set as the key, for example '{"name":"Jack"}'.
+The selected field must be an existing field in the upstream.
+
+### Assign Partitions
+
+For example, there are five partitions in total, and the assign_partitions field in config is as follows:
+assign_partitions = ["shoe", "clothing"]
+Then the message containing "shoe" will be sent to partition zero ,because "shoe" is subscribed as zero in assign_partitions, and the message containing "clothing" will be sent to partition one.For other messages, the hash algorithm will be used to divide them into the remaining partitions.
+This function by `MessageContentPartitioner` class implements `org.apache.kafka.clients.producer.Partitioner` interface.If we need custom partitions, we need to implement this interface as well.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to Kafka Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having two fields, name (string type) and age (int type). The final target topic is test_topic will also be 16 rows of data in the topic. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```hocon
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+}
+
+sink {
+ kafka {
+ topic = "test_topic"
+ bootstrap.servers = "localhost:9092"
+ format = json
+ kafka.request.timeout.ms = 60000
+ semantics = EXACTLY_ONCE
+ kafka.config = {
+ acks = "all"
+ request.timeout.ms = 60000
+ buffer.memory = 33554432
+ }
+ }
+}
+```
+
+### AWS MSK SASL/SCRAM
+
+Replace the following `${username}` and `${password}` with the configuration values in AWS MSK.
+
+```hocon
+sink {
+ kafka {
+ topic = "seatunnel"
+ bootstrap.servers = "localhost:9092"
+ format = json
+ kafka.request.timeout.ms = 60000
+ semantics = EXACTLY_ONCE
+ kafka.config = {
+ security.protocol=SASL_SSL
+ sasl.mechanism=SCRAM-SHA-512
+ sasl.jaas.config="org.apache.kafka.common.security.scram.ScramLoginModule required \nusername=${username}\npassword=${password};"
+ }
+ }
+}
+```
+
+### AWS MSK IAM
+
+Download `aws-msk-iam-auth-1.1.5.jar` from https://github.com/aws/aws-msk-iam-auth/releases and put it in `$SEATUNNEL_HOME/plugin/kafka/lib` dir.
+
+Please ensure the IAM policy have `"kafka-cluster:Connect",`. Like this:
+
+```hocon
+"Effect": "Allow",
+"Action": [
+ "kafka-cluster:Connect",
+ "kafka-cluster:AlterCluster",
+ "kafka-cluster:DescribeCluster"
+],
+```
+
+Sink Config
+
+```hocon
+sink {
+ kafka {
+ topic = "seatunnel"
+ bootstrap.servers = "localhost:9092"
+ format = json
+ kafka.request.timeout.ms = 60000
+ semantics = EXACTLY_ONCE
+ kafka.config = {
+ security.protocol=SASL_SSL
+ sasl.mechanism=AWS_MSK_IAM
+ sasl.jaas.config="software.amazon.msk.auth.iam.IAMLoginModule required;"
+ sasl.client.callback.handler.class="software.amazon.msk.auth.iam.IAMClientCallbackHandler"
+ }
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/Kingbase.md b/docs/zh/connector-v2/sink/Kingbase.md
new file mode 100644
index 00000000000..361ca9a728d
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Kingbase.md
@@ -0,0 +1,168 @@
+# Kingbase
+
+> JDBC Kingbase Sink Connector
+
+## Support Connector Version
+
+- 8.6
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [cdc](../../concept/connector-v2-features.md)
+
+## Description
+
+> Use `Xa transactions` to ensure `exactly-once`. So only support `exactly-once` for the database which is
+> support `Xa transactions`. You can set `is_exactly_once=true` to enable it.Kingbase currently does not support
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|--------------------|----------------------|------------------------------------------|------------------------------------------------------------------------------------------------|
+| Kingbase | 8.6 | com.kingbase8.Driver | jdbc:kingbase8://localhost:54321/db_test | [Download](https://repo1.maven.org/maven2/cn/com/kingbase/kingbase8/8.6.0/kingbase8-8.6.0.jar) |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/'
+> working directory
+> For example: cp kingbase8-8.6.0.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| Kingbase Data Type | SeaTunnel Data Type |
+|----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
+| BOOL | BOOLEAN |
+| INT2 | SHORT |
+| SMALLSERIAL SERIAL INT4 | INT |
+| INT8 BIGSERIAL | BIGINT |
+| FLOAT4 | FLOAT |
+| FLOAT8 | DOUBLE |
+| NUMERIC | DECIMAL((Get the designated column's specified column size), (Gets the designated column's number of digits to right of the decimal point.))) |
+| BPCHAR CHARACTER VARCHAR TEXT | STRING |
+| TIMESTAMP | LOCALDATETIME |
+| TIME | LOCALTIME |
+| DATE | LOCALDATE |
+| Other data type | Not supported yet |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|---------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:db2://127.0.0.1:50000/dbname |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use DB2 the value is `com.ibm.db2.jdbc.app.DB2Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | No | - | Use this sql write upstream input datas to database. e.g `INSERT ...`,`query` have the higher priority |
+| database | String | No | - | Use this `database` and `table-name` auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| table | String | No | - | Use database and this table-name auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| primary_keys | Array | No | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql. |
+| support_upsert_by_query_primary_key_exist | Boolean | No | false | Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE_AFTER) based on query primary key exists. This configuration is only used when database unsupport upsert syntax. **Note**: that this method has low performance |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete. |
+| max_retries | Int | No | 0 | The number of retries to submit failed (executeBatch) |
+| batch_size | Int | No | 1000 | For batch writing, when the number of buffered records reaches the number of `batch_size` or the time reaches `checkpoint.interval` , the data will be flushed into the database |
+| is_exactly_once | Boolean | No | false | Whether to enable exactly-once semantics, which will use Xa transactions. If on, you need to set `xa_data_source_class_name`. Kingbase currently does not support |
+| generate_sink_sql | Boolean | No | false | Generate sql statements based on the database table you want to write to |
+| xa_data_source_class_name | String | No | - | The xa data source class name of the database Driver,Kingbase currently does not support |
+| max_commit_attempts | Int | No | 3 | The number of retries for transaction commit failures |
+| transaction_timeout_sec | Int | No | -1 | The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect exactly-once semantics |
+| auto_commit | Boolean | No | true | Automatic transaction commit is enabled by default |
+| common-options | | no | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+| enable_upsert | Boolean | No | true | Enable upsert by primary_keys exist, If the task has no key duplicate data, setting this parameter to `false` can speed up data import |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed
+> in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends
+> it to JDBC Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having 12 fields. The final target table is test_table will also be 16 rows of data in the table.
+> Before
+> run this job, you need create database test and table test_table in your Kingbase. And if you have not yet installed and
+> deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md)
+> to
+> install and deploy SeaTunnel. And then follow the instructions
+> in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_date = date
+ c_time = time
+ c_timestamp = timestamp
+ }
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ jdbc {
+ url = "jdbc:kingbase8://127.0.0.1:54321/dbname"
+ driver = "com.kingbase8.Driver"
+ user = "root"
+ password = "123456"
+ query = "insert into test_table(c_string,c_boolean,c_tinyint,c_smallint,c_int,c_bigint,c_float,c_double,c_decimal,c_date,c_time,c_timestamp) values(?,?,?,?,?,?,?,?,?,?,?,?)"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
+### Generate Sink SQL
+
+> This example not need to write complex sql statements, you can configure the database name table name to automatically
+> generate add statements for you
+
+```
+sink {
+ jdbc {
+ url = "jdbc:kingbase8://127.0.0.1:54321/dbname"
+ driver = "com.kingbase8.Driver"
+ user = "root"
+ password = "123456"
+ # Automatically generate sql statements based on database table names
+ generate_sink_sql = true
+ database = test
+ table = test_table
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/Kudu.md b/docs/zh/connector-v2/sink/Kudu.md
new file mode 100644
index 00000000000..aa43a72522d
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Kudu.md
@@ -0,0 +1,211 @@
+# Kudu
+
+> Kudu sink connector
+
+## Support Kudu Version
+
+- 1.11.1/1.12.0/1.13.0/1.14.0/1.15.0
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+## Data Type Mapping
+
+| SeaTunnel Data Type | Kudu Data Type |
+|---------------------|--------------------------|
+| BOOLEAN | BOOL |
+| INT | INT8 INT16 INT32 |
+| BIGINT | INT64 |
+| DECIMAL | DECIMAL |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| STRING | STRING |
+| TIMESTAMP | UNIXTIME_MICROS |
+| BYTES | BINARY |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|--------|----------|------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
+| kudu_masters | String | Yes | - | Kudu master address. Separated by ',',such as '192.168.88.110:7051'. |
+| table_name | String | Yes | - | The name of kudu table. |
+| client_worker_count | Int | No | 2 * Runtime.getRuntime().availableProcessors() | Kudu worker count. Default value is twice the current number of cpu cores. |
+| client_default_operation_timeout_ms | Long | No | 30000 | Kudu normal operation time out. |
+| client_default_admin_operation_timeout_ms | Long | No | 30000 | Kudu admin operation time out. |
+| enable_kerberos | Bool | No | false | Kerberos principal enable. |
+| kerberos_principal | String | No | - | Kerberos principal. Note that all zeta nodes require have this file. |
+| kerberos_keytab | String | No | - | Kerberos keytab. Note that all zeta nodes require have this file. |
+| kerberos_krb5conf | String | No | - | Kerberos krb5 conf. Note that all zeta nodes require have this file. |
+| save_mode | String | No | - | Storage mode, support `overwrite` and `append`. |
+| session_flush_mode | String | No | AUTO_FLUSH_SYNC | Kudu flush mode. Default AUTO_FLUSH_SYNC. |
+| batch_size | Int | No | 1024 | The flush max size (includes all append, upsert and delete records), over this number of records, will flush data. The default value is 100 |
+| buffer_flush_interval | Int | No | 10000 | The flush interval mills, over this time, asynchronous threads will flush data. |
+| ignore_not_found | Bool | No | false | If true, ignore all not found rows. |
+| ignore_not_duplicate | Bool | No | false | If true, ignore all dulicate rows. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+## Task Example
+
+### Simple:
+
+> The following example refers to a FakeSource named "kudu" cdc write kudu table "kudu_sink_table"
+
+```hocon
+
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+ source {
+ FakeSource {
+ result_table_name = "kudu"
+ schema = {
+ fields {
+ id = int
+ val_bool = boolean
+ val_int8 = tinyint
+ val_int16 = smallint
+ val_int32 = int
+ val_int64 = bigint
+ val_float = float
+ val_double = double
+ val_decimal = "decimal(16, 1)"
+ val_string = string
+ val_unixtime_micros = timestamp
+ }
+ }
+ rows = [
+ {
+ kind = INSERT
+ fields = [1, true, 1, 2, 3, 4, 4.3,5.3,6.3, "NEW", "2020-02-02T02:02:02"]
+ },
+ {
+ kind = INSERT
+ fields = [2, true, 1, 2, 3, 4, 4.3,5.3,6.3, "NEW", "2020-02-02T02:02:02"]
+ },
+ {
+ kind = INSERT
+ fields = [3, true, 1, 2, 3, 4, 4.3,5.3,6.3, "NEW", "2020-02-02T02:02:02"]
+ },
+ {
+ kind = UPDATE_BEFORE
+ fields = [1, true, 1, 2, 3, 4, 4.3,5.3,6.3, "NEW", "2020-02-02T02:02:02"]
+ },
+ {
+ kind = UPDATE_AFTER
+ fields = [1, true, 2, 2, 3, 4, 4.3,5.3,6.3, "NEW", "2020-02-02T02:02:02"]
+ },
+ {
+ kind = DELETE
+ fields = [2, true, 1, 2, 3, 4, 4.3,5.3,6.3, "NEW", "2020-02-02T02:02:02"]
+ }
+ ]
+ }
+ }
+
+sink {
+ kudu{
+ source_table_name = "kudu"
+ kudu_masters = "kudu-master-cdc:7051"
+ table_name = "kudu_sink_table"
+ enable_kerberos = true
+ kerberos_principal = "xx@xx.COM"
+ kerberos_keytab = "xx.keytab"
+ }
+}
+```
+
+### Multiple Table
+
+```hocon
+env {
+ # You can set engine configuration here
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ tables_configs = [
+ {
+ schema = {
+ table = "kudu_sink_1"
+ fields {
+ id = int
+ val_bool = boolean
+ val_int8 = tinyint
+ val_int16 = smallint
+ val_int32 = int
+ val_int64 = bigint
+ val_float = float
+ val_double = double
+ val_decimal = "decimal(16, 1)"
+ val_string = string
+ val_unixtime_micros = timestamp
+ }
+ }
+ rows = [
+ {
+ kind = INSERT
+ fields = [1, true, 1, 2, 3, 4, 4.3,5.3,6.3, "NEW", "2020-02-02T02:02:02"]
+ }
+ ]
+ },
+ {
+ schema = {
+ table = "kudu_sink_2"
+ fields {
+ id = int
+ val_bool = boolean
+ val_int8 = tinyint
+ val_int16 = smallint
+ val_int32 = int
+ val_int64 = bigint
+ val_float = float
+ val_double = double
+ val_decimal = "decimal(16, 1)"
+ val_string = string
+ val_unixtime_micros = timestamp
+ }
+ }
+ rows = [
+ {
+ kind = INSERT
+ fields = [1, true, 1, 2, 3, 4, 4.3,5.3,6.3, "NEW", "2020-02-02T02:02:02"]
+ }
+ ]
+ }
+ ]
+ }
+}
+
+
+sink {
+ kudu{
+ kudu_masters = "kudu-master-multiple:7051"
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Kudu Sink Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [Improve] Kudu Sink Connector Support to upsert row ([2881](https://github.com/apache/seatunnel/pull/2881))
+
+### Next Version
+
+- Change plugin name from `KuduSink` to `Kudu` [3432](https://github.com/apache/seatunnel/pull/3432)
+
diff --git a/docs/zh/connector-v2/sink/LocalFile.md b/docs/zh/connector-v2/sink/LocalFile.md
new file mode 100644
index 00000000000..2f88f0fe720
--- /dev/null
+++ b/docs/zh/connector-v2/sink/LocalFile.md
@@ -0,0 +1,272 @@
+# LocalFile
+
+> Local file sink connector
+
+## Description
+
+Output data to local file.
+
+:::tip
+
+If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+
+If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+:::
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+By default, we use 2PC commit to ensure `exactly-once`
+
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|----------------------------------|---------|----------|--------------------------------------------|---------------------------------------------------------------------------------------------------|
+| path | string | yes | - | |
+| tmp_path | string | no | /tmp/seatunnel | The result file will write to a tmp path first and then use `mv` to submit tmp dir to target dir. |
+| custom_filename | boolean | no | false | Whether you need custom the filename |
+| file_name_expression | string | no | "${transactionId}" | Only used when custom_filename is true |
+| filename_time_format | string | no | "yyyy.MM.dd" | Only used when custom_filename is true |
+| file_format_type | string | no | "csv" | |
+| field_delimiter | string | no | '\001' | Only used when file_format_type is text |
+| row_delimiter | string | no | "\n" | Only used when file_format_type is text |
+| have_partition | boolean | no | false | Whether you need processing partitions. |
+| partition_by | array | no | - | Only used then have_partition is true |
+| partition_dir_expression | string | no | "${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/" | Only used then have_partition is true |
+| is_partition_field_write_in_file | boolean | no | false | Only used then have_partition is true |
+| sink_columns | array | no | | When this parameter is empty, all fields are sink columns |
+| is_enable_transaction | boolean | no | true | |
+| batch_size | int | no | 1000000 | |
+| compress_codec | string | no | none | |
+| common-options | object | no | - | |
+| max_rows_in_memory | int | no | - | Only used when file_format_type is excel. |
+| sheet_name | string | no | Sheet${Random number} | Only used when file_format_type is excel. |
+| enable_header_write | boolean | no | false | Only used when file_format_type is text,csv. false:don't write header,true:write header. |
+
+### path [string]
+
+The target dir path is required, you can inject the upstream CatalogTable into the path by using: `${database_name}`, `${table_name}` and `${schema_name}`.
+
+### custom_filename [boolean]
+
+Whether custom the filename
+
+### file_name_expression [string]
+
+Only used when `custom_filename` is `true`
+
+`file_name_expression` describes the file expression which will be created into the `path`. We can add the variable `${now}` or `${uuid}` in the `file_name_expression`, like `test_${uuid}_${now}`,
+`${now}` represents the current time, and its format can be defined by specifying the option `filename_time_format`.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+### filename_time_format [string]
+
+Only used when `custom_filename` is `true`
+
+When the format in the `file_name_expression` parameter is `xxxx-${now}` , `filename_time_format` can specify the time format of the path, and the default value is `yyyy.MM.dd` . The commonly used time formats are listed as follows:
+
+| Symbol | Description |
+|--------|--------------------|
+| y | Year |
+| M | Month |
+| d | Day of month |
+| H | Hour in day (0-23) |
+| m | Minute in hour |
+| s | Second in minute |
+
+### file_format_type [string]
+
+We supported as the following file types:
+
+`text` `json` `csv` `orc` `parquet` `excel`
+
+Please note that, The final file name will end with the file_format_type's suffix, the suffix of the text file is `txt`.
+
+### field_delimiter [string]
+
+The separator between columns in a row of data. Only needed by `text` file format.
+
+### row_delimiter [string]
+
+The separator between rows in a file. Only needed by `text` file format.
+
+### have_partition [boolean]
+
+Whether you need processing partitions.
+
+### partition_by [array]
+
+Only used when `have_partition` is `true`.
+
+Partition data based on selected fields.
+
+### partition_dir_expression [string]
+
+Only used when `have_partition` is `true`.
+
+If the `partition_by` is specified, we will generate the corresponding partition directory based on the partition information, and the final file will be placed in the partition directory.
+
+Default `partition_dir_expression` is `${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/`. `k0` is the first partition field and `v0` is the value of the first partition field.
+
+### is_partition_field_write_in_file [boolean]
+
+Only used when `have_partition` is `true`.
+
+If `is_partition_field_write_in_file` is `true`, the partition field and the value of it will be write into data file.
+
+For example, if you want to write a Hive Data File, Its value should be `false`.
+
+### sink_columns [array]
+
+Which columns need be write to file, default value is all of the columns get from `Transform` or `Source`.
+The order of the fields determines the order in which the file is actually written.
+
+### is_enable_transaction [boolean]
+
+If `is_enable_transaction` is true, we will ensure that data will not be lost or duplicated when it is written to the target directory.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+Only support `true` now.
+
+### batch_size [int]
+
+The maximum number of rows in a file. For SeaTunnel Engine, the number of lines in the file is determined by `batch_size` and `checkpoint.interval` jointly decide. If the value of `checkpoint.interval` is large enough, sink writer will write rows in a file until the rows in the file larger than `batch_size`. If `checkpoint.interval` is small, the sink writer will create a new file when a new checkpoint trigger.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc: `lzo` `snappy` `lz4` `zlib` `none`
+- parquet: `lzo` `snappy` `lz4` `gzip` `brotli` `zstd` `none`
+
+Tips: excel type does not support any compression format
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+### max_rows_in_memory [int]
+
+When File Format is Excel,The maximum number of data items that can be cached in the memory.
+
+### sheet_name [string]
+
+Writer the sheet of the workbook
+
+### enable_header_write [boolean]
+
+Only used when file_format_type is text,csv.false:don't write header,true:write header.
+
+## Example
+
+For orc file format simple config
+
+```bash
+
+LocalFile {
+ path = "/tmp/hive/warehouse/test2"
+ file_format_type = "orc"
+}
+
+```
+
+For parquet file format with `sink_columns`
+
+```bash
+
+LocalFile {
+ path = "/tmp/hive/warehouse/test2"
+ file_format_type = "parquet"
+ sink_columns = ["name","age"]
+}
+
+```
+
+For text file format with `have_partition` and `custom_filename` and `sink_columns`
+
+```bash
+
+LocalFile {
+ path = "/tmp/hive/warehouse/test2"
+ file_format_type = "text"
+ field_delimiter = "\t"
+ row_delimiter = "\n"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ custom_filename = true
+ file_name_expression = "${transactionId}_${now}"
+ filename_time_format = "yyyy.MM.dd"
+ sink_columns = ["name","age"]
+ is_enable_transaction = true
+}
+
+```
+
+For excel file format with `sheet_name` and `max_rows_in_memory`
+
+```bash
+
+LocalFile {
+ path="/tmp/seatunnel/excel"
+ sheet_name = "Sheet1"
+ max_rows_in_memory = 1024
+ partition_dir_expression="${k0}=${v0}"
+ is_partition_field_write_in_file=true
+ file_name_expression="${transactionId}_${now}"
+ file_format_type="excel"
+ filename_time_format="yyyy.MM.dd"
+ is_enable_transaction=true
+ }
+
+```
+
+For extract source metadata from upstream, you can use `${database_name}`, `${table_name}` and `${schema_name}` in the path.
+
+```bash
+
+LocalFile {
+ path = "/tmp/hive/warehouse/${table_name}"
+ file_format_type = "parquet"
+ sink_columns = ["name","age"]
+}
+
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Local File Sink Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [BugFix] Fix the bug of incorrect path in windows environment ([2980](https://github.com/apache/seatunnel/pull/2980))
+- [BugFix] Fix filesystem get error ([3117](https://github.com/apache/seatunnel/pull/3117))
+- [BugFix] Solved the bug of can not parse '\t' as delimiter from config file ([3083](https://github.com/apache/seatunnel/pull/3083))
+
+### Next version
+
+- [BugFix] Fixed the following bugs that failed to write data to files ([3258](https://github.com/apache/seatunnel/pull/3258))
+ - When field from upstream is null it will throw NullPointerException
+ - Sink columns mapping failed
+ - When restore writer from states getting transaction directly failed
+- [Improve] Support setting batch size for every file ([3625](https://github.com/apache/seatunnel/pull/3625))
+- [Improve] Support file compress ([3899](https://github.com/apache/seatunnel/pull/3899))
+
diff --git a/docs/zh/connector-v2/sink/Maxcompute.md b/docs/zh/connector-v2/sink/Maxcompute.md
new file mode 100644
index 00000000000..362b53be6bc
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Maxcompute.md
@@ -0,0 +1,79 @@
+# Maxcompute
+
+> Maxcompute sink connector
+
+## Description
+
+Used to read data from Maxcompute.
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------------|---------|----------|---------------|
+| accessId | string | yes | - |
+| accesskey | string | yes | - |
+| endpoint | string | yes | - |
+| project | string | yes | - |
+| table_name | string | yes | - |
+| partition_spec | string | no | - |
+| overwrite | boolean | no | false |
+| common-options | string | no | |
+
+### accessId [string]
+
+`accessId` Your Maxcompute accessId which cloud be access from Alibaba Cloud.
+
+### accesskey [string]
+
+`accesskey` Your Maxcompute accessKey which cloud be access from Alibaba Cloud.
+
+### endpoint [string]
+
+`endpoint` Your Maxcompute endpoint start with http.
+
+### project [string]
+
+`project` Your Maxcompute project which is created in Alibaba Cloud.
+
+### table_name [string]
+
+`table_name` Target Maxcompute table name eg: fake.
+
+### partition_spec [string]
+
+`partition_spec` This spec of Maxcompute partition table eg:ds='20220101'.
+
+### overwrite [boolean]
+
+`overwrite` Whether to overwrite the table or partition, default: false.
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+## Examples
+
+```hocon
+sink {
+ Maxcompute {
+ accessId=""
+ accesskey=""
+ endpoint=""
+ project=""
+ table_name=""
+ #partition_spec=""
+ #overwrite = false
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- [Feature] Add Maxcompute Sink Connector([3640](https://github.com/apache/seatunnel/pull/3640))
+
diff --git a/docs/zh/connector-v2/sink/MongoDB.md b/docs/zh/connector-v2/sink/MongoDB.md
new file mode 100644
index 00000000000..e1cfd34ebad
--- /dev/null
+++ b/docs/zh/connector-v2/sink/MongoDB.md
@@ -0,0 +1,235 @@
+# MongoDB
+
+> MongoDB Sink Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+**Tips**
+
+> 1.If you want to use CDC-written features, recommend enable the upsert-enable configuration.
+
+## Description
+
+The MongoDB Connector provides the ability to read and write data from and to MongoDB.
+This document describes how to set up the MongoDB connector to run data writers against MongoDB.
+
+## Supported DataSource Info
+
+In order to use the Mongodb connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Dependency |
+|------------|--------------------|---------------------------------------------------------------------------------------------------------------|
+| MongoDB | universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/seatunnel-connectors-v2/connector-mongodb) |
+
+## Data Type Mapping
+
+The following table lists the field data type mapping from MongoDB BSON type to Seatunnel data type.
+
+| Seatunnel Data Type | MongoDB BSON Type |
+|---------------------|-------------------|
+| STRING | ObjectId |
+| STRING | String |
+| BOOLEAN | Boolean |
+| BINARY | Binary |
+| INTEGER | Int32 |
+| TINYINT | Int32 |
+| SMALLINT | Int32 |
+| BIGINT | Int64 |
+| DOUBLE | Double |
+| FLOAT | Double |
+| DECIMAL | Decimal128 |
+| Date | Date |
+| Timestamp | Timestamp[Date] |
+| ROW | Object |
+| ARRAY | Array |
+
+**Tips**
+
+> 1.When using SeaTunnel to write Date and Timestamp types to MongoDB, both will produce a Date data type in MongoDB, but the precision will be different. The data generated by the SeaTunnel Date type has second-level precision, while the data generated by the SeaTunnel Timestamp type has millisecond-level precision.
+> 2.When using the DECIMAL type in SeaTunnel, be aware that the maximum range cannot exceed 34 digits, which means you should use decimal(34, 18).
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-----------------------|----------|----------|---------|------------------------------------------------------------------------------------------------------------------------------|
+| uri | String | Yes | - | The MongoDB standard connection uri. eg. mongodb://user:password@hosts:27017/database?readPreference=secondary&slaveOk=true. |
+| database | String | Yes | - | The name of MongoDB database to read or write. |
+| collection | String | Yes | - | The name of MongoDB collection to read or write. |
+| schema | String | Yes | - | MongoDB's BSON and seatunnel data structure mapping. |
+| buffer-flush.max-rows | String | No | 1000 | Specifies the maximum number of buffered rows per batch request. |
+| buffer-flush.interval | String | No | 30000 | Specifies the maximum interval of buffered rows per batch request, the unit is millisecond. |
+| retry.max | String | No | 3 | Specifies the max number of retry if writing records to database failed. |
+| retry.interval | Duration | No | 1000 | Specifies the retry time interval if writing records to database failed, the unit is millisecond. |
+| upsert-enable | Boolean | No | false | Whether to write documents via upsert mode. |
+| primary-key | List | No | - | The primary keys for upsert/update. Keys are in `["id","name",...]` format for properties. |
+| transaction | Boolean | No | false | Whether to use transactions in MongoSink (requires MongoDB 4.2+). |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+### Tips
+
+> 1.The data flushing logic of the MongoDB Sink Connector is jointly controlled by three parameters: `buffer-flush.max-rows`, `buffer-flush.interval`, and `checkpoint.interval`.
+> Data flushing will be triggered if any of these conditions are met.
+> 2.Compatible with the historical parameter `upsert-key`. If `upsert-key` is set, please do not set `primary-key`.
+
+## How to Create a MongoDB Data Synchronization Jobs
+
+The following example demonstrates how to create a data synchronization job that writes randomly generated data to a MongoDB database:
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+ checkpoint.interval = 1000
+}
+
+source {
+ FakeSource {
+ row.num = 2
+ bigint.min = 0
+ bigint.max = 10000000
+ split.num = 1
+ split.read-interval = 300
+ schema {
+ fields {
+ c_bigint = bigint
+ }
+ }
+ }
+}
+
+sink {
+ MongoDB{
+ uri = mongodb://user:password@127.0.0.1:27017
+ database = "test"
+ collection = "test"
+ schema = {
+ fields {
+ _id = string
+ c_bigint = bigint
+ }
+ }
+ }
+}
+```
+
+## Parameter Interpretation
+
+### MongoDB Database Connection URI Examples
+
+Unauthenticated single node connection:
+
+```bash
+mongodb://127.0.0.0:27017/mydb
+```
+
+Replica set connection:
+
+```bash
+mongodb://127.0.0.0:27017/mydb?replicaSet=xxx
+```
+
+Authenticated replica set connection:
+
+```bash
+mongodb://admin:password@127.0.0.0:27017/mydb?replicaSet=xxx&authSource=admin
+```
+
+Multi-node replica set connection:
+
+```bash
+mongodb://127.0.0..1:27017,127.0.0..2:27017,127.0.0.3:27017/mydb?replicaSet=xxx
+```
+
+Sharded cluster connection:
+
+```bash
+mongodb://127.0.0.0:27017/mydb
+```
+
+Multiple mongos connections:
+
+```bash
+mongodb://192.168.0.1:27017,192.168.0.2:27017,192.168.0.3:27017/mydb
+```
+
+Note: The username and password in the URI must be URL-encoded before being concatenated into the connection string.
+
+### Buffer Flush
+
+```bash
+sink {
+ MongoDB {
+ uri = "mongodb://user:password@127.0.0.1:27017"
+ database = "test_db"
+ collection = "users"
+ buffer-flush.max-rows = 2000
+ buffer-flush.interval = 1000
+ schema = {
+ fields {
+ _id = string
+ id = bigint
+ status = string
+ }
+ }
+ }
+}
+```
+
+### Why is Not Recommended to Use Transactions for Operation?
+
+Although MongoDB has fully supported multi-document transactions since version 4.2, it doesn't mean that everyone should use them recklessly.
+Transactions are equivalent to locks, node coordination, additional overhead, and performance impact.
+Instead, the principle for using transactions should be: avoid using them if possible.
+The necessity for using transactions can be greatly avoided by designing systems rationally.
+
+### Idempotent Writes
+
+By specifying a clear primary key and using the upsert method, exactly-once write semantics can be achieved.
+
+If `primary-key` and `upsert-enable` is defined in the configuration, the MongoDB sink will use upsert semantics instead of regular INSERT statements. We combine the primary keys declared in upsert-key as the MongoDB reserved primary key and use upsert mode for writing to ensure idempotent writes.
+In the event of a failure, Seatunnel jobs will recover from the last successful checkpoint and reprocess, which may result in duplicate message processing during recovery. It is highly recommended to use upsert mode, as it helps to avoid violating database primary key constraints and generating duplicate data if records need to be reprocessed.
+
+```bash
+sink {
+ MongoDB {
+ uri = "mongodb://user:password@127.0.0.1:27017"
+ database = "test_db"
+ collection = "users"
+ upsert-enable = true
+ primary-key = ["name","status"]
+ schema = {
+ fields {
+ _id = string
+ name = string
+ status = string
+ }
+ }
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta
+
+- Add MongoDB Source Connector
+
+### 2.3.1-release
+
+- [Feature]Refactor mongodb source connector([4620](https://github.com/apache/incubator-seatunnel/pull/4620))
+
+### Next Version
+
+- [Feature]Mongodb support cdc sink([4833](https://github.com/apache/seatunnel/pull/4833))
+
diff --git a/docs/zh/connector-v2/sink/Mysql.md b/docs/zh/connector-v2/sink/Mysql.md
new file mode 100644
index 00000000000..b6c3fd4a9bc
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Mysql.md
@@ -0,0 +1,210 @@
+# MySQL
+
+> JDBC Mysql Sink Connector
+
+## Support Mysql Version
+
+- 5.5/5.6/5.7/8.0
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+Write data through jdbc. Support Batch mode and Streaming mode, support concurrent writing, support exactly-once
+semantics (using XA transaction guarantee).
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/mysql/mysql-connector-java) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/mysql/mysql-connector-java) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+> Use `Xa transactions` to ensure `exactly-once`. So only support `exactly-once` for the database which is
+> support `Xa transactions`. You can set `is_exactly_once=true` to enable it.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|--------------------------|---------------------------------------|---------------------------------------------------------------------------|
+| Mysql | Different dependency version has different driver class. | com.mysql.cj.jdbc.Driver | jdbc:mysql://localhost:3306:3306/test | [Download](https://mvnrepository.com/artifact/mysql/mysql-connector-java) |
+
+## Data Type Mapping
+
+| Mysql Data Type | SeaTunnel Data Type |
+|-----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| BIT(1) INT UNSIGNED | BOOLEAN |
+| TINYINT TINYINT UNSIGNED SMALLINT SMALLINT UNSIGNED MEDIUMINT MEDIUMINT UNSIGNED INT INTEGER YEAR | INT |
+| INT UNSIGNED INTEGER UNSIGNED BIGINT | BIGINT |
+| BIGINT UNSIGNED | DECIMAL(20,0) |
+| DECIMAL(x,y)(Get the designated column's specified column size.<38) | DECIMAL(x,y) |
+| DECIMAL(x,y)(Get the designated column's specified column size.>38) | DECIMAL(38,18) |
+| DECIMAL UNSIGNED | DECIMAL((Get the designated column's specified column size)+1, (Gets the designated column's number of digits to right of the decimal point.))) |
+| FLOAT FLOAT UNSIGNED | FLOAT |
+| DOUBLE DOUBLE UNSIGNED | DOUBLE |
+| CHAR VARCHAR TINYTEXT MEDIUMTEXT TEXT LONGTEXT JSON | STRING |
+| DATE | DATE |
+| TIME | TIME |
+| DATETIME TIMESTAMP | TIMESTAMP |
+| TINYBLOB MEDIUMBLOB BLOB LONGBLOB BINARY VARBINAR BIT(n) | BYTES |
+| GEOMETRY UNKNOWN | Not supported yet |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|---------|----------|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:mysql://localhost:3306:3306/test |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use MySQL the value is `com.mysql.cj.jdbc.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | No | - | Use this sql write upstream input datas to database. e.g `INSERT ...`,`query` have the higher priority |
+| database | String | No | - | Use this `database` and `table-name` auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| table | String | No | - | Use database and this table-name auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| primary_keys | Array | No | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql. |
+| support_upsert_by_query_primary_key_exist | Boolean | No | false | Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE_AFTER) based on query primary key exists. This configuration is only used when database unsupport upsert syntax. **Note**: that this method has low performance |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete. |
+| max_retries | Int | No | 0 | The number of retries to submit failed (executeBatch) |
+| batch_size | Int | No | 1000 | For batch writing, when the number of buffered records reaches the number of `batch_size` or the time reaches `checkpoint.interval` , the data will be flushed into the database |
+| is_exactly_once | Boolean | No | false | Whether to enable exactly-once semantics, which will use Xa transactions. If on, you need to set `xa_data_source_class_name`. |
+| generate_sink_sql | Boolean | No | false | Generate sql statements based on the database table you want to write to |
+| xa_data_source_class_name | String | No | - | The xa data source class name of the database Driver, for example, mysql is `com.mysql.cj.jdbc.MysqlXADataSource`, and please refer to appendix for other data sources |
+| max_commit_attempts | Int | No | 3 | The number of retries for transaction commit failures |
+| transaction_timeout_sec | Int | No | -1 | The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect exactly-once semantics |
+| auto_commit | Boolean | No | true | Automatic transaction commit is enabled by default |
+| field_ide | String | No | - | Identify whether the field needs to be converted when synchronizing from the source to the sink. `ORIGINAL` indicates no conversion is needed;`UPPERCASE` indicates conversion to uppercase;`LOWERCASE` indicates conversion to lowercase. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | No | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+| schema_save_mode | Enum | No | CREATE_SCHEMA_WHEN_NOT_EXIST | Before the synchronous task is turned on, different treatment schemes are selected for the existing surface structure of the target side. |
+| data_save_mode | Enum | No | APPEND_DATA | Before the synchronous task is turned on, different processing schemes are selected for data existing data on the target side. |
+| custom_sql | String | No | - | When data_save_mode selects CUSTOM_PROCESSING, you should fill in the CUSTOM_SQL parameter. This parameter usually fills in a SQL that can be executed. SQL will be executed before synchronization tasks. |
+| enable_upsert | Boolean | No | true | Enable upsert by primary_keys exist, If the task only has `insert`, setting this parameter to `false` can speed up data import |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to JDBC Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having two fields, name (string type) and age (int type). The final target table is test_table will also be 16 rows of data in the table. Before run this job, you need create database test and table test_table in your mysql. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ jdbc {
+ url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
+ driver = "com.mysql.cj.jdbc.Driver"
+ user = "root"
+ password = "123456"
+ query = "insert into test_table(name,age) values(?,?)"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
+### Generate Sink SQL
+
+> This example not need to write complex sql statements, you can configure the database name table name to automatically generate add statements for you
+
+```
+sink {
+ jdbc {
+ url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
+ driver = "com.mysql.cj.jdbc.Driver"
+ user = "root"
+ password = "123456"
+ # Automatically generate sql statements based on database table names
+ generate_sink_sql = true
+ database = test
+ table = test_table
+ }
+}
+```
+
+### Exactly-once :
+
+> For accurate write scene we guarantee accurate once
+
+```
+sink {
+ jdbc {
+ url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
+ driver = "com.mysql.cj.jdbc.Driver"
+
+ max_retries = 0
+ user = "root"
+ password = "123456"
+ query = "insert into test_table(name,age) values(?,?)"
+
+ is_exactly_once = "true"
+
+ xa_data_source_class_name = "com.mysql.cj.jdbc.MysqlXADataSource"
+ }
+}
+```
+
+### CDC(Change Data Capture) Event
+
+> CDC change data is also supported by us In this case, you need config database, table and primary_keys.
+
+```
+sink {
+ jdbc {
+ url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
+ driver = "com.mysql.cj.jdbc.Driver"
+ user = "root"
+ password = "123456"
+
+ generate_sink_sql = true
+ # You need to configure both database and table
+ database = test
+ table = sink_table
+ primary_keys = ["id","name"]
+ field_ide = UPPERCASE
+ schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
+ data_save_mode="APPEND_DATA"
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/Neo4j.md b/docs/zh/connector-v2/sink/Neo4j.md
new file mode 100644
index 00000000000..15e88646d3c
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Neo4j.md
@@ -0,0 +1,147 @@
+# Neo4j
+
+> Neo4j sink connector
+
+## Description
+
+Write data to Neo4j.
+
+`neo4j-java-driver` version 4.4.9
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------------------------|---------|----------|---------------|
+| uri | String | Yes | - |
+| username | String | No | - |
+| password | String | No | - |
+| max_batch_size | Integer | No | - |
+| write_mode | String | No | OneByOne |
+| bearer_token | String | No | - |
+| kerberos_ticket | String | No | - |
+| database | String | Yes | - |
+| query | String | Yes | - |
+| queryParamPosition | Object | Yes | - |
+| max_transaction_retry_time | Long | No | 30 |
+| max_connection_timeout | Long | No | 30 |
+| common-options | config | no | - |
+
+### uri [string]
+
+The URI of the Neo4j database. Refer to a case: `neo4j://localhost:7687`
+
+### username [string]
+
+username of the Neo4j
+
+### password [string]
+
+password of the Neo4j. required if `username` is provided
+
+### max_batch_size[Integer]
+
+max_batch_size refers to the maximum number of data entries that can be written in a single transaction when writing to a database.
+
+### write_mode
+
+The default value is oneByOne, or set it to "Batch" if you want to have the ability to write in batches
+
+```cypher
+unwind $ttt as row create (n:Label) set n.name = row.name,n.age = rw.age
+```
+
+"ttt" represents a batch of data.,"ttt" can be any arbitrary string as long as it matches the configured "batch_data_variable".
+
+### bearer_token [string]
+
+base64 encoded bearer token of the Neo4j. for Auth.
+
+### kerberos_ticket [string]
+
+base64 encoded kerberos ticket of the Neo4j. for Auth.
+
+### database [string]
+
+database name.
+
+### query [string]
+
+Query statement. contain parameter placeholders that are substituted with the corresponding values at runtime
+
+### queryParamPosition [object]
+
+position mapping information for query parameters.
+
+key name is parameter placeholder name.
+
+associated value is position of field in input data row.
+
+### max_transaction_retry_time [long]
+
+maximum transaction retry time(seconds). transaction fail if exceeded
+
+### max_connection_timeout [long]
+
+The maximum amount of time to wait for a TCP connection to be established (seconds)
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## WriteOneByOneExample
+
+```
+sink {
+ Neo4j {
+ uri = "neo4j://localhost:7687"
+ username = "neo4j"
+ password = "1234"
+ database = "neo4j"
+
+ max_transaction_retry_time = 10
+ max_connection_timeout = 10
+
+ query = "CREATE (a:Person {name: $name, age: $age})"
+ queryParamPosition = {
+ name = 0
+ age = 1
+ }
+ }
+}
+```
+
+## WriteBatchExample
+> The unwind keyword provided by cypher supports batch writing, and the default variable for a batch of data is batch. If you write a batch write statement, then you should declare cypher:unwind $batch as row to do someting
+```
+sink {
+ Neo4j {
+ uri = "bolt://localhost:7687"
+ username = "neo4j"
+ password = "neo4j"
+ database = "neo4j"
+ max_batch_size = 1000
+ write_mode = "BATCH"
+
+ max_transaction_retry_time = 3
+ max_connection_timeout = 10
+
+ query = "unwind $batch as row create(n:MyLabel) set n.name = row.name,n.age = row.age"
+
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Neo4j Sink Connector
+
+### issue ##4835
+
+- Sink supports batch write
+
diff --git a/docs/zh/connector-v2/sink/OceanBase.md b/docs/zh/connector-v2/sink/OceanBase.md
new file mode 100644
index 00000000000..ce60b0937de
--- /dev/null
+++ b/docs/zh/connector-v2/sink/OceanBase.md
@@ -0,0 +1,186 @@
+# OceanBase
+
+> JDBC OceanBase Sink Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+## Description
+
+Write data through jdbc. Support Batch mode and Streaming mode, support concurrent writing, support exactly-once semantics.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|--------------------------------|---------------------------|--------------------------------------|-------------------------------------------------------------------------------|
+| OceanBase | All OceanBase server versions. | com.oceanbase.jdbc.Driver | jdbc:oceanbase://localhost:2883/test | [Download](https://mvnrepository.com/artifact/com.oceanbase/oceanbase-client) |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example: cp oceanbase-client-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+### Mysql Mode
+
+| Mysql Data type | SeaTunnel Data type |
+|-----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| BIT(1) INT UNSIGNED | BOOLEAN |
+| TINYINT TINYINT UNSIGNED SMALLINT SMALLINT UNSIGNED MEDIUMINT MEDIUMINT UNSIGNED INT INTEGER YEAR | INT |
+| INT UNSIGNED INTEGER UNSIGNED BIGINT | BIGINT |
+| BIGINT UNSIGNED | DECIMAL(20,0) |
+| DECIMAL(x,y)(Get the designated column's specified column size.<38) | DECIMAL(x,y) |
+| DECIMAL(x,y)(Get the designated column's specified column size.>38) | DECIMAL(38,18) |
+| DECIMAL UNSIGNED | DECIMAL((Get the designated column's specified column size)+1, (Gets the designated column's number of digits to right of the decimal point.))) |
+| FLOAT FLOAT UNSIGNED | FLOAT |
+| DOUBLE DOUBLE UNSIGNED | DOUBLE |
+| CHAR VARCHAR TINYTEXT MEDIUMTEXT TEXT LONGTEXT JSON | STRING |
+| DATE | DATE |
+| TIME | TIME |
+| DATETIME TIMESTAMP | TIMESTAMP |
+| TINYBLOB MEDIUMBLOB BLOB LONGBLOB BINARY VARBINAR BIT(n) | BYTES |
+| GEOMETRY UNKNOWN | Not supported yet |
+
+### Oracle Mode
+
+| Oracle Data type | SeaTunnel Data type |
+|-----------------------------------------------------------|---------------------|
+| Number(p), p <= 9 | INT |
+| Number(p), p <= 18 | BIGINT |
+| Number(p), p > 18 | DECIMAL(38,18) |
+| REAL BINARY_FLOAT | FLOAT |
+| BINARY_DOUBLE | DOUBLE |
+| CHAR NCHAR NVARCHAR2 NCLOB CLOB ROWID | STRING |
+| DATE | DATE |
+| TIMESTAMP TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP |
+| BLOB RAW LONG RAW BFILE | BYTES |
+| UNKNOWN | Not supported yet |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|---------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:oceanbase://localhost:2883/test |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, should be `com.oceanbase.jdbc.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | No | - | Use this sql write upstream input datas to database. e.g `INSERT ...`,`query` have the higher priority |
+| compatible_mode | String | Yes | - | The compatible mode of OceanBase, can be 'mysql' or 'oracle'. |
+| database | String | No | - | Use this `database` and `table-name` auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| table | String | No | - | Use database and this table-name auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| primary_keys | Array | No | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql. |
+| support_upsert_by_query_primary_key_exist | Boolean | No | false | Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE_AFTER) based on query primary key exists. This configuration is only used when database unsupport upsert syntax. **Note**: that this method has low performance |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete. |
+| max_retries | Int | No | 0 | The number of retries to submit failed (executeBatch) |
+| batch_size | Int | No | 1000 | For batch writing, when the number of buffered records reaches the number of `batch_size` or the time reaches `checkpoint.interval` , the data will be flushed into the database |
+| generate_sink_sql | Boolean | No | false | Generate sql statements based on the database table you want to write to |
+| max_commit_attempts | Int | No | 3 | The number of retries for transaction commit failures |
+| transaction_timeout_sec | Int | No | -1 | The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect exactly-once semantics |
+| auto_commit | Boolean | No | true | Automatic transaction commit is enabled by default |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | No | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+| enable_upsert | Boolean | No | true | Enable upsert by primary_keys exist, If the task has no key duplicate data, setting this parameter to `false` can speed up data import |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to JDBC Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having two fields, name (string type) and age (int type). The final target table is test_table will also be 16 rows of data in the table. Before run this job, you need create database test and table test_table in your mysql. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ jdbc {
+ url = "jdbc:oceanbase://localhost:2883/test"
+ driver = "com.oceanbase.jdbc.Driver"
+ user = "root"
+ password = "123456"
+ compatible_mode = "mysql"
+ query = "insert into test_table(name,age) values(?,?)"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
+### Generate Sink SQL
+
+> This example not need to write complex sql statements, you can configure the database name table name to automatically generate add statements for you
+
+```
+sink {
+ jdbc {
+ url = "jdbc:oceanbase://localhost:2883/test"
+ driver = "com.oceanbase.jdbc.Driver"
+ user = "root"
+ password = "123456"
+ compatible_mode = "mysql"
+ # Automatically generate sql statements based on database table names
+ generate_sink_sql = true
+ database = test
+ table = test_table
+ }
+}
+```
+
+### CDC(Change Data Capture) Event
+
+> CDC change data is also supported by us In this case, you need config database, table and primary_keys.
+
+```
+sink {
+ jdbc {
+ url = "jdbc:oceanbase://localhost:3306/test"
+ driver = "com.oceanbase.jdbc.Driver"
+ user = "root"
+ password = "123456"
+ compatible_mode = "mysql"
+ generate_sink_sql = true
+ # You need to configure both database and table
+ database = test
+ table = sink_table
+ primary_keys = ["id","name"]
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/Oracle.md b/docs/zh/connector-v2/sink/Oracle.md
new file mode 100644
index 00000000000..f250f552bd2
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Oracle.md
@@ -0,0 +1,207 @@
+# Oracle
+
+> JDBC Oracle Sink Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+Write data through jdbc. Support Batch mode and Streaming mode, support concurrent writing, support exactly-once
+semantics (using XA transaction guarantee).
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+> Use `Xa transactions` to ensure `exactly-once`. So only support `exactly-once` for the database which is
+> support `Xa transactions`. You can set `is_exactly_once=true` to enable it.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|--------------------------|----------------------------------------|--------------------------------------------------------------------|
+| Oracle | Different dependency version has different driver class. | oracle.jdbc.OracleDriver | jdbc:oracle:thin:@datasource01:1523:xe | https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example Oracle datasource: cp ojdbc8-xxxxxx.jar $SEATNUNNEL_HOME/lib/
+> To support the i18n character set, copy the orai18n.jar to the $SEATNUNNEL_HOME/lib/ directory.
+
+## Data Type Mapping
+
+| Oracle Data Type | SeaTunnel Data Type |
+|--------------------------------------------------------------------------------------|---------------------|
+| INTEGER | INT |
+| FLOAT | DECIMAL(38, 18) |
+| NUMBER(precision <= 9, scale == 0) | INT |
+| NUMBER(9 < precision <= 18, scale == 0) | BIGINT |
+| NUMBER(18 < precision, scale == 0) | DECIMAL(38, 0) |
+| NUMBER(scale != 0) | DECIMAL(38, 18) |
+| BINARY_DOUBLE | DOUBLE |
+| BINARY_FLOAT REAL | FLOAT |
+| CHAR NCHAR NVARCHAR2 VARCHAR2 LONG ROWID NCLOB CLOB | STRING |
+| DATE | DATE |
+| TIMESTAMP TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP |
+| BLOB RAW LONG RAW BFILE | BYTES |
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|---------|----------|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:oracle:thin:@datasource01:1523:xe |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use Oracle the value is `oracle.jdbc.OracleDriver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | No | - | Use this sql write upstream input datas to database. e.g `INSERT ...`,`query` have the higher priority |
+| database | String | No | - | Use this `database` and `table-name` auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| table | String | No | - | Use database and this table-name auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| primary_keys | Array | No | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql. |
+| support_upsert_by_query_primary_key_exist | Boolean | No | false | Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE_AFTER) based on query primary key exists. This configuration is only used when database unsupport upsert syntax. **Note**: that this method has low performance |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete. |
+| max_retries | Int | No | 0 | The number of retries to submit failed (executeBatch) |
+| batch_size | Int | No | 1000 | For batch writing, when the number of buffered records reaches the number of `batch_size` or the time reaches `batch_interval_ms` , the data will be flushed into the database |
+| batch_interval_ms | Int | No | 1000 | For batch writing, when the number of buffers reaches the number of `batch_size` or the time reaches `batch_interval_ms`, the data will be flushed into the database |
+| is_exactly_once | Boolean | No | false | Whether to enable exactly-once semantics, which will use Xa transactions. If on, you need to set `xa_data_source_class_name`. |
+| generate_sink_sql | Boolean | No | false | Generate sql statements based on the database table you want to write to. |
+| xa_data_source_class_name | String | No | - | The xa data source class name of the database Driver, for example, Oracle is `oracle.jdbc.xa.client.OracleXADataSource`, and please refer to appendix for other data sources |
+| max_commit_attempts | Int | No | 3 | The number of retries for transaction commit failures |
+| transaction_timeout_sec | Int | No | -1 | The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect exactly-once semantics |
+| auto_commit | Boolean | No | true | Automatic transaction commit is enabled by default |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | No | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+| schema_save_mode | Enum | No | CREATE_SCHEMA_WHEN_NOT_EXIST | Before the synchronous task is turned on, different treatment schemes are selected for the existing surface structure of the target side. |
+| data_save_mode | Enum | No | APPEND_DATA | Before the synchronous task is turned on, different processing schemes are selected for data existing data on the target side. |
+| custom_sql | String | No | - | When data_save_mode selects CUSTOM_PROCESSING, you should fill in the CUSTOM_SQL parameter. This parameter usually fills in a SQL that can be executed. SQL will be executed before synchronization tasks. |
+| enable_upsert | Boolean | No | true | Enable upsert by primary_keys exist, If the task has no key duplicate data, setting this parameter to `false` can speed up data import |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to JDBC Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having two fields, name (string type) and age (int type). The final target table is test_table will also be 16 rows of data in the table. Before run this job, you need create database test and table test_table in your Oracle. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ jdbc {
+ url = "jdbc:oracle:thin:@datasource01:1523:xe"
+ driver = "oracle.jdbc.OracleDriver"
+ user = root
+ password = 123456
+ query = "INSERT INTO TEST.TEST_TABLE(NAME,AGE) VALUES(?,?)"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
+### Generate Sink SQL
+
+> This example not need to write complex sql statements, you can configure the database name table name to automatically generate add statements for you
+
+```
+sink {
+ Jdbc {
+ url = "jdbc:oracle:thin:@datasource01:1523:xe"
+ driver = "oracle.jdbc.OracleDriver"
+ user = root
+ password = 123456
+
+ generate_sink_sql = true
+ database = XE
+ table = "TEST.TEST_TABLE"
+ }
+}
+```
+
+### Exactly-once :
+
+> For accurate write scene we guarantee accurate once
+
+```
+sink {
+ jdbc {
+ url = "jdbc:oracle:thin:@datasource01:1523:xe"
+ driver = "oracle.jdbc.OracleDriver"
+
+ max_retries = 0
+ user = root
+ password = 123456
+ query = "INSERT INTO TEST.TEST_TABLE(NAME,AGE) VALUES(?,?)"
+
+ is_exactly_once = "true"
+
+ xa_data_source_class_name = "oracle.jdbc.xa.client.OracleXADataSource"
+ }
+}
+```
+
+### CDC(Change Data Capture) Event
+
+> CDC change data is also supported by us In this case, you need config database, table and primary_keys.
+
+```
+sink {
+ jdbc {
+ url = "jdbc:oracle:thin:@datasource01:1523:xe"
+ driver = "oracle.jdbc.OracleDriver"
+ user = root
+ password = 123456
+
+ generate_sink_sql = true
+ # You need to configure both database and table
+ database = XE
+ table = "TEST.TEST_TABLE"
+ primary_keys = ["ID"]
+ schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
+ data_save_mode="APPEND_DATA"
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/OssFile.md b/docs/zh/connector-v2/sink/OssFile.md
new file mode 100644
index 00000000000..7cbab4347de
--- /dev/null
+++ b/docs/zh/connector-v2/sink/OssFile.md
@@ -0,0 +1,506 @@
+# OssFile
+
+> Oss file sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Usage Dependency
+
+### For Spark/Flink Engine
+
+1. You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+2. You must ensure `hadoop-aliyun-xx.jar`, `aliyun-sdk-oss-xx.jar` and `jdom-xx.jar` in `${SEATUNNEL_HOME}/plugins/` dir and the version of `hadoop-aliyun` jar need equals your hadoop version which used in spark/flink and `aliyun-sdk-oss-xx.jar` and `jdom-xx.jar` version needs to be the version corresponding to the `hadoop-aliyun` version. Eg: `hadoop-aliyun-3.1.4.jar` dependency `aliyun-sdk-oss-3.4.1.jar` and `jdom-1.1.jar`.
+
+### For SeaTunnel Zeta Engine
+
+1. You must ensure `seatunnel-hadoop3-3.1.4-uber.jar`, `aliyun-sdk-oss-3.4.1.jar`, `hadoop-aliyun-3.1.4.jar` and `jdom-1.1.jar` in `${SEATUNNEL_HOME}/lib/` dir.
+
+## Key features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+By default, we use 2PC commit to ensure `exactly-once`
+
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Data Type Mapping
+
+If write to `csv`, `text` file type, All column will be string.
+
+### Orc File Type
+
+| SeaTunnel Data Type | Orc Data Type |
+|----------------------|-----------------------|
+| STRING | STRING |
+| BOOLEAN | BOOLEAN |
+| TINYINT | BYTE |
+| SMALLINT | SHORT |
+| INT | INT |
+| BIGINT | LONG |
+| FLOAT | FLOAT |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| DECIMAL | DECIMAL |
+| BYTES | BINARY |
+| DATE | DATE |
+| TIME TIMESTAMP | TIMESTAMP |
+| ROW | STRUCT |
+| NULL | UNSUPPORTED DATA TYPE |
+| ARRAY | LIST |
+| Map | Map |
+
+### Parquet File Type
+
+| SeaTunnel Data Type | Parquet Data Type |
+|----------------------|-----------------------|
+| STRING | STRING |
+| BOOLEAN | BOOLEAN |
+| TINYINT | INT_8 |
+| SMALLINT | INT_16 |
+| INT | INT32 |
+| BIGINT | INT64 |
+| FLOAT | FLOAT |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| DECIMAL | DECIMAL |
+| BYTES | BINARY |
+| DATE | DATE |
+| TIME TIMESTAMP | TIMESTAMP_MILLIS |
+| ROW | GroupType |
+| NULL | UNSUPPORTED DATA TYPE |
+| ARRAY | LIST |
+| Map | Map |
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|----------------------------------|---------|----------|--------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
+| path | string | yes | The oss path to write file in. | |
+| tmp_path | string | no | /tmp/seatunnel | The result file will write to a tmp path first and then use `mv` to submit tmp dir to target dir. Need a OSS dir. |
+| bucket | string | yes | - | |
+| access_key | string | yes | - | |
+| access_secret | string | yes | - | |
+| endpoint | string | yes | - | |
+| custom_filename | boolean | no | false | Whether you need custom the filename |
+| file_name_expression | string | no | "${transactionId}" | Only used when custom_filename is true |
+| filename_time_format | string | no | "yyyy.MM.dd" | Only used when custom_filename is true |
+| file_format_type | string | no | "csv" | |
+| field_delimiter | string | no | '\001' | Only used when file_format_type is text |
+| row_delimiter | string | no | "\n" | Only used when file_format_type is text |
+| have_partition | boolean | no | false | Whether you need processing partitions. |
+| partition_by | array | no | - | Only used then have_partition is true |
+| partition_dir_expression | string | no | "${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/" | Only used then have_partition is true |
+| is_partition_field_write_in_file | boolean | no | false | Only used then have_partition is true |
+| sink_columns | array | no | | When this parameter is empty, all fields are sink columns |
+| is_enable_transaction | boolean | no | true | |
+| batch_size | int | no | 1000000 | |
+| compress_codec | string | no | none | |
+| common-options | object | no | - | |
+| max_rows_in_memory | int | no | - | Only used when file_format_type is excel. |
+| sheet_name | string | no | Sheet${Random number} | Only used when file_format_type is excel. |
+
+### path [string]
+
+The target dir path is required.
+
+### bucket [string]
+
+The bucket address of oss file system, for example: `oss://tyrantlucifer-image-bed`
+
+### access_key [string]
+
+The access key of oss file system.
+
+### access_secret [string]
+
+The access secret of oss file system.
+
+### endpoint [string]
+
+The endpoint of oss file system.
+
+### custom_filename [boolean]
+
+Whether custom the filename
+
+### file_name_expression [string]
+
+Only used when `custom_filename` is `true`
+
+`file_name_expression` describes the file expression which will be created into the `path`. We can add the variable `${now}` or `${uuid}` in the `file_name_expression`, like `test_${uuid}_${now}`,
+`${now}` represents the current time, and its format can be defined by specifying the option `filename_time_format`.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+### filename_time_format [String]
+
+Only used when `custom_filename` is `true`
+
+When the format in the `file_name_expression` parameter is `xxxx-${Now}` , `filename_time_format` can specify the time format of the path, and the default value is `yyyy.MM.dd` . The commonly used time formats are listed as follows:
+
+| Symbol | Description |
+|--------|--------------------|
+| y | Year |
+| M | Month |
+| d | Day of month |
+| H | Hour in day (0-23) |
+| m | Minute in hour |
+| s | Second in minute |
+
+### file_format_type [string]
+
+We supported as the following file types:
+
+`text` `json` `csv` `orc` `parquet` `excel`
+
+Please note that, The final file name will end with the file_format_type's suffix, the suffix of the text file is `txt`.
+
+### field_delimiter [string]
+
+The separator between columns in a row of data. Only needed by `text` file format.
+
+### row_delimiter [string]
+
+The separator between rows in a file. Only needed by `text` file format.
+
+### have_partition [boolean]
+
+Whether you need processing partitions.
+
+### partition_by [array]
+
+Only used when `have_partition` is `true`.
+
+Partition data based on selected fields.
+
+### partition_dir_expression [string]
+
+Only used when `have_partition` is `true`.
+
+If the `partition_by` is specified, we will generate the corresponding partition directory based on the partition information, and the final file will be placed in the partition directory.
+
+Default `partition_dir_expression` is `${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/`. `k0` is the first partition field and `v0` is the value of the first partition field.
+
+### is_partition_field_write_in_file [boolean]
+
+Only used when `have_partition` is `true`.
+
+If `is_partition_field_write_in_file` is `true`, the partition field and the value of it will be write into data file.
+
+For example, if you want to write a Hive Data File, Its value should be `false`.
+
+### sink_columns [array]
+
+Which columns need be written to file, default value is all the columns get from `Transform` or `Source`.
+The order of the fields determines the order in which the file is actually written.
+
+### is_enable_transaction [boolean]
+
+If `is_enable_transaction` is true, we will ensure that data will not be lost or duplicated when it is written to the target directory.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+Only support `true` now.
+
+### batch_size [int]
+
+The maximum number of rows in a file. For SeaTunnel Engine, the number of lines in the file is determined by `batch_size` and `checkpoint.interval` jointly decide. If the value of `checkpoint.interval` is large enough, sink writer will write rows in a file until the rows in the file larger than `batch_size`. If `checkpoint.interval` is small, the sink writer will create a new file when a new checkpoint trigger.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc: `lzo` `snappy` `lz4` `zlib` `none`
+- parquet: `lzo` `snappy` `lz4` `gzip` `brotli` `zstd` `none`
+
+Tips: excel type does not support any compression format
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+### max_rows_in_memory [int]
+
+When File Format is Excel,The maximum number of data items that can be cached in the memory.
+
+### sheet_name [string]
+
+Writer the sheet of the workbook
+
+## How to Create an Oss Data Synchronization Jobs
+
+The following example demonstrates how to create a data synchronization job that reads data from Fake Source and writes it to the Oss:
+
+For text file format with `have_partition` and `custom_filename` and `sink_columns`
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+# Create a source to product data
+source {
+ FakeSource {
+ schema = {
+ fields {
+ name = string
+ age = int
+ }
+ }
+ }
+}
+
+# write data to Oss
+sink {
+ OssFile {
+ path="/seatunnel/sink"
+ bucket = "oss://tyrantlucifer-image-bed"
+ access_key = "xxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxx"
+ endpoint = "oss-cn-beijing.aliyuncs.com"
+ file_format_type = "text"
+ field_delimiter = "\t"
+ row_delimiter = "\n"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ custom_filename = true
+ file_name_expression = "${transactionId}_${now}"
+ filename_time_format = "yyyy.MM.dd"
+ sink_columns = ["name","age"]
+ is_enable_transaction = true
+ }
+}
+```
+
+For parquet file format with `have_partition` and `sink_columns`
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+# Create a source to product data
+source {
+ FakeSource {
+ schema = {
+ fields {
+ name = string
+ age = int
+ }
+ }
+ }
+}
+
+# Write data to Oss
+sink {
+ OssFile {
+ path = "/seatunnel/sink"
+ bucket = "oss://tyrantlucifer-image-bed"
+ access_key = "xxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxx"
+ endpoint = "oss-cn-beijing.aliyuncs.com"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ file_format_type = "parquet"
+ sink_columns = ["name","age"]
+ }
+}
+```
+
+For orc file format simple config
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+# Create a source to product data
+source {
+ FakeSource {
+ schema = {
+ fields {
+ name = string
+ age = int
+ }
+ }
+ }
+}
+
+# Write data to Oss
+sink {
+ OssFile {
+ path="/seatunnel/sink"
+ bucket = "oss://tyrantlucifer-image-bed"
+ access_key = "xxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxx"
+ endpoint = "oss-cn-beijing.aliyuncs.com"
+ file_format_type = "orc"
+ }
+}
+```
+
+### Multiple Table
+
+For extract source metadata from upstream, you can use `${database_name}`, `${table_name}` and `${schema_name}` in the path.
+
+```bash
+
+env {
+ parallelism = 1
+ spark.app.name = "SeaTunnel"
+ spark.executor.instances = 2
+ spark.executor.cores = 1
+ spark.executor.memory = "1g"
+ spark.master = local
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ tables_configs = [
+ {
+ schema = {
+ table = "fake1"
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ c_row = {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ }
+ }
+ }
+ },
+ {
+ schema = {
+ table = "fake2"
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ c_row = {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ }
+ }
+ }
+ }
+ ]
+ }
+}
+
+sink {
+ OssFile {
+ bucket = "oss://whale-ops"
+ access_key = "xxxxxxxxxxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxxxx"
+ endpoint = "https://oss-accelerate.aliyuncs.com"
+ path = "/tmp/fake_empty/text/${table_name}"
+ row_delimiter = "\n"
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ file_name_expression = "${transactionId}_${now}"
+ file_format_type = "text"
+ filename_time_format = "yyyy.MM.dd"
+ is_enable_transaction = true
+ compress_codec = "lzo"
+ }
+}
+
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add OSS Sink Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [BugFix] Fix the bug of incorrect path in windows environment ([2980](https://github.com/apache/seatunnel/pull/2980))
+- [BugFix] Fix filesystem get error ([3117](https://github.com/apache/seatunnel/pull/3117))
+- [BugFix] Solved the bug of can not parse '\t' as delimiter from config file ([3083](https://github.com/apache/seatunnel/pull/3083))
+
+### Next version
+
+- [BugFix] Fixed the following bugs that failed to write data to files ([3258](https://github.com/apache/seatunnel/pull/3258))
+ - When field from upstream is null it will throw NullPointerException
+ - Sink columns mapping failed
+ - When restore writer from states getting transaction directly failed
+- [Improve] Support setting batch size for every file ([3625](https://github.com/apache/seatunnel/pull/3625))
+- [Improve] Support file compress ([3899](https://github.com/apache/seatunnel/pull/3899))
+
+### Tips
+
+> 1.[SeaTunnel Deployment Document](../../start-v2/locally/deployment.md).
+
diff --git a/docs/zh/connector-v2/sink/OssJindoFile.md b/docs/zh/connector-v2/sink/OssJindoFile.md
new file mode 100644
index 00000000000..40441ea83ec
--- /dev/null
+++ b/docs/zh/connector-v2/sink/OssJindoFile.md
@@ -0,0 +1,264 @@
+# OssJindoFile
+
+> OssJindo file sink connector
+
+## Description
+
+Output data to oss file system using jindo api.
+
+:::tip
+
+You need to download [jindosdk-4.6.1.tar.gz](https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/4.6.1/jindosdk-4.6.1.tar.gz)
+and then unzip it, copy jindo-sdk-4.6.1.jar and jindo-core-4.6.1.jar from lib to ${SEATUNNEL_HOME}/lib.
+
+If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+
+If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+We made some trade-offs in order to support more file types, so we used the HDFS protocol for internal access to OSS and this connector need some hadoop dependencies.
+It only supports hadoop version **2.9.X+**.
+
+:::
+
+## Key features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+By default, we use 2PC commit to ensure `exactly-once`
+
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|----------------------------------|---------|----------|--------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
+| path | string | yes | - | |
+| tmp_path | string | no | /tmp/seatunnel | The result file will write to a tmp path first and then use `mv` to submit tmp dir to target dir. Need a OSS dir. |
+| bucket | string | yes | - | |
+| access_key | string | yes | - | |
+| access_secret | string | yes | - | |
+| endpoint | string | yes | - | |
+| custom_filename | boolean | no | false | Whether you need custom the filename |
+| file_name_expression | string | no | "${transactionId}" | Only used when custom_filename is true |
+| filename_time_format | string | no | "yyyy.MM.dd" | Only used when custom_filename is true |
+| file_format_type | string | no | "csv" | |
+| field_delimiter | string | no | '\001' | Only used when file_format_type is text |
+| row_delimiter | string | no | "\n" | Only used when file_format_type is text |
+| have_partition | boolean | no | false | Whether you need processing partitions. |
+| partition_by | array | no | - | Only used then have_partition is true |
+| partition_dir_expression | string | no | "${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/" | Only used then have_partition is true |
+| is_partition_field_write_in_file | boolean | no | false | Only used then have_partition is true |
+| sink_columns | array | no | | When this parameter is empty, all fields are sink columns |
+| is_enable_transaction | boolean | no | true | |
+| batch_size | int | no | 1000000 | |
+| compress_codec | string | no | none | |
+| common-options | object | no | - | |
+| max_rows_in_memory | int | no | - | Only used when file_format_type is excel. |
+| sheet_name | string | no | Sheet${Random number} | Only used when file_format_type is excel. |
+
+### path [string]
+
+The target dir path is required.
+
+### bucket [string]
+
+The bucket address of oss file system, for example: `oss://tyrantlucifer-image-bed`
+
+### access_key [string]
+
+The access key of oss file system.
+
+### access_secret [string]
+
+The access secret of oss file system.
+
+### endpoint [string]
+
+The endpoint of oss file system.
+
+### custom_filename [boolean]
+
+Whether custom the filename
+
+### file_name_expression [string]
+
+Only used when `custom_filename` is `true`
+
+`file_name_expression` describes the file expression which will be created into the `path`. We can add the variable `${now}` or `${uuid}` in the `file_name_expression`, like `test_${uuid}_${now}`,
+`${now}` represents the current time, and its format can be defined by specifying the option `filename_time_format`.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+### filename_time_format [string]
+
+Only used when `custom_filename` is `true`
+
+When the format in the `file_name_expression` parameter is `xxxx-${now}` , `filename_time_format` can specify the time format of the path, and the default value is `yyyy.MM.dd` . The commonly used time formats are listed as follows:
+
+| Symbol | Description |
+|--------|--------------------|
+| y | Year |
+| M | Month |
+| d | Day of month |
+| H | Hour in day (0-23) |
+| m | Minute in hour |
+| s | Second in minute |
+
+### file_format_type [string]
+
+We supported as the following file types:
+
+`text` `json` `csv` `orc` `parquet` `excel`
+
+Please note that, The final file name will end with the file_format_type's suffix, the suffix of the text file is `txt`.
+
+### field_delimiter [string]
+
+The separator between columns in a row of data. Only needed by `text` file format.
+
+### row_delimiter [string]
+
+The separator between rows in a file. Only needed by `text` file format.
+
+### have_partition [boolean]
+
+Whether you need processing partitions.
+
+### partition_by [array]
+
+Only used when `have_partition` is `true`.
+
+Partition data based on selected fields.
+
+### partition_dir_expression [string]
+
+Only used when `have_partition` is `true`.
+
+If the `partition_by` is specified, we will generate the corresponding partition directory based on the partition information, and the final file will be placed in the partition directory.
+
+Default `partition_dir_expression` is `${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/`. `k0` is the first partition field and `v0` is the value of the first partition field.
+
+### is_partition_field_write_in_file [boolean]
+
+Only used when `have_partition` is `true`.
+
+If `is_partition_field_write_in_file` is `true`, the partition field and the value of it will be write into data file.
+
+For example, if you want to write a Hive Data File, Its value should be `false`.
+
+### sink_columns [array]
+
+Which columns need be written to file, default value is all the columns get from `Transform` or `Source`.
+The order of the fields determines the order in which the file is actually written.
+
+### is_enable_transaction [boolean]
+
+If `is_enable_transaction` is true, we will ensure that data will not be lost or duplicated when it is written to the target directory.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+Only support `true` now.
+
+### batch_size [int]
+
+The maximum number of rows in a file. For SeaTunnel Engine, the number of lines in the file is determined by `batch_size` and `checkpoint.interval` jointly decide. If the value of `checkpoint.interval` is large enough, sink writer will write rows in a file until the rows in the file larger than `batch_size`. If `checkpoint.interval` is small, the sink writer will create a new file when a new checkpoint trigger.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc: `lzo` `snappy` `lz4` `zlib` `none`
+- parquet: `lzo` `snappy` `lz4` `gzip` `brotli` `zstd` `none`
+
+Tips: excel type does not support any compression format
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+### max_rows_in_memory [int]
+
+When File Format is Excel,The maximum number of data items that can be cached in the memory.
+
+### sheet_name [string]
+
+Writer the sheet of the workbook
+
+## Example
+
+For text file format with `have_partition` and `custom_filename` and `sink_columns`
+
+```hocon
+
+ OssJindoFile {
+ path="/seatunnel/sink"
+ bucket = "oss://tyrantlucifer-image-bed"
+ access_key = "xxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxx"
+ endpoint = "oss-cn-beijing.aliyuncs.com"
+ file_format_type = "text"
+ field_delimiter = "\t"
+ row_delimiter = "\n"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ custom_filename = true
+ file_name_expression = "${transactionId}_${now}"
+ filename_time_format = "yyyy.MM.dd"
+ sink_columns = ["name","age"]
+ is_enable_transaction = true
+ }
+
+```
+
+For parquet file format with `sink_columns`
+
+```hocon
+
+ OssJindoFile {
+ path = "/seatunnel/sink"
+ bucket = "oss://tyrantlucifer-image-bed"
+ access_key = "xxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxx"
+ endpoint = "oss-cn-beijing.aliyuncs.com"
+ file_format_type = "parquet"
+ sink_columns = ["name","age"]
+ }
+
+```
+
+For orc file format simple config
+
+```bash
+
+ OssJindoFile {
+ path="/seatunnel/sink"
+ bucket = "oss://tyrantlucifer-image-bed"
+ access_key = "xxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxx"
+ endpoint = "oss-cn-beijing.aliyuncs.com"
+ file_format_type = "orc"
+ }
+
+```
+
+## Changelog
+
+### 2.3.0 2022-12-30
+
+- Add OSS Jindo File Sink Connector
+
+### Next version
+
+- [Improve] Support file compress ([3899](https://github.com/apache/seatunnel/pull/3899))
+
diff --git a/docs/zh/connector-v2/sink/Paimon.md b/docs/zh/connector-v2/sink/Paimon.md
new file mode 100644
index 00000000000..6fa721a1e63
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Paimon.md
@@ -0,0 +1,51 @@
+# Paimon
+
+> Paimon sink connector
+
+## Description
+
+Write data to Apache Paimon.
+
+## Key features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------------|--------|----------|---------------|
+| warehouse | String | Yes | - |
+| database | String | Yes | - |
+| table | String | Yes | - |
+| hdfs_site_path | String | No | - |
+
+### warehouse [string]
+
+Paimon warehouse path
+
+### database [string]
+
+The database you want to access
+
+### table [String]
+
+The table you want to access
+
+## Examples
+
+```hocon
+sink {
+ Paimon {
+ warehouse = "/tmp/paimon"
+ database = "default"
+ table = "st_test"
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Paimon Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/Phoenix.md b/docs/zh/connector-v2/sink/Phoenix.md
new file mode 100644
index 00000000000..549deedde33
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Phoenix.md
@@ -0,0 +1,62 @@
+# Phoenix
+
+> Phoenix sink connector
+
+## Description
+
+Write Phoenix data through [Jdbc connector](Jdbc.md).
+Support Batch mode and Streaming mode. The tested Phoenix version is 4.xx and 5.xx
+On the underlying implementation, through the jdbc driver of Phoenix, execute the upsert statement to write data to HBase.
+Two ways of connecting Phoenix with Java JDBC. One is to connect to zookeeper through JDBC, and the other is to connect to queryserver through JDBC thin client.
+
+> Tips: By default, the (thin) driver jar is used. If you want to use the (thick) driver or other versions of Phoenix (thin) driver, you need to recompile the jdbc connector module
+>
+> Tips: Not support exactly-once semantics (XA transaction is not yet supported in Phoenix).
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+### driver [string]
+
+if you use phoenix (thick) driver the value is `org.apache.phoenix.jdbc.PhoenixDriver` or you use (thin) driver the value is `org.apache.phoenix.queryserver.client.Driver`
+
+### url [string]
+
+if you use phoenix (thick) driver the value is `jdbc:phoenix:localhost:2182/hbase` or you use (thin) driver the value is `jdbc:phoenix:thin:url=http://localhost:8765;serialization=PROTOBUF`
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Example
+
+use thick client drive
+
+```
+ Jdbc {
+ driver = org.apache.phoenix.jdbc.PhoenixDriver
+ url = "jdbc:phoenix:localhost:2182/hbase"
+ query = "upsert into test.sink(age, name) values(?, ?)"
+ }
+
+```
+
+use thin client drive
+
+```
+Jdbc {
+ driver = org.apache.phoenix.queryserver.client.Driver
+ url = "jdbc:phoenix:thin:url=http://spark_e2e_phoenix_sink:8765;serialization=PROTOBUF"
+ query = "upsert into test.sink(age, name) values(?, ?)"
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Phoenix Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/PostgreSql.md b/docs/zh/connector-v2/sink/PostgreSql.md
new file mode 100644
index 00000000000..a750755e31b
--- /dev/null
+++ b/docs/zh/connector-v2/sink/PostgreSql.md
@@ -0,0 +1,273 @@
+# PostgreSql
+
+> JDBC PostgreSql Sink Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+Write data through jdbc. Support Batch mode and Streaming mode, support concurrent writing, support exactly-once
+semantics (using XA transaction guarantee).
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/org.postgresql/postgresql) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/org.postgresql/postgresql) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+> Use `Xa transactions` to ensure `exactly-once`. So only support `exactly-once` for the database which is
+> support `Xa transactions`. You can set `is_exactly_once=true` to enable it.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions | Driver | Url | Maven |
+|------------|------------------------------------------------------------|-----------------------|---------------------------------------|--------------------------------------------------------------------------|
+| PostgreSQL | Different dependency version has different driver class. | org.postgresql.Driver | jdbc:postgresql://localhost:5432/test | [Download](https://mvnrepository.com/artifact/org.postgresql/postgresql) |
+| PostgreSQL | If you want to manipulate the GEOMETRY type in PostgreSQL. | org.postgresql.Driver | jdbc:postgresql://localhost:5432/test | [Download](https://mvnrepository.com/artifact/net.postgis/postgis-jdbc) |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example PostgreSQL datasource: cp postgresql-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+> If you want to manipulate the GEOMETRY type in PostgreSQL, add postgresql-xxx.jar and postgis-jdbc-xxx.jar to $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| PostgreSQL Data Type | SeaTunnel Data Type |
+|--------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|
+| BOOL | BOOLEAN |
+| _BOOL | ARRAY<BOOLEAN> |
+| BYTEA | BYTES |
+| _BYTEA | ARRAY<TINYINT> |
+| INT2 SMALLSERIAL INT4 SERIAL | INT |
+| _INT2 _INT4 | ARRAY<INT> |
+| INT8 BIGSERIAL | BIGINT |
+| _INT8 | ARRAY<BIGINT> |
+| FLOAT4 | FLOAT |
+| _FLOAT4 | ARRAY<FLOAT> |
+| FLOAT8 | DOUBLE |
+| _FLOAT8 | ARRAY<DOUBLE> |
+| NUMERIC(Get the designated column's specified column size>0) | DECIMAL(Get the designated column's specified column size,Gets the number of digits in the specified column to the right of the decimal point) |
+| NUMERIC(Get the designated column's specified column size<0) | DECIMAL(38, 18) |
+| BPCHAR CHARACTER VARCHAR TEXT GEOMETRY GEOGRAPHY JSON JSONB UUID | STRING |
+| _BPCHAR _CHARACTER _VARCHAR _TEXT | ARRAY<STRING> |
+| TIMESTAMP | TIMESTAMP |
+| TIME | TIME |
+| DATE | DATE |
+| OTHER DATA TYPES | NOT SUPPORTED YET |
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|---------|----------|------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:postgresql://localhost:5432/test if you would use json or jsonb type insert please add jdbc url stringtype=unspecified option |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use PostgreSQL the value is `org.postgresql.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | No | - | Use this sql write upstream input datas to database. e.g `INSERT ...`,`query` have the higher priority |
+| database | String | No | - | Use this `database` and `table-name` auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| table | String | No | - | Use database and this table-name auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority.The table parameter can fill in the name of an unwilling table, which will eventually be used as the table name of the creation table, and supports variables (`${table_name}`, `${schema_name}`). Replacement rules: `${schema_name}` will replace the SCHEMA name passed to the target side, and `${table_name}` will replace the name of the table passed to the table at the target side. |
+| primary_keys | Array | No | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql. |
+| support_upsert_by_query_primary_key_exist | Boolean | No | false | Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE_AFTER) based on query primary key exists. This configuration is only used when database unsupport upsert syntax. **Note**: that this method has low performance |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete. |
+| max_retries | Int | No | 0 | The number of retries to submit failed (executeBatch) |
+| batch_size | Int | No | 1000 | For batch writing, when the number of buffered records reaches the number of `batch_size` or the time reaches `checkpoint.interval` , the data will be flushed into the database |
+| is_exactly_once | Boolean | No | false | Whether to enable exactly-once semantics, which will use Xa transactions. If on, you need to set `xa_data_source_class_name`. |
+| generate_sink_sql | Boolean | No | false | Generate sql statements based on the database table you want to write to. |
+| xa_data_source_class_name | String | No | - | The xa data source class name of the database Driver, for example, PostgreSQL is `org.postgresql.xa.PGXADataSource`, and please refer to appendix for other data sources |
+| max_commit_attempts | Int | No | 3 | The number of retries for transaction commit failures |
+| transaction_timeout_sec | Int | No | -1 | The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect exactly-once semantics |
+| auto_commit | Boolean | No | true | Automatic transaction commit is enabled by default |
+| field_ide | String | No | - | Identify whether the field needs to be converted when synchronizing from the source to the sink. `ORIGINAL` indicates no conversion is needed;`UPPERCASE` indicates conversion to uppercase;`LOWERCASE` indicates conversion to lowercase. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | no | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+| schema_save_mode | Enum | no | CREATE_SCHEMA_WHEN_NOT_EXIST | Before the synchronous task is turned on, different treatment schemes are selected for the existing surface structure of the target side. |
+| data_save_mode | Enum | no | APPEND_DATA | Before the synchronous task is turned on, different processing schemes are selected for data existing data on the target side. |
+| custom_sql | String | no | - | When data_save_mode selects CUSTOM_PROCESSING, you should fill in the CUSTOM_SQL parameter. This parameter usually fills in a SQL that can be executed. SQL will be executed before synchronization tasks. |
+| enable_upsert | Boolean | No | true | Enable upsert by primary_keys exist, If the task has no key duplicate data, setting this parameter to `false` can speed up data import |
+
+### table [string]
+
+Use `database` and this `table-name` auto-generate sql and receive upstream input datas write to database.
+
+This option is mutually exclusive with `query` and has a higher priority.
+
+The table parameter can fill in the name of an unwilling table, which will eventually be used as the table name of the creation table, and supports variables (`${table_name}`, `${schema_name}`). Replacement rules: `${schema_name}` will replace the SCHEMA name passed to the target side, and `${table_name}` will replace the name of the table passed to the table at the target side.
+
+for example:
+1. ${schema_name}.${table_name} _test
+2. dbo.tt_${table_name} _sink
+3. public.sink_table
+
+### schema_save_mode[Enum]
+
+Before the synchronous task is turned on, different treatment schemes are selected for the existing surface structure of the target side.
+Option introduction:
+`RECREATE_SCHEMA` :Will create when the table does not exist, delete and rebuild when the table is saved
+`CREATE_SCHEMA_WHEN_NOT_EXIST` :Will Created when the table does not exist, skipped when the table is saved
+`ERROR_WHEN_SCHEMA_NOT_EXIST` :Error will be reported when the table does not exist
+
+### data_save_mode[Enum]
+
+Before the synchronous task is turned on, different processing schemes are selected for data existing data on the target side.
+Option introduction:
+`DROP_DATA`: Preserve database structure and delete data
+`APPEND_DATA`:Preserve database structure, preserve data
+`CUSTOM_PROCESSING`:User defined processing
+`ERROR_WHEN_DATA_EXISTS`:When there is data, an error is reported
+
+### custom_sql[String]
+
+When data_save_mode selects CUSTOM_PROCESSING, you should fill in the CUSTOM_SQL parameter. This parameter usually fills in a SQL that can be executed. SQL will be executed before synchronization tasks.
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to JDBC Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having two fields, name (string type) and age (int type). The final target table is test_table will also be 16 rows of data in the table. Before run this job, you need create database test and table test_table in your PostgreSQL. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ jdbc {
+ # if you would use json or jsonb type insert please add jdbc url stringtype=unspecified option
+ url = "jdbc:postgresql://localhost:5432/test"
+ driver = "org.postgresql.Driver"
+ user = root
+ password = 123456
+ query = "insert into test_table(name,age) values(?,?)"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
+### Generate Sink SQL
+
+> This example not need to write complex sql statements, you can configure the database name table name to automatically generate add statements for you
+
+```
+sink {
+ Jdbc {
+ # if you would use json or jsonb type insert please add jdbc url stringtype=unspecified option
+ url = "jdbc:postgresql://localhost:5432/test"
+ driver = org.postgresql.Driver
+ user = root
+ password = 123456
+
+ generate_sink_sql = true
+ database = test
+ table = "public.test_table"
+ }
+}
+```
+
+### Exactly-once :
+
+> For accurate write scene we guarantee accurate once
+
+```
+sink {
+ jdbc {
+ # if you would use json or jsonb type insert please add jdbc url stringtype=unspecified option
+ url = "jdbc:postgresql://localhost:5432/test"
+ driver = "org.postgresql.Driver"
+
+ max_retries = 0
+ user = root
+ password = 123456
+ query = "insert into test_table(name,age) values(?,?)"
+
+ is_exactly_once = "true"
+
+ xa_data_source_class_name = "org.postgresql.xa.PGXADataSource"
+ }
+}
+```
+
+### CDC(Change Data Capture) Event
+
+> CDC change data is also supported by us In this case, you need config database, table and primary_keys.
+
+```
+sink {
+ jdbc {
+ # if you would use json or jsonb type insert please add jdbc url stringtype=unspecified option
+ url = "jdbc:postgresql://localhost:5432/test"
+ driver = "org.postgresql.Driver"
+ user = root
+ password = 123456
+
+ generate_sink_sql = true
+ # You need to configure both database and table
+ database = test
+ table = sink_table
+ primary_keys = ["id","name"]
+ field_ide = UPPERCASE
+ }
+}
+```
+
+### Save mode function
+
+```
+sink {
+ Jdbc {
+ # if you would use json or jsonb type insert please add jdbc url stringtype=unspecified option
+ url = "jdbc:postgresql://localhost:5432/test"
+ driver = org.postgresql.Driver
+ user = root
+ password = 123456
+
+ generate_sink_sql = true
+ database = test
+ table = "public.test_table"
+ schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
+ data_save_mode="APPEND_DATA"
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/Pulsar.md b/docs/zh/connector-v2/sink/Pulsar.md
new file mode 100644
index 00000000000..d3a648e2369
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Pulsar.md
@@ -0,0 +1,177 @@
+# Pulsar
+
+> Pulsar sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> Seatunnel Zeta
+
+## Key features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+## Description
+
+Sink connector for Apache Pulsar.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions |
+|------------|--------------------|
+| Pulsar | Universal |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|----------------------|--------|----------|---------------------|----------------------------------------------------------------------------------------------------------|
+| topic | String | Yes | - | sink pulsar topic |
+| client.service-url | String | Yes | - | Service URL provider for Pulsar service. |
+| admin.service-url | String | Yes | - | The Pulsar service HTTP URL for the admin endpoint. |
+| auth.plugin-class | String | No | - | Name of the authentication plugin. |
+| auth.params | String | No | - | Parameters for the authentication plugin. |
+| format | String | No | json | Data format. The default format is json. Optional text format. |
+| field_delimiter | String | No | , | Customize the field delimiter for data format. |
+| semantics | Enum | No | AT_LEAST_ONCE | Consistency semantics for writing to pulsar. |
+| transaction_timeout | Int | No | 600 | The transaction timeout is specified as 10 minutes by default. |
+| pulsar.config | Map | No | - | In addition to the above parameters that must be specified by the Pulsar producer client. |
+| message.routing.mode | Enum | No | RoundRobinPartition | Default routing mode for messages to partition. |
+| partition_key_fields | array | No | - | Configure which fields are used as the key of the pulsar message. |
+| common-options | config | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+## Parameter Interpretation
+
+### client.service-url [String]
+
+Service URL provider for Pulsar service.
+To connect to Pulsar using client libraries, you need to specify a Pulsar protocol URL.
+You can assign Pulsar protocol URLs to specific clusters and use the Pulsar scheme.
+
+For example, `localhost`: `pulsar://localhost:6650,localhost:6651`.
+
+### admin.service-url [String]
+
+The Pulsar service HTTP URL for the admin endpoint.
+
+For example, `http://my-broker.example.com:8080`, or `https://my-broker.example.com:8443` for TLS.
+
+### auth.plugin-class [String]
+
+Name of the authentication plugin.
+
+### auth.params [String]
+
+Parameters for the authentication plugin.
+
+For example, `key1:val1,key2:val2`
+
+### format [String]
+
+Data format. The default format is json. Optional text format. The default field separator is ",".
+If you customize the delimiter, add the "field_delimiter" option.
+
+### field_delimiter [String]
+
+Customize the field delimiter for data format.The default field_delimiter is ','.
+
+### semantics [Enum]
+
+Consistency semantics for writing to pulsar.
+Available options are EXACTLY_ONCE,NON,AT_LEAST_ONCE, default AT_LEAST_ONCE.
+If semantic is specified as EXACTLY_ONCE, we will use 2pc to guarantee the message is sent to pulsar exactly once.
+If semantic is specified as NON, we will directly send the message to pulsar, the data may duplicat/lost if
+job restart/retry or network error.
+
+### transaction_timeout [Int]
+
+The transaction timeout is specified as 10 minutes by default.
+If the transaction does not commit within the specified timeout, the transaction will be automatically aborted.
+So you need to ensure that the timeout is greater than the checkpoint interval.
+
+### pulsar.config [Map]
+
+In addition to the above parameters that must be specified by the Pulsar producer client,
+the user can also specify multiple non-mandatory parameters for the producer client,
+covering all the producer parameters specified in the official Pulsar document.
+
+### message.routing.mode [Enum]
+
+Default routing mode for messages to partition.
+Available options are SinglePartition,RoundRobinPartition.
+If you choose SinglePartition, If no key is provided, The partitioned producer will randomly pick one single partition and publish all the messages into that partition, If a key is provided on the message, the partitioned producer will hash the key and assign message to a particular partition.
+If you choose RoundRobinPartition, If no key is provided, the producer will publish messages across all partitions in round-robin fashion to achieve maximum throughput.
+Please note that round-robin is not done per individual message but rather it's set to the same boundary of batching delay, to ensure batching is effective.
+
+### partition_key_fields [String]
+
+Configure which fields are used as the key of the pulsar message.
+
+For example, if you want to use value of fields from upstream data as key, you can assign field names to this property.
+
+Upstream data is the following:
+
+| name | age | data |
+|------|-----|---------------|
+| Jack | 16 | data-example1 |
+| Mary | 23 | data-example2 |
+
+If name is set as the key, then the hash value of the name column will determine which partition the message is sent to.
+
+If not set partition key fields, the null message key will be sent to.
+
+The format of the message key is json, If name is set as the key, for example '{"name":"Jack"}'.
+
+The selected field must be an existing field in the upstream.
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to Pulsar Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having two fields, name (string type) and age (int type). The final target topic is test_topic will also be 16 rows of data in the topic. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```hocon
+# Defining the runtime environment
+env {
+ # You can set flink configuration here
+ execution.parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+}
+
+sink {
+ Pulsar {
+ topic = "example"
+ client.service-url = "localhost:pulsar://localhost:6650"
+ admin.service-url = "http://my-broker.example.com:8080"
+ result_table_name = "test"
+ pulsar.config = {
+ sendTimeoutMs = 30000
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Pulsar Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/Rabbitmq.md b/docs/zh/connector-v2/sink/Rabbitmq.md
new file mode 100644
index 00000000000..4f12f591158
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Rabbitmq.md
@@ -0,0 +1,121 @@
+# Rabbitmq
+
+> Rabbitmq sink connector
+
+## Description
+
+Used to write data to Rabbitmq.
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------------------------|---------|----------|---------------|
+| host | string | yes | - |
+| port | int | yes | - |
+| virtual_host | string | yes | - |
+| username | string | yes | - |
+| password | string | yes | - |
+| queue_name | string | yes | - |
+| url | string | no | - |
+| network_recovery_interval | int | no | - |
+| topology_recovery_enabled | boolean | no | - |
+| automatic_recovery_enabled | boolean | no | - |
+| use_correlation_id | boolean | no | false |
+| connection_timeout | int | no | - |
+| rabbitmq.config | map | no | - |
+| common-options | | no | - |
+
+### host [string]
+
+the default host to use for connections
+
+### port [int]
+
+the default port to use for connections
+
+### virtual_host [string]
+
+virtual host – the virtual host to use when connecting to the broker
+
+### username [string]
+
+the AMQP user name to use when connecting to the broker
+
+### password [string]
+
+the password to use when connecting to the broker
+
+### url [string]
+
+convenience method for setting the fields in an AMQP URI: host, port, username, password and virtual host
+
+### queue_name [string]
+
+the queue to write the message to
+
+### schema [Config]
+
+#### fields [Config]
+
+the schema fields of upstream data.
+
+### network_recovery_interval [int]
+
+how long will automatic recovery wait before attempting to reconnect, in ms
+
+### topology_recovery_enabled [boolean]
+
+if true, enables topology recovery
+
+### automatic_recovery_enabled [boolean]
+
+if true, enables connection recovery
+
+### use_correlation_id [boolean]
+
+whether the messages received are supplied with a unique id to deduplicate messages (in case of failed acknowledgments).
+
+### connection_timeout [int]
+
+connection TCP establishment timeout in milliseconds; zero for infinite
+
+### rabbitmq.config [map]
+
+In addition to the above parameters that must be specified by the RabbitMQ client, the user can also specify multiple non-mandatory parameters for the client, covering [all the parameters specified in the official RabbitMQ document](https://www.rabbitmq.com/configure.html).
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Example
+
+simple:
+
+```hocon
+sink {
+ RabbitMQ {
+ host = "rabbitmq-e2e"
+ port = 5672
+ virtual_host = "/"
+ username = "guest"
+ password = "guest"
+ queue_name = "test1"
+ rabbitmq.config = {
+ requested-heartbeat = 10
+ connection-timeout = 10
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Rabbitmq Sink Connector
+- [Improve] Change Connector Custom Config Prefix To Map [3719](https://github.com/apache/seatunnel/pull/3719)
+
diff --git a/docs/zh/connector-v2/sink/Redis.md b/docs/zh/connector-v2/sink/Redis.md
new file mode 100644
index 00000000000..f91e6bc6ec0
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Redis.md
@@ -0,0 +1,159 @@
+# Redis
+
+> Redis sink connector
+
+## Description
+
+Used to write data to Redis.
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------------|--------|-----------------------|---------------|
+| host | string | yes | - |
+| port | int | yes | - |
+| key | string | yes | - |
+| data_type | string | yes | - |
+| user | string | no | - |
+| auth | string | no | - |
+| db_num | int | no | 0 |
+| mode | string | no | single |
+| nodes | list | yes when mode=cluster | - |
+| format | string | no | json |
+| expire | long | no | -1 |
+| common-options | | no | - |
+
+### host [string]
+
+Redis host
+
+### port [int]
+
+Redis port
+
+### key [string]
+
+The value of key you want to write to redis.
+
+For example, if you want to use value of a field from upstream data as key, you can assign it to the field name.
+
+Upstream data is the following:
+
+| code | data | success |
+|------|----------------|---------|
+| 200 | get success | true |
+| 500 | internal error | false |
+
+If you assign field name to `code` and data_type to `key`, two data will be written to redis:
+1. `200 -> {code: 200, message: true, data: get success}`
+2. `500 -> {code: 500, message: false, data: internal error}`
+
+If you assign field name to `value` and data_type to `key`, only one data will be written to redis because `value` is not existed in upstream data's fields:
+
+1. `value -> {code: 500, message: false, data: internal error}`
+
+Please see the data_type section for specific writing rules.
+
+Of course, the format of the data written here I just take json as an example, the specific or user-configured `format` prevails.
+
+### data_type [string]
+
+Redis data types, support `key` `hash` `list` `set` `zset`
+
+- key
+
+> Each data from upstream will be updated to the configured key, which means the later data will overwrite the earlier data, and only the last data will be stored in the key.
+
+- hash
+
+> Each data from upstream will be split according to the field and written to the hash key, also the data after will overwrite the data before.
+
+- list
+
+> Each data from upstream will be added to the configured list key.
+
+- set
+
+> Each data from upstream will be added to the configured set key.
+
+- zset
+
+> Each data from upstream will be added to the configured zset key with a weight of 1. So the order of data in zset is based on the order of data consumption.
+
+### user [string]
+
+redis authentication user, you need it when you connect to an encrypted cluster
+
+### auth [string]
+
+Redis authentication password, you need it when you connect to an encrypted cluster
+
+### db_num [int]
+
+Redis database index ID. It is connected to db 0 by default
+
+### mode [string]
+
+redis mode, `single` or `cluster`, default is `single`
+
+### nodes [list]
+
+redis nodes information, used in cluster mode, must like as the following format:
+
+["host1:port1", "host2:port2"]
+
+### format [string]
+
+The format of upstream data, now only support `json`, `text` will be supported later, default `json`.
+
+When you assign format is `json`, for example:
+
+Upstream data is the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+Connector will generate data as the following and write it to redis:
+
+```json
+
+{"code": 200, "data": "get success", "success": "true"}
+
+```
+
+### expire [long]
+
+Set redis expiration time, the unit is second. The default value is -1, keys do not automatically expire by default.
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Example
+
+simple:
+
+```hocon
+Redis {
+ host = localhost
+ port = 6379
+ key = age
+ data_type = list
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Redis Sink Connector
+
+### next version
+
+- [Improve] Support redis cluster mode connection and user authentication [3188](https://github.com/apache/seatunnel/pull/3188)
+
diff --git a/docs/zh/connector-v2/sink/RocketMQ.md b/docs/zh/connector-v2/sink/RocketMQ.md
new file mode 100644
index 00000000000..a31534ec26b
--- /dev/null
+++ b/docs/zh/connector-v2/sink/RocketMQ.md
@@ -0,0 +1,203 @@
+# RocketMQ
+
+> RocketMQ sink connector
+
+## Support Apache RocketMQ Version
+
+- 4.9.0 (Or a newer version, for reference)
+
+## Support These Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+By default, we will use 2pc to guarantee the message is sent to RocketMQ exactly once.
+
+## Description
+
+Write Rows to a Apache RocketMQ topic.
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|----------------------|---------|----------|--------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| topic | string | yes | - | `RocketMQ topic` name. |
+| name.srv.addr | string | yes | - | `RocketMQ` name server cluster address. |
+| acl.enabled | Boolean | no | false | false |
+| access.key | String | no | | When ACL_ENABLED is true, access key cannot be empty |
+| secret.key | String | no | | When ACL_ENABLED is true, secret key cannot be empty |
+| producer.group | String | no | SeaTunnel-producer-Group | SeaTunnel-producer-Group |
+| partition.key.fields | array | no | - | - |
+| format | String | no | json | Data format. The default format is json. Optional text format. The default field separator is ",".If you customize the delimiter, add the "field_delimiter" option. |
+| field.delimiter | String | no | , | Customize the field delimiter for data format. |
+| producer.send.sync | Boolean | no | false | If true, the message will be sync sent. |
+| common-options | config | no | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details. |
+
+### partition.key.fields [array]
+
+Configure which fields are used as the key of the RocketMQ message.
+
+For example, if you want to use value of fields from upstream data as key, you can assign field names to this property.
+
+Upstream data is the following:
+
+| name | age | data |
+|------|-----|---------------|
+| Jack | 16 | data-example1 |
+| Mary | 23 | data-example2 |
+
+If name is set as the key, then the hash value of the name column will determine which partition the message is sent to.
+
+## Task Example
+
+### Fake to Rocketmq Simple
+
+> The data is randomly generated and asynchronously sent to the test topic
+
+```hocon
+env {
+ parallelism = 1
+}
+
+source {
+ FakeSource {
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform
+}
+
+sink {
+ Rocketmq {
+ name.srv.addr = "localhost:9876"
+ topic = "test_topic"
+ }
+}
+
+```
+
+### Rocketmq To Rocketmq Simple
+
+> Consuming Rocketmq writes to c_int field Hash number of partitions written to different partitions This is the default asynchronous way to write
+
+```hocon
+env {
+ parallelism = 1
+}
+
+source {
+ Rocketmq {
+ name.srv.addr = "localhost:9876"
+ topics = "test_topic"
+ result_table_name = "rocketmq_table"
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+sink {
+ Rocketmq {
+ name.srv.addr = "localhost:9876"
+ topic = "test_topic_sink"
+ partition.key.fields = ["c_int"]
+ }
+}
+```
+
+### Timestamp consumption write Simple
+
+> This is a stream consumption specified time stamp consumption, when there are new partitions added the program will refresh the perception and consumption at intervals, and write to another topic type
+
+```hocon
+
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+}
+
+source {
+ Rocketmq {
+ name.srv.addr = "localhost:9876"
+ topics = "test_topic"
+ result_table_name = "rocketmq_table"
+ start.mode = "CONSUME_FROM_FIRST_OFFSET"
+ batch.size = "400"
+ consumer.group = "test_topic_group"
+ format = "json"
+ format = json
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform
+}
+sink {
+ Rocketmq {
+ name.srv.addr = "localhost:9876"
+ topic = "test_topic"
+ partition.key.fields = ["c_int"]
+ producer.send.sync = true
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/S3-Redshift.md b/docs/zh/connector-v2/sink/S3-Redshift.md
new file mode 100644
index 00000000000..2e02e2f446a
--- /dev/null
+++ b/docs/zh/connector-v2/sink/S3-Redshift.md
@@ -0,0 +1,278 @@
+# S3Redshift
+
+> The way of S3Redshift is to write data into S3, and then use Redshift's COPY command to import data from S3 to Redshift.
+
+## Description
+
+Output data to AWS Redshift.
+
+> Tips:
+> We based on the [S3File](S3File.md) to implement this connector. So you can use the same configuration as S3File.
+> We made some trade-offs in order to support more file types, so we used the HDFS protocol for internal access to S3 and this connector need some hadoop dependencies.
+> It's only support hadoop version **2.6.5+**.
+
+## Key features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+By default, we use 2PC commit to ensure `exactly-once`
+
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+
+## Options
+
+| name | type | required | default value |
+|----------------------------------|---------|----------|-----------------------------------------------------------|
+| jdbc_url | string | yes | - |
+| jdbc_user | string | yes | - |
+| jdbc_password | string | yes | - |
+| execute_sql | string | yes | - |
+| path | string | yes | - |
+| bucket | string | yes | - |
+| access_key | string | no | - |
+| access_secret | string | no | - |
+| hadoop_s3_properties | map | no | - |
+| file_name_expression | string | no | "${transactionId}" |
+| file_format_type | string | no | "text" |
+| filename_time_format | string | no | "yyyy.MM.dd" |
+| field_delimiter | string | no | '\001' |
+| row_delimiter | string | no | "\n" |
+| partition_by | array | no | - |
+| partition_dir_expression | string | no | "${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/" |
+| is_partition_field_write_in_file | boolean | no | false |
+| sink_columns | array | no | When this parameter is empty, all fields are sink columns |
+| is_enable_transaction | boolean | no | true |
+| batch_size | int | no | 1000000 |
+| common-options | | no | - |
+
+### jdbc_url
+
+The JDBC URL to connect to the Redshift database.
+
+### jdbc_user
+
+The JDBC user to connect to the Redshift database.
+
+### jdbc_password
+
+The JDBC password to connect to the Redshift database.
+
+### execute_sql
+
+The SQL to execute after the data is written to S3.
+
+eg:
+
+```sql
+
+COPY target_table FROM 's3://yourbucket${path}' IAM_ROLE 'arn:XXX' REGION 'your region' format as json 'auto';
+```
+
+`target_table` is the table name in Redshift.
+
+`${path}` is the path of the file written to S3. please confirm your sql include this variable. and don't need replace it. we will replace it when execute sql.
+
+IAM_ROLE is the role that has permission to access S3.
+
+format is the format of the file written to S3. please confirm this format is same as the file format you set in the configuration.
+
+please refer to [Redshift COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html) for more details.
+
+please confirm that the role has permission to access S3.
+
+### path [string]
+
+The target dir path is required.
+
+### bucket [string]
+
+The bucket address of s3 file system, for example: `s3n://seatunnel-test`, if you use `s3a` protocol, this parameter should be `s3a://seatunnel-test`.
+
+### access_key [string]
+
+The access key of s3 file system. If this parameter is not set, please confirm that the credential provider chain can be authenticated correctly, you could check this [hadoop-aws](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html)
+
+### access_secret [string]
+
+The access secret of s3 file system. If this parameter is not set, please confirm that the credential provider chain can be authenticated correctly, you could check this [hadoop-aws](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html)
+
+### hadoop_s3_properties [map]
+
+If you need to add a other option, you could add it here and refer to this [Hadoop-AWS](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html)
+
+```
+hadoop_s3_properties {
+ "fs.s3a.aws.credentials.provider" = "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"
+ }
+```
+
+### file_name_expression [string]
+
+`file_name_expression` describes the file expression which will be created into the `path`. We can add the variable `${now}` or `${uuid}` in the `file_name_expression`, like `test_${uuid}_${now}`,
+`${now}` represents the current time, and its format can be defined by specifying the option `filename_time_format`.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+### file_format_type [string]
+
+We supported as the following file types:
+
+`text` `csv` `parquet` `orc` `json`
+
+Please note that, The final file name will end with the file_format_type's suffix, the suffix of the text file is `txt`.
+
+### filename_time_format [string]
+
+When the format in the `file_name_expression` parameter is `xxxx-${now}` , `filename_time_format` can specify the time format of the path, and the default value is `yyyy.MM.dd` . The commonly used time formats are listed as follows:
+
+| Symbol | Description |
+|--------|--------------------|
+| y | Year |
+| M | Month |
+| d | Day of month |
+| H | Hour in day (0-23) |
+| m | Minute in hour |
+| s | Second in minute |
+
+See [Java SimpleDateFormat](https://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html) for detailed time format syntax.
+
+### field_delimiter [string]
+
+The separator between columns in a row of data. Only needed by `text` and `csv` file format.
+
+### row_delimiter [string]
+
+The separator between rows in a file. Only needed by `text` and `csv` file format.
+
+### partition_by [array]
+
+Partition data based on selected fields
+
+### partition_dir_expression [string]
+
+If the `partition_by` is specified, we will generate the corresponding partition directory based on the partition information, and the final file will be placed in the partition directory.
+
+Default `partition_dir_expression` is `${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/`. `k0` is the first partition field and `v0` is the value of the first partition field.
+
+### is_partition_field_write_in_file [boolean]
+
+If `is_partition_field_write_in_file` is `true`, the partition field and the value of it will be written into data file.
+
+For example, if you want to write a Hive Data File, Its value should be `false`.
+
+### sink_columns [array]
+
+Which columns need be written to file, default value is all the columns get from `Transform` or `Source`.
+The order of the fields determines the order in which the file is actually written.
+
+### is_enable_transaction [boolean]
+
+If `is_enable_transaction` is true, we will ensure that data will not be lost or duplicated when it is written to the target directory.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+Only support `true` now.
+
+### batch_size [int]
+
+The maximum number of rows in a file. For SeaTunnel Engine, the number of lines in the file is determined by `batch_size` and `checkpoint.interval` jointly decide. If the value of `checkpoint.interval` is large enough, sink writer will write rows in a file until the rows in the file larger than `batch_size`. If `checkpoint.interval` is small, the sink writer will create a new file when a new checkpoint trigger.
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+## Example
+
+For text file format
+
+```hocon
+
+ S3Redshift {
+ jdbc_url = "jdbc:redshift://xxx.amazonaws.com.cn:5439/xxx"
+ jdbc_user = "xxx"
+ jdbc_password = "xxxx"
+ execute_sql="COPY table_name FROM 's3://test${path}' IAM_ROLE 'arn:aws-cn:iam::xxx' REGION 'cn-north-1' removequotes emptyasnull blanksasnull maxerror 100 delimiter '|' ;"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxx"
+ bucket = "s3a://seatunnel-test"
+ tmp_path = "/tmp/seatunnel"
+ path="/seatunnel/text"
+ row_delimiter="\n"
+ partition_dir_expression="${k0}=${v0}"
+ is_partition_field_write_in_file=true
+ file_name_expression="${transactionId}_${now}"
+ file_format_type = "text"
+ filename_time_format="yyyy.MM.dd"
+ is_enable_transaction=true
+ hadoop_s3_properties {
+ "fs.s3a.aws.credentials.provider" = "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"
+ }
+ }
+
+```
+
+For parquet file format
+
+```hocon
+
+ S3Redshift {
+ jdbc_url = "jdbc:redshift://xxx.amazonaws.com.cn:5439/xxx"
+ jdbc_user = "xxx"
+ jdbc_password = "xxxx"
+ execute_sql="COPY table_name FROM 's3://test${path}' IAM_ROLE 'arn:aws-cn:iam::xxx' REGION 'cn-north-1' format as PARQUET;"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxx"
+ bucket = "s3a://seatunnel-test"
+ tmp_path = "/tmp/seatunnel"
+ path="/seatunnel/parquet"
+ row_delimiter="\n"
+ partition_dir_expression="${k0}=${v0}"
+ is_partition_field_write_in_file=true
+ file_name_expression="${transactionId}_${now}"
+ file_format_type = "parquet"
+ filename_time_format="yyyy.MM.dd"
+ is_enable_transaction=true
+ hadoop_s3_properties {
+ "fs.s3a.aws.credentials.provider" = "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"
+ }
+ }
+
+```
+
+For orc file format
+
+```hocon
+
+ S3Redshift {
+ jdbc_url = "jdbc:redshift://xxx.amazonaws.com.cn:5439/xxx"
+ jdbc_user = "xxx"
+ jdbc_password = "xxxx"
+ execute_sql="COPY table_name FROM 's3://test${path}' IAM_ROLE 'arn:aws-cn:iam::xxx' REGION 'cn-north-1' format as ORC;"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxx"
+ bucket = "s3a://seatunnel-test"
+ tmp_path = "/tmp/seatunnel"
+ path="/seatunnel/orc"
+ row_delimiter="\n"
+ partition_dir_expression="${k0}=${v0}"
+ is_partition_field_write_in_file=true
+ file_name_expression="${transactionId}_${now}"
+ file_format_type = "orc"
+ filename_time_format="yyyy.MM.dd"
+ is_enable_transaction=true
+ hadoop_s3_properties {
+ "fs.s3a.aws.credentials.provider" = "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"
+ }
+ }
+
+```
+
+## Changelog
+
+### 2.3.0-beta 2022-10-20
+
diff --git a/docs/zh/connector-v2/sink/S3File.md b/docs/zh/connector-v2/sink/S3File.md
new file mode 100644
index 00000000000..84bca3cb80c
--- /dev/null
+++ b/docs/zh/connector-v2/sink/S3File.md
@@ -0,0 +1,490 @@
+# S3File
+
+> S3 File Sink Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [cdc](../../concept/connector-v2-features.md)
+
+By default, we use 2PC commit to ensure `exactly-once`
+
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Description
+
+Output data to aws s3 file system.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions |
+|------------|--------------------|
+| S3 | current |
+
+## Database Dependency
+
+> If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+>
+> If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under `${SEATUNNEL_HOME}/lib` to confirm this.
+> To use this connector you need put `hadoop-aws-3.1.4.jar` and `aws-java-sdk-bundle-1.11.271.jar` in `${SEATUNNEL_HOME}/lib` dir.
+
+## Data Type Mapping
+
+If write to `csv`, `text` file type, All column will be string.
+
+### Orc File Type
+
+| SeaTunnel Data type | Orc Data type |
+|----------------------|-----------------------|
+| STRING | STRING |
+| BOOLEAN | BOOLEAN |
+| TINYINT | BYTE |
+| SMALLINT | SHORT |
+| INT | INT |
+| BIGINT | LONG |
+| FLOAT | FLOAT |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| DECIMAL | DECIMAL |
+| BYTES | BINARY |
+| DATE | DATE |
+| TIME TIMESTAMP | TIMESTAMP |
+| ROW | STRUCT |
+| NULL | UNSUPPORTED DATA TYPE |
+| ARRAY | LIST |
+| Map | Map |
+
+### Parquet File Type
+
+| SeaTunnel Data type | Parquet Data type |
+|----------------------|-----------------------|
+| STRING | STRING |
+| BOOLEAN | BOOLEAN |
+| TINYINT | INT_8 |
+| SMALLINT | INT_16 |
+| INT | INT32 |
+| BIGINT | INT64 |
+| FLOAT | FLOAT |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| DECIMAL | DECIMAL |
+| BYTES | BINARY |
+| DATE | DATE |
+| TIME TIMESTAMP | TIMESTAMP_MILLIS |
+| ROW | GroupType |
+| NULL | UNSUPPORTED DATA TYPE |
+| ARRAY | LIST |
+| Map | Map |
+
+## Sink Options
+
+| name | type | required | default value | Description |
+|----------------------------------|---------|----------|-------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| path | string | yes | - | |
+| tmp_path | string | no | /tmp/seatunnel | The result file will write to a tmp path first and then use `mv` to submit tmp dir to target dir. Need a S3 dir. |
+| bucket | string | yes | - | |
+| fs.s3a.endpoint | string | yes | - | |
+| fs.s3a.aws.credentials.provider | string | yes | com.amazonaws.auth.InstanceProfileCredentialsProvider | The way to authenticate s3a. We only support `org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider` and `com.amazonaws.auth.InstanceProfileCredentialsProvider` now. |
+| access_key | string | no | - | Only used when fs.s3a.aws.credentials.provider = org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider |
+| access_secret | string | no | - | Only used when fs.s3a.aws.credentials.provider = org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider |
+| custom_filename | boolean | no | false | Whether you need custom the filename |
+| file_name_expression | string | no | "${transactionId}" | Only used when custom_filename is true |
+| filename_time_format | string | no | "yyyy.MM.dd" | Only used when custom_filename is true |
+| file_format_type | string | no | "csv" | |
+| field_delimiter | string | no | '\001' | Only used when file_format is text |
+| row_delimiter | string | no | "\n" | Only used when file_format is text |
+| have_partition | boolean | no | false | Whether you need processing partitions. |
+| partition_by | array | no | - | Only used when have_partition is true |
+| partition_dir_expression | string | no | "${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/" | Only used when have_partition is true |
+| is_partition_field_write_in_file | boolean | no | false | Only used when have_partition is true |
+| sink_columns | array | no | | When this parameter is empty, all fields are sink columns |
+| is_enable_transaction | boolean | no | true | |
+| batch_size | int | no | 1000000 | |
+| compress_codec | string | no | none | |
+| common-options | object | no | - | |
+| max_rows_in_memory | int | no | - | Only used when file_format is excel. |
+| sheet_name | string | no | Sheet${Random number} | Only used when file_format is excel. |
+| hadoop_s3_properties | map | no | | If you need to add a other option, you could add it here and refer to this [link](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html) |
+| schema_save_mode | Enum | no | CREATE_SCHEMA_WHEN_NOT_EXIST | Before turning on the synchronous task, do different treatment of the target path |
+| data_save_mode | Enum | no | APPEND_DATA | Before opening the synchronous task, the data file in the target path is differently processed |
+
+### path [string]
+
+Store the path of the data file to support variable replacement. For example: path=/test/${database_name}/${schema_name}/${table_name}
+
+### hadoop_s3_properties [map]
+
+If you need to add a other option, you could add it here and refer to this [link](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html)
+
+```
+hadoop_s3_properties {
+ "fs.s3a.buffer.dir" = "/data/st_test/s3a"
+ "fs.s3a.fast.upload.buffer" = "disk"
+ }
+```
+
+### custom_filename [boolean]
+
+Whether custom the filename
+
+### file_name_expression [string]
+
+Only used when `custom_filename` is `true`
+
+`file_name_expression` describes the file expression which will be created into the `path`. We can add the variable `${now}` or `${uuid}` in the `file_name_expression`, like `test_${uuid}_${now}`,
+`${now}` represents the current time, and its format can be defined by specifying the option `filename_time_format`.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+### filename_time_format [string]
+
+Only used when `custom_filename` is `true`
+
+When the format in the `file_name_expression` parameter is `xxxx-${now}` , `filename_time_format` can specify the time format of the path, and the default value is `yyyy.MM.dd` . The commonly used time formats are listed as follows:
+
+| Symbol | Description |
+|--------|--------------------|
+| y | Year |
+| M | Month |
+| d | Day of month |
+| H | Hour in day (0-23) |
+| m | Minute in hour |
+| s | Second in minute |
+
+### file_format_type [string]
+
+We supported as the following file types:
+
+`text` `json` `csv` `orc` `parquet` `excel`
+
+Please note that, The final file name will end with the file_format_type's suffix, the suffix of the text file is `txt`.
+
+### field_delimiter [string]
+
+The separator between columns in a row of data. Only needed by `text` file format.
+
+### row_delimiter [string]
+
+The separator between rows in a file. Only needed by `text` file format.
+
+### have_partition [boolean]
+
+Whether you need processing partitions.
+
+### partition_by [array]
+
+Only used when `have_partition` is `true`.
+
+Partition data based on selected fields.
+
+### partition_dir_expression [string]
+
+Only used when `have_partition` is `true`.
+
+If the `partition_by` is specified, we will generate the corresponding partition directory based on the partition information, and the final file will be placed in the partition directory.
+
+Default `partition_dir_expression` is `${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/`. `k0` is the first partition field and `v0` is the value of the first partition field.
+
+### is_partition_field_write_in_file [boolean]
+
+Only used when `have_partition` is `true`.
+
+If `is_partition_field_write_in_file` is `true`, the partition field and the value of it will be write into data file.
+
+For example, if you want to write a Hive Data File, Its value should be `false`.
+
+### sink_columns [array]
+
+Which columns need be written to file, default value is all the columns get from `Transform` or `Source`.
+The order of the fields determines the order in which the file is actually written.
+
+### is_enable_transaction [boolean]
+
+If `is_enable_transaction` is true, we will ensure that data will not be lost or duplicated when it is written to the target directory.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+Only support `true` now.
+
+### batch_size [int]
+
+The maximum number of rows in a file. For SeaTunnel Engine, the number of lines in the file is determined by `batch_size` and `checkpoint.interval` jointly decide. If the value of `checkpoint.interval` is large enough, sink writer will write rows in a file until the rows in the file larger than `batch_size`. If `checkpoint.interval` is small, the sink writer will create a new file when a new checkpoint trigger.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc: `lzo` `snappy` `lz4` `zlib` `none`
+- parquet: `lzo` `snappy` `lz4` `gzip` `brotli` `zstd` `none`
+
+Tips: excel type does not support any compression format
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+### max_rows_in_memory [int]
+
+When File Format is Excel,The maximum number of data items that can be cached in the memory.
+
+### sheet_name [string]
+
+Writer the sheet of the workbook
+
+### schema_save_mode[Enum]
+
+Before turning on the synchronous task, do different treatment of the target path.
+Option introduction:
+`RECREATE_SCHEMA` :Will be created when the path does not exist. If the path already exists, delete the path and recreate it.
+`CREATE_SCHEMA_WHEN_NOT_EXIST` :Will Created when the path does not exist, use the path when the path is existed.
+`ERROR_WHEN_SCHEMA_NOT_EXIST` :Error will be reported when the path does not exist
+
+### data_save_mode[Enum]
+
+Before opening the synchronous task, the data file in the target path is differently processed.
+Option introduction:
+`DROP_DATA`: use the path but delete data files in the path.
+`APPEND_DATA`:use the path, and add new files in the path for write data.
+`ERROR_WHEN_DATA_EXISTS`:When there are some data files in the path, an error will is reported.
+
+## Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to S3File Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having two fields, name (string type) and age (int type). The final target s3 dir will also create a file and all of the data in write in it.
+> Before run this job, you need create s3 path: /seatunnel/text. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ c_map = "map>"
+ c_array = "array"
+ name = string
+ c_boolean = boolean
+ age = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(16, 1)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ S3File {
+ bucket = "s3a://seatunnel-test"
+ tmp_path = "/tmp/seatunnel"
+ path="/seatunnel/text"
+ fs.s3a.endpoint="s3.cn-north-1.amazonaws.com.cn"
+ fs.s3a.aws.credentials.provider="com.amazonaws.auth.InstanceProfileCredentialsProvider"
+ file_format_type = "text"
+ field_delimiter = "\t"
+ row_delimiter = "\n"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ custom_filename = true
+ file_name_expression = "${transactionId}_${now}"
+ filename_time_format = "yyyy.MM.dd"
+ sink_columns = ["name","age"]
+ is_enable_transaction=true
+ hadoop_s3_properties {
+ "fs.s3a.buffer.dir" = "/data/st_test/s3a"
+ "fs.s3a.fast.upload.buffer" = "disk"
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
+For text file format with `have_partition` and `custom_filename` and `sink_columns` and `com.amazonaws.auth.InstanceProfileCredentialsProvider`
+
+```hocon
+
+ S3File {
+ bucket = "s3a://seatunnel-test"
+ tmp_path = "/tmp/seatunnel"
+ path="/seatunnel/text"
+ fs.s3a.endpoint="s3.cn-north-1.amazonaws.com.cn"
+ fs.s3a.aws.credentials.provider="com.amazonaws.auth.InstanceProfileCredentialsProvider"
+ file_format_type = "text"
+ field_delimiter = "\t"
+ row_delimiter = "\n"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ custom_filename = true
+ file_name_expression = "${transactionId}_${now}"
+ filename_time_format = "yyyy.MM.dd"
+ sink_columns = ["name","age"]
+ is_enable_transaction=true
+ hadoop_s3_properties {
+ "fs.s3a.buffer.dir" = "/data/st_test/s3a"
+ "fs.s3a.fast.upload.buffer" = "disk"
+ }
+ }
+
+```
+
+For parquet file format simple config with `org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider`
+
+```hocon
+
+ S3File {
+ bucket = "s3a://seatunnel-test"
+ tmp_path = "/tmp/seatunnel"
+ path="/seatunnel/parquet"
+ fs.s3a.endpoint="s3.cn-north-1.amazonaws.com.cn"
+ fs.s3a.aws.credentials.provider="org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxx"
+ file_format_type = "parquet"
+ hadoop_s3_properties {
+ "fs.s3a.buffer.dir" = "/data/st_test/s3a"
+ "fs.s3a.fast.upload.buffer" = "disk"
+ }
+ }
+
+```
+
+For orc file format simple config with `org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider`
+
+```hocon
+
+ S3File {
+ bucket = "s3a://seatunnel-test"
+ tmp_path = "/tmp/seatunnel"
+ path="/seatunnel/orc"
+ fs.s3a.endpoint="s3.cn-north-1.amazonaws.com.cn"
+ fs.s3a.aws.credentials.provider="org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxx"
+ file_format_type = "orc"
+ schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
+ data_save_mode="APPEND_DATA"
+ }
+
+```
+
+Multi-table writing and saveMode
+
+```
+env {
+"job.name"="SeaTunnel_job"
+"job.mode"=STREAMING
+}
+source {
+MySQL-CDC {
+
+ "connect.max-retries"=3
+ "connection.pool.size"=6
+ "startup.mode"=INITIAL
+ "exactly_once"="true"
+ "stop.mode"=NEVER
+ parallelism=1
+ "result_table_name"=Table11519548644512
+ "dag-parsing.mode"=MULTIPLEX
+ catalog {
+ factory=Mysql
+ }
+ database-names=[
+ "wls_t1"
+ ]
+ table-names=[
+ "wls_t1.mysqlcdc_to_s3_t3",
+ "wls_t1.mysqlcdc_to_s3_t4",
+ "wls_t1.mysqlcdc_to_s3_t5",
+ "wls_t1.mysqlcdc_to_s3_t1",
+ "wls_t1.mysqlcdc_to_s3_t2"
+ ]
+ password="xxxxxx"
+ username="xxxxxxxxxxxxx"
+ base-url="jdbc:mysql://localhost:3306/qa_source"
+ server-time-zone=UTC
+}
+}
+transform {
+}
+sink {
+S3File {
+ bucket = "s3a://seatunnel-test"
+ tmp_path = "/tmp/seatunnel"
+ path="/test/${table_name}"
+ fs.s3a.endpoint="s3.cn-north-1.amazonaws.com.cn"
+ fs.s3a.aws.credentials.provider="org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxx"
+ file_format_type = "orc"
+ schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
+ data_save_mode="APPEND_DATA"
+ }
+}
+```
+
+## Changelog
+
+### 2.3.0-beta 2022-10-20
+
+- Add S3File Sink Connector
+
+### 2.3.0 2022-12-30
+
+- [BugFix] Fixed the following bugs that failed to write data to files ([3258](https://github.com/apache/seatunnel/pull/3258))
+ - When field from upstream is null it will throw NullPointerException
+ - Sink columns mapping failed
+ - When restore writer from states getting transaction directly failed
+- [Feature] Support S3A protocol ([3632](https://github.com/apache/seatunnel/pull/3632))
+ - Allow user to add additional hadoop-s3 parameters
+ - Allow the use of the s3a protocol
+ - Decouple hadoop-aws dependencies
+- [Improve] Support setting batch size for every file ([3625](https://github.com/apache/seatunnel/pull/3625))
+- [Feature]Set S3 AK to optional ([3688](https://github.com/apache/seatunnel/pull/))
+
+### Next version
+
+- [Improve] Support file compress ([3899](https://github.com/apache/seatunnel/pull/3899))
+
diff --git a/docs/zh/connector-v2/sink/SelectDB-Cloud.md b/docs/zh/connector-v2/sink/SelectDB-Cloud.md
new file mode 100644
index 00000000000..6ad2997903b
--- /dev/null
+++ b/docs/zh/connector-v2/sink/SelectDB-Cloud.md
@@ -0,0 +1,179 @@
+# SelectDB Cloud
+
+> SelectDB Cloud sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to send data to SelectDB Cloud. Both support streaming and batch mode.
+The internal implementation of SelectDB Cloud sink connector upload after batch caching and commit the CopyInto sql to load data into the table.
+
+## Supported DataSource Info
+
+:::tip
+
+Version Supported
+
+* supported `SelectDB Cloud version is >= 2.2.x`
+
+:::
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|--------------------|--------|----------|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
+| load-url | String | Yes | - | `SelectDB Cloud` warehouse http address, the format is `warehouse_ip:http_port` |
+| jdbc-url | String | Yes | - | `SelectDB Cloud` warehouse jdbc address, the format is `warehouse_ip:mysql_port` |
+| cluster-name | String | Yes | - | `SelectDB Cloud` cluster name |
+| username | String | Yes | - | `SelectDB Cloud` user username |
+| password | String | Yes | - | `SelectDB Cloud` user password |
+| table.identifier | String | Yes | - | The name of `SelectDB Cloud` table, the format is `database.table` |
+| sink.enable-delete | bool | No | false | Whether to enable deletion. This option requires SelectDB Cloud table to enable batch delete function, and only supports Unique model. |
+| sink.max-retries | int | No | 3 | the max retry times if writing records to database failed |
+| sink.buffer-size | int | No | 10 * 1024 * 1024 (1MB) | the buffer size to cache data for stream load. |
+| sink.buffer-count | int | No | 10000 | the buffer count to cache data for stream load. |
+| selectdb.config | map | yes | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql,and supported formats. |
+
+## Data Type Mapping
+
+| SelectDB Cloud Data type | SeaTunnel Data type |
+|--------------------------|-----------------------------------------|
+| BOOLEAN | BOOLEAN |
+| TINYINT | TINYINT |
+| SMALLINT | SMALLINT TINYINT |
+| INT | INT SMALLINT TINYINT |
+| BIGINT | BIGINT INT SMALLINT TINYINT |
+| LARGEINT | BIGINT INT SMALLINT TINYINT |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE FLOAT |
+| DECIMAL | DECIMAL DOUBLE FLOAT |
+| DATE | DATE |
+| DATETIME | TIMESTAMP |
+| CHAR | STRING |
+| VARCHAR | STRING |
+| STRING | STRING |
+| ARRAY | ARRAY |
+| MAP | MAP |
+| JSON | STRING |
+| HLL | Not supported yet |
+| BITMAP | Not supported yet |
+| QUANTILE_STATE | Not supported yet |
+| STRUCT | Not supported yet |
+
+#### Supported import data formats
+
+The supported formats include CSV and JSON
+
+## Task Example
+
+### Simple:
+
+> The following example describes writing multiple data types to SelectDBCloud, and users need to create corresponding tables downstream
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+ checkpoint.interval = 10000
+}
+
+source {
+ FakeSource {
+ row.num = 10
+ map.size = 10
+ array.size = 10
+ bytes.length = 10
+ string.length = 10
+ schema = {
+ fields {
+ c_map = "map>"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(16, 1)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+sink {
+ SelectDBCloud {
+ load-url = "warehouse_ip:http_port"
+ jdbc-url = "warehouse_ip:mysql_port"
+ cluster-name = "Cluster"
+ table.identifier = "test.test"
+ username = "admin"
+ password = "******"
+ selectdb.config {
+ file.type = "json"
+ }
+ }
+}
+```
+
+### Use JSON format to import data
+
+```
+sink {
+ SelectDBCloud {
+ load-url = "warehouse_ip:http_port"
+ jdbc-url = "warehouse_ip:mysql_port"
+ cluster-name = "Cluster"
+ table.identifier = "test.test"
+ username = "admin"
+ password = "******"
+ selectdb.config {
+ file.type = "json"
+ }
+ }
+}
+
+```
+
+### Use CSV format to import data
+
+```
+sink {
+ SelectDBCloud {
+ load-url = "warehouse_ip:http_port"
+ jdbc-url = "warehouse_ip:mysql_port"
+ cluster-name = "Cluster"
+ table.identifier = "test.test"
+ username = "admin"
+ password = "******"
+ selectdb.config {
+ file.type = "csv"
+ file.column_separator = ","
+ file.line_delimiter = "\n"
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- [Feature] Support SelectDB Cloud Sink Connector [3958](https://github.com/apache/seatunnel/pull/3958)
+- [Improve] Refactor some SelectDB Cloud Sink code as well as support copy into batch and async flush and cdc [4312](https://github.com/apache/seatunnel/pull/4312)
+
diff --git a/docs/zh/connector-v2/sink/Sentry.md b/docs/zh/connector-v2/sink/Sentry.md
new file mode 100644
index 00000000000..1a31d1c87be
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Sentry.md
@@ -0,0 +1,78 @@
+# Sentry
+
+## Description
+
+Write message to Sentry.
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------------|---------|----------|---------------|
+| dsn | string | yes | - |
+| env | string | no | - |
+| release | string | no | - |
+| cacheDirPath | string | no | - |
+| enableExternalConfiguration | boolean | no | - |
+| maxCacheItems | number | no | - |
+| flushTimeoutMills | number | no | - |
+| maxQueueSize | number | no | - |
+| common-options | | no | - |
+
+### dsn [string]
+
+The DSN tells the SDK where to send the events to.
+
+### env [string]
+
+specify the environment
+
+### release [string]
+
+specify the release
+
+### cacheDirPath [string]
+
+the cache dir path for caching offline events
+
+### enableExternalConfiguration [boolean]
+
+if loading properties from external sources is enabled.
+
+### maxCacheItems [number]
+
+The max cache items for capping the number of events Default is 30
+
+### flushTimeoutMillis [number]
+
+Controls how many seconds to wait before flushing down. Sentry SDKs cache events from a background queue and this queue is given a certain amount to drain pending events Default is 15000 = 15s
+
+### maxQueueSize [number]
+
+Max queue size before flushing events/envelopes to the disk
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details
+
+## Example
+
+```
+ Sentry {
+ dsn = "https://xxx@sentry.xxx.com:9999/6"
+ enableExternalConfiguration = true
+ maxCacheItems = 1000
+ env = prod
+ }
+
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Sentry Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/SftpFile.md b/docs/zh/connector-v2/sink/SftpFile.md
new file mode 100644
index 00000000000..7bb3f12559b
--- /dev/null
+++ b/docs/zh/connector-v2/sink/SftpFile.md
@@ -0,0 +1,233 @@
+# SftpFile
+
+> Sftp file sink connector
+
+## Description
+
+Output data to Sftp .
+
+:::tip
+
+If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+
+If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+:::
+
+## Key features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+By default, we use 2PC commit to ensure `exactly-once`
+
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Options
+
+| name | type | required | default value | remarks |
+|----------------------------------|---------|----------|--------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
+| host | string | yes | - | |
+| port | int | yes | - | |
+| username | string | yes | - | |
+| password | string | yes | - | |
+| path | string | yes | - | |
+| tmp_path | string | yes | /tmp/seatunnel | The result file will write to a tmp path first and then use `mv` to submit tmp dir to target dir. Need a FTP dir. |
+| custom_filename | boolean | no | false | Whether you need custom the filename |
+| file_name_expression | string | no | "${transactionId}" | Only used when custom_filename is true |
+| filename_time_format | string | no | "yyyy.MM.dd" | Only used when custom_filename is true |
+| file_format_type | string | no | "csv" | |
+| field_delimiter | string | no | '\001' | Only used when file_format_type is text |
+| row_delimiter | string | no | "\n" | Only used when file_format_type is text |
+| have_partition | boolean | no | false | Whether you need processing partitions. |
+| partition_by | array | no | - | Only used then have_partition is true |
+| partition_dir_expression | string | no | "${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/" | Only used then have_partition is true |
+| is_partition_field_write_in_file | boolean | no | false | Only used then have_partition is true |
+| sink_columns | array | no | | When this parameter is empty, all fields are sink columns |
+| is_enable_transaction | boolean | no | true | |
+| batch_size | int | no | 1000000 | |
+| compress_codec | string | no | none | |
+| common-options | object | no | - | |
+| max_rows_in_memory | int | no | - | Only used when file_format_type is excel. |
+| sheet_name | string | no | Sheet${Random number} | Only used when file_format_type is excel. |
+
+### host [string]
+
+The target sftp host is required
+
+### port [int]
+
+The target sftp port is required
+
+### username [string]
+
+The target sftp username is required
+
+### password [string]
+
+The target sftp password is required
+
+### path [string]
+
+The target dir path is required.
+
+### custom_filename [boolean]
+
+Whether custom the filename
+
+### file_name_expression [string]
+
+Only used when `custom_filename` is `true`
+
+`file_name_expression` describes the file expression which will be created into the `path`. We can add the variable `${now}` or `${uuid}` in the `file_name_expression`, like `test_${uuid}_${now}`,
+`${now}` represents the current time, and its format can be defined by specifying the option `filename_time_format`.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+### filename_time_format [string]
+
+Only used when `custom_filename` is `true`
+
+When the format in the `file_name_expression` parameter is `xxxx-${now}` , `filename_time_format` can specify the time format of the path, and the default value is `yyyy.MM.dd` . The commonly used time formats are listed as follows:
+
+| Symbol | Description |
+|--------|--------------------|
+| y | Year |
+| M | Month |
+| d | Day of month |
+| H | Hour in day (0-23) |
+| m | Minute in hour |
+| s | Second in minute |
+
+### file_format_type [string]
+
+We supported as the following file types:
+
+`text` `json` `csv` `orc` `parquet` `excel`
+
+Please note that, The final file name will end with the file_format_type's suffix, the suffix of the text file is `txt`.
+
+### field_delimiter [string]
+
+The separator between columns in a row of data. Only needed by `text` file format.
+
+### row_delimiter [string]
+
+The separator between rows in a file. Only needed by `text` file format.
+
+### have_partition [boolean]
+
+Whether you need processing partitions.
+
+### partition_by [array]
+
+Only used when `have_partition` is `true`.
+
+Partition data based on selected fields.
+
+### partition_dir_expression [string]
+
+Only used when `have_partition` is `true`.
+
+If the `partition_by` is specified, we will generate the corresponding partition directory based on the partition information, and the final file will be placed in the partition directory.
+
+Default `partition_dir_expression` is `${k0}=${v0}/${k1}=${v1}/.../${kn}=${vn}/`. `k0` is the first partition field and `v0` is the value of the first partition field.
+
+### is_partition_field_write_in_file [boolean]
+
+Only used when `have_partition` is `true`.
+
+If `is_partition_field_write_in_file` is `true`, the partition field and the value of it will be write into data file.
+
+For example, if you want to write a Hive Data File, Its value should be `false`.
+
+### sink_columns [array]
+
+Which columns need be wrote to file, default value is all the columns get from `Transform` or `Source`.
+The order of the fields determines the order in which the file is actually written.
+
+### is_enable_transaction [boolean]
+
+If `is_enable_transaction` is true, we will ensure that data will not be lost or duplicated when it is written to the target directory.
+
+Please note that, If `is_enable_transaction` is `true`, we will auto add `${transactionId}_` in the head of the file.
+
+Only support `true` now.
+
+### batch_size [int]
+
+The maximum number of rows in a file. For SeaTunnel Engine, the number of lines in the file is determined by `batch_size` and `checkpoint.interval` jointly decide. If the value of `checkpoint.interval` is large enough, sink writer will write rows in a file until the rows in the file larger than `batch_size`. If `checkpoint.interval` is small, the sink writer will create a new file when a new checkpoint trigger.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc: `lzo` `snappy` `lz4` `zlib` `none`
+- parquet: `lzo` `snappy` `lz4` `gzip` `brotli` `zstd` `none`
+
+Tips: excel type does not support any compression format
+
+### common options
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+### max_rows_in_memory
+
+When File Format is Excel,The maximum number of data items that can be cached in the memory.
+
+### sheet_name
+
+Writer the sheet of the workbook
+
+## Example
+
+For text file format with `have_partition` and `custom_filename` and `sink_columns`
+
+```bash
+
+SftpFile {
+ host = "xxx.xxx.xxx.xxx"
+ port = 22
+ username = "username"
+ password = "password"
+ path = "/data/sftp/seatunnel/job1"
+ tmp_path = "/data/sftp/seatunnel/tmp"
+ file_format_type = "text"
+ field_delimiter = "\t"
+ row_delimiter = "\n"
+ have_partition = true
+ partition_by = ["age"]
+ partition_dir_expression = "${k0}=${v0}"
+ is_partition_field_write_in_file = true
+ custom_filename = true
+ file_name_expression = "${transactionId}_${now}"
+ filename_time_format = "yyyy.MM.dd"
+ sink_columns = ["name","age"]
+ is_enable_transaction = true
+}
+
+```
+
+## Changelog
+
+### 2.3.0 2022-12-30
+
+- Add SftpFile Sink Connector
+- [BugFix] Fixed the following bugs that failed to write data to files ([3258](https://github.com/apache/seatunnel/pull/3258))
+ - When field from upstream is null it will throw NullPointerException
+ - Sink columns mapping failed
+ - When restore writer from states getting transaction directly failed
+- [Improve] Support setting batch size for every file ([3625](https://github.com/apache/seatunnel/pull/3625))
+
+### Next version
+
+- [Improve] Support file compress ([3899](https://github.com/apache/seatunnel/pull/3899))
+
diff --git a/docs/zh/connector-v2/sink/Slack.md b/docs/zh/connector-v2/sink/Slack.md
new file mode 100644
index 00000000000..7ed87d2022c
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Slack.md
@@ -0,0 +1,54 @@
+# Slack
+
+> Slack sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [cdc](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to send data to Slack Channel. Both support streaming and batch mode.
+
+> For example, if the data from upstream is [`age: 12, name: huan`], the content send to socket server is the following: `{"name":"huan","age":17}`
+
+## Data Type Mapping
+
+All data types are mapped to string.
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|----------------|--------|----------|---------|-----------------------------------------------------------------------------------------------------|
+| webhooks_url | String | Yes | - | Slack webhook url |
+| oauth_token | String | Yes | - | Slack oauth token used for the actual authentication |
+| slack_channel | String | Yes | - | slack channel for data write |
+| common-options | | no | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+
+## Task Example
+
+### Simple:
+
+```hocon
+sink {
+ SlackSink {
+ webhooks_url = "https://hooks.slack.com/services/xxxxxxxxxxxx/xxxxxxxxxxxx/xxxxxxxxxxxxxxxx"
+ oauth_token = "xoxp-xxxxxxxxxx-xxxxxxxx-xxxxxxxxx-xxxxxxxxxxx"
+ slack_channel = "channel name"
+ }
+}
+```
+
+## Changelog
+
+### new version
+
+- Add Slack Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/Snowflake.md b/docs/zh/connector-v2/sink/Snowflake.md
new file mode 100644
index 00000000000..b6da5f6ed2e
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Snowflake.md
@@ -0,0 +1,142 @@
+# Snowflake
+
+> JDBC Snowflake Sink Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+## Description
+
+Write data through jdbc. Support Batch mode and Streaming mode, support concurrent writing.
+
+## Supported DataSource list
+
+| Datasource | Supported Versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|-------------------------------------------|--------------------------------------------------------|-----------------------------------------------------------------------------|
+| snowflake | Different dependency version has different driver class. | net.snowflake.client.jdbc.SnowflakeDriver | jdbc:snowflake://.snowflakecomputing.com | [Download](https://mvnrepository.com/artifact/net.snowflake/snowflake-jdbc) |
+
+## Database dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example Snowflake datasource: cp snowflake-connector-java-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| Snowflake Data Type | SeaTunnel Data Type |
+|-----------------------------------------------------------------------------|---------------------|
+| BOOLEAN | BOOLEAN |
+| TINYINT SMALLINT BYTEINT | SHORT_TYPE |
+| INT INTEGER | INT |
+| BIGINT | LONG |
+| DECIMAL NUMERIC NUMBER | DECIMAL(x,y) |
+| DECIMAL(x,y)(Get the designated column's specified column size.>38) | DECIMAL(38,18) |
+| REAL FLOAT4 | FLOAT |
+| DOUBLE DOUBLE PRECISION FLOAT8 FLOAT | DOUBLE |
+| CHAR CHARACTER VARCHAR STRING TEXT VARIANT OBJECT | STRING |
+| DATE | DATE |
+| TIME | TIME |
+| DATETIME TIMESTAMP TIMESTAMP_LTZ TIMESTAMP_NTZ TIMESTAMP_TZ | TIMESTAMP |
+| BINARY VARBINARY GEOGRAPHY GEOMETRY | BYTES |
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|---------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:snowflake://.snowflakecomputing.com |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use Snowflake the value is `net.snowflake.client.jdbc.SnowflakeDriver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | No | - | Use this sql write upstream input datas to database. e.g `INSERT ...`,`query` have the higher priority |
+| database | String | No | - | Use this `database` and `table-name` auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| table | String | No | - | Use database and this table-name auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| primary_keys | Array | No | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql. |
+| support_upsert_by_query_primary_key_exist | Boolean | No | false | Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE_AFTER) based on query primary key exists. This configuration is only used when database unsupport upsert syntax. **Note**: that this method has low performance |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete. |
+| max_retries | Int | No | 0 | The number of retries to submit failed (executeBatch) |
+| batch_size | Int | No | 1000 | For batch writing, when the number of buffered records reaches the number of `batch_size` or the time reaches `checkpoint.interval` , the data will be flushed into the database |
+| max_commit_attempts | Int | No | 3 | The number of retries for transaction commit failures |
+| transaction_timeout_sec | Int | No | -1 | The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect exactly-once semantics |
+| auto_commit | Boolean | No | true | Automatic transaction commit is enabled by default |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | No | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+| enable_upsert | Boolean | No | true | Enable upsert by primary_keys exist, If the task has no key duplicate data, setting this parameter to `false` can speed up data import |
+
+## tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+>
+ ## Task Example
+
+### simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to JDBC Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having two fields, name (string type) and age (int type). The final target table is test_table will also be 16 rows of data in the table. Before run this job, you need create database test and table test_table in your snowflake database. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+sink {
+ jdbc {
+ url = "jdbc:snowflake://.snowflakecomputing.com"
+ driver = "net.snowflake.client.jdbc.SnowflakeDriver"
+ user = "root"
+ password = "123456"
+ query = "insert into test_table(name,age) values(?,?)"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
+### CDC(Change data capture) event
+
+> CDC change data is also supported by us In this case, you need config database, table and primary_keys.
+
+```
+sink {
+ jdbc {
+ url = "jdbc:snowflake://.snowflakecomputing.com"
+ driver = "net.snowflake.client.jdbc.SnowflakeDriver"
+ user = "root"
+ password = "123456"
+ generate_sink_sql = true
+
+
+ # You need to configure both database and table
+ database = test
+ table = sink_table
+ primary_keys = ["id","name"]
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/Socket.md b/docs/zh/connector-v2/sink/Socket.md
new file mode 100644
index 00000000000..a2349007374
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Socket.md
@@ -0,0 +1,79 @@
+# Socket
+
+> Socket sink connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to send data to Socket Server. Both support streaming and batch mode.
+
+> For example, if the data from upstream is [`age: 12, name: jared`], the content send to socket server is the following: `{"name":"jared","age":17}`
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|----------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------|
+| host | String | Yes | | socket server host |
+| port | Integer | Yes | | socket server port |
+| max_retries | Integer | No | 3 | The number of retries to send record failed |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Task Example
+
+> This is randomly generated data written to the Socket side
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+}
+
+source {
+ FakeSource {
+ result_table_name = "fake"
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+}
+
+sink {
+ Socket {
+ host = "localhost"
+ port = 9999
+ }
+}
+```
+
+* Start a port listening
+
+```shell
+nc -l -v 9999
+```
+
+* Start a SeaTunnel task
+
+* Socket Server Console print data
+
+```text
+{"name":"jared","age":17}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Socket Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/SqlServer.md b/docs/zh/connector-v2/sink/SqlServer.md
new file mode 100644
index 00000000000..1a50a01d6a6
--- /dev/null
+++ b/docs/zh/connector-v2/sink/SqlServer.md
@@ -0,0 +1,182 @@
+# SQL Server
+
+> JDBC SQL Server Sink Connector
+
+## Support SQL Server Version
+
+- server:2008 (Or later version for information only)
+
+## Support Those engines
+
+> Spark
+> Flink
+> Seatunnel Zeta
+
+## Description
+
+Write data through jdbc. Support Batch mode and Streaming mode, support concurrent writing, support exactly-once
+semantics (using XA transaction guarantee).
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+> Use `Xa transactions` to ensure `exactly-once`. So only support `exactly-once` for the database which is
+> support `Xa transactions`. You can set `is_exactly_once=true` to enable it.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions | Driver | Url | Maven |
+|------------|-------------------------|----------------------------------------------|---------------------------------|-----------------------------------------------------------------------------------|
+| SQL Server | support version >= 2008 | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://localhost:1433 | [Download](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc) |
+
+## Database dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example SQL Server datasource: cp mssql-jdbc-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| SQLserver Data Type | SeaTunnel Data Type |
+|-----------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
+| BIT | BOOLEAN |
+| TINYINT SMALLINT | SHORT |
+| INTEGER | INT |
+| BIGINT | LONG |
+| DECIMAL NUMERIC MONEY SMALLMONEY | DECIMAL((Get the designated column's specified column size)+1, (Gets the designated column's number of digits to right of the decimal point.))) |
+| REAL | FLOAT |
+| FLOAT | DOUBLE |
+| CHAR NCHAR VARCHAR NTEXT NVARCHAR TEXT | STRING |
+| DATE | LOCAL_DATE |
+| TIME | LOCAL_TIME |
+| DATETIME DATETIME2 SMALLDATETIME DATETIMEOFFSET | LOCAL_DATE_TIME |
+| TIMESTAMP BINARY VARBINARY IMAGE UNKNOWN | Not supported yet |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|---------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:sqlserver://localhost:1433;databaseName=mydatabase |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use sqlServer the value is `com.microsoft.sqlserver.jdbc.SQLServerDriver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | No | - | Use this sql write upstream input datas to database. e.g `INSERT ...`,`query` have the higher priority |
+| database | String | No | - | Use this `database` and `table-name` auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| table | String | No | - | Use database and this table-name auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| primary_keys | Array | No | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql. |
+| support_upsert_by_query_primary_key_exist | Boolean | No | false | Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE_AFTER) based on query primary key exists. This configuration is only used when database unsupport upsert syntax. **Note**: that this method has low performance |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete. |
+| max_retries | Int | No | 0 | The number of retries to submit failed (executeBatch) |
+| batch_size | Int | No | 1000 | For batch writing, when the number of buffered records reaches the number of `batch_size` or the time reaches `checkpoint.interval` , the data will be flushed into the database |
+| is_exactly_once | Boolean | No | false | Whether to enable exactly-once semantics, which will use Xa transactions. If on, you need to set `xa_data_source_class_name`. |
+| generate_sink_sql | Boolean | No | false | Generate sql statements based on the database table you want to write to |
+| xa_data_source_class_name | String | No | - | The xa data source class name of the database Driver, for example, SqlServer is `com.microsoft.sqlserver.jdbc.SQLServerXADataSource`, and please refer to appendix for other data sources |
+| max_commit_attempts | Int | No | 3 | The number of retries for transaction commit failures |
+| transaction_timeout_sec | Int | No | -1 | The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect exactly-once semantics |
+| auto_commit | Boolean | No | true | Automatic transaction commit is enabled by default |
+| common-options | | no | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+| enable_upsert | Boolean | No | true | Enable upsert by primary_keys exist, If the task has no key duplicate data, setting this parameter to `false` can speed up data import |
+
+## tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### simple:
+
+> This is one that reads Sqlserver data and inserts it directly into another table
+
+```
+env {
+ # You can set engine configuration here
+ parallelism = 10
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ Jdbc {
+ driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ user = SA
+ password = "Y.sa123456"
+ query = "select * from column_type_test.dbo.full_types_jdbc"
+ # Parallel sharding reads fields
+ partition_column = "id"
+ # Number of fragments
+ partition_num = 10
+
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/connector-v2/source/Jdbc
+}
+
+transform {
+
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Jdbc {
+ driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ user = SA
+ password = "Y.sa123456"
+ query = "insert into full_types_jdbc_sink( id, val_char, val_varchar, val_text, val_nchar, val_nvarchar, val_ntext, val_decimal, val_numeric, val_float, val_real, val_smallmoney, val_money, val_bit, val_tinyint, val_smallint, val_int, val_bigint, val_date, val_time, val_datetime2, val_datetime, val_smalldatetime ) values( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"
+
+ } # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/connector-v2/sink/Jdbc
+}
+```
+
+### CDC(Change data capture) event
+
+> CDC change data is also supported by us In this case, you need config database, table and primary_keys.
+
+```
+Jdbc {
+ source_table_name = "customers"
+ driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ user = SA
+ password = "Y.sa123456"
+ generate_sink_sql = true
+ database = "column_type_test"
+ table = "dbo.full_types_sink"
+ batch_size = 100
+ primary_keys = ["id"]
+}
+```
+
+### Exactly Once Sink
+
+> Transactional writes may be slower but more accurate to the data
+
+```
+ Jdbc {
+ driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ user = SA
+ password = "Y.sa123456"
+ query = "insert into full_types_jdbc_sink( id, val_char, val_varchar, val_text, val_nchar, val_nvarchar, val_ntext, val_decimal, val_numeric, val_float, val_real, val_smallmoney, val_money, val_bit, val_tinyint, val_smallint, val_int, val_bigint, val_date, val_time, val_datetime2, val_datetime, val_smalldatetime ) values( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"
+ is_exactly_once = "true"
+
+ xa_data_source_class_name = "com.microsoft.sqlserver.jdbc.SQLServerXADataSource"
+
+ } # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/connector-v2/sink/Jdbc
+
+```
+
diff --git a/docs/zh/connector-v2/sink/StarRocks.md b/docs/zh/connector-v2/sink/StarRocks.md
new file mode 100644
index 00000000000..03afca211b2
--- /dev/null
+++ b/docs/zh/connector-v2/sink/StarRocks.md
@@ -0,0 +1,291 @@
+# StarRocks
+
+> StarRocks sink connector
+
+## Support These Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [cdc](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to send data to StarRocks. Both support streaming and batch mode.
+The internal implementation of StarRocks sink connector is cached and imported by stream load in batches.
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-----------------------------|---------|----------|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| nodeUrls | list | yes | - | `StarRocks` cluster address, the format is `["fe_ip:fe_http_port", ...]` |
+| base-url | string | yes | - | The JDBC URL like `jdbc:mysql://localhost:9030/` or `jdbc:mysql://localhost:9030` or `jdbc:mysql://localhost:9030/db` |
+| username | string | yes | - | `StarRocks` user username |
+| password | string | yes | - | `StarRocks` user password |
+| database | string | yes | - | The name of StarRocks database |
+| table | string | no | - | The name of StarRocks table, If not set, the table name will be the name of the upstream table |
+| labelPrefix | string | no | - | The prefix of StarRocks stream load label |
+| batch_max_rows | long | no | 1024 | For batch writing, when the number of buffers reaches the number of `batch_max_rows` or the byte size of `batch_max_bytes` or the time reaches `checkpoint.interval`, the data will be flushed into the StarRocks |
+| batch_max_bytes | int | no | 5 * 1024 * 1024 | For batch writing, when the number of buffers reaches the number of `batch_max_rows` or the byte size of `batch_max_bytes` or the time reaches `checkpoint.interval`, the data will be flushed into the StarRocks |
+| max_retries | int | no | - | The number of retries to flush failed |
+| retry_backoff_multiplier_ms | int | no | - | Using as a multiplier for generating the next delay for backoff |
+| max_retry_backoff_ms | int | no | - | The amount of time to wait before attempting to retry a request to `StarRocks` |
+| enable_upsert_delete | boolean | no | false | Whether to enable upsert/delete, only supports PrimaryKey model. |
+| save_mode_create_template | string | no | see below | see below |
+| starrocks.config | map | no | - | The parameter of the stream load `data_desc` |
+| http_socket_timeout_ms | int | no | 180000 | Set http socket timeout, default is 3 minutes. |
+| schema_save_mode | Enum | no | CREATE_SCHEMA_WHEN_NOT_EXIST | Before the synchronous task is turned on, different treatment schemes are selected for the existing surface structure of the target side. |
+| data_save_mode | Enum | no | APPEND_DATA | Before the synchronous task is turned on, different processing schemes are selected for data existing data on the target side. |
+| custom_sql | String | no | - | When data_save_mode selects CUSTOM_PROCESSING, you should fill in the CUSTOM_SQL parameter. This parameter usually fills in a SQL that can be executed. SQL will be executed before synchronization tasks. |
+
+### save_mode_create_template
+
+We use templates to automatically create starrocks tables,
+which will create corresponding table creation statements based on the type of upstream data and schema type,
+and the default template can be modified according to the situation. Only work on multi-table mode at now.
+
+### table [string]
+
+Use `database` and this `table-name` auto-generate sql and receive upstream input datas write to database.
+
+This option is mutually exclusive with `query` and has a higher priority.
+
+The table parameter can fill in the name of an unwilling table, which will eventually be used as the table name of the creation table, and supports variables (`${table_name}`, `${schema_name}`). Replacement rules: `${schema_name}` will replace the SCHEMA name passed to the target side, and `${table_name}` will replace the name of the table passed to the table at the target side.
+
+for example:
+1. test_${schema_name}_${table_name}_test
+2. sink_sinktable
+3. ss_${table_name}
+
+### schema_save_mode[Enum]
+
+Before the synchronous task is turned on, different treatment schemes are selected for the existing surface structure of the target side.
+Option introduction:
+`RECREATE_SCHEMA` :Will create when the table does not exist, delete and rebuild when the table is saved
+`CREATE_SCHEMA_WHEN_NOT_EXIST` :Will Created when the table does not exist, skipped when the table is saved
+`ERROR_WHEN_SCHEMA_NOT_EXIST` :Error will be reported when the table does not exist
+
+### data_save_mode[Enum]
+
+Before the synchronous task is turned on, different processing schemes are selected for data existing data on the target side.
+Option introduction:
+`DROP_DATA`: Preserve database structure and delete data
+`APPEND_DATA`:Preserve database structure, preserve data
+`CUSTOM_PROCESSING`:User defined processing
+`ERROR_WHEN_DATA_EXISTS`:When there is data, an error is reported
+
+### custom_sql[String]
+
+When data_save_mode selects CUSTOM_PROCESSING, you should fill in the CUSTOM_SQL parameter. This parameter usually fills in a SQL that can be executed. SQL will be executed before synchronization tasks.
+
+```sql
+CREATE TABLE IF NOT EXISTS `${database}`.`${table_name}`
+(
+ ${rowtype_fields}
+) ENGINE = OLAP DISTRIBUTED BY HASH (${rowtype_primary_key})
+ PROPERTIES
+(
+ "replication_num" = "1"
+);
+```
+
+If a custom field is filled in the template, such as adding an `id` field
+
+```sql
+CREATE TABLE IF NOT EXISTS `${database}`.`${table_name}`
+(
+ id,
+ ${rowtype_fields}
+) ENGINE = OLAP DISTRIBUTED BY HASH (${rowtype_primary_key})
+ PROPERTIES
+(
+ "replication_num" = "1"
+);
+```
+
+The connector will automatically obtain the corresponding type from the upstream to complete the filling,
+and remove the id field from `rowtype_fields`. This method can be used to customize the modification of field types and attributes.
+
+You can use the following placeholders
+
+- database: Used to get the database in the upstream schema
+- table_name: Used to get the table name in the upstream schema
+- rowtype_fields: Used to get all the fields in the upstream schema, we will automatically map to the field
+ description of StarRocks
+- rowtype_primary_key: Used to get the primary key in the upstream schema (maybe a list)
+- rowtype_unique_key: Used to get the unique key in the upstream schema (maybe a list)
+
+## Data Type Mapping
+
+| StarRocks Data type | SeaTunnel Data type |
+|---------------------|---------------------|
+| BOOLEAN | BOOLEAN |
+| TINYINT | TINYINT |
+| SMALLINT | SMALLINT |
+| INT | INT |
+| BIGINT | BIGINT |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| DECIMAL | DECIMAL |
+| DATE | STRING |
+| TIME | STRING |
+| DATETIME | STRING |
+| STRING | STRING |
+| ARRAY | STRING |
+| MAP | STRING |
+| BYTES | STRING |
+
+#### Supported import data formats
+
+The supported formats include CSV and JSON
+
+## Task Example
+
+### Simple:
+
+> The following example describes writing multiple data types to StarRocks, and users need to create corresponding tables downstream
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+ checkpoint.interval = 10000
+}
+
+source {
+ FakeSource {
+ row.num = 10
+ map.size = 10
+ array.size = 10
+ bytes.length = 10
+ string.length = 10
+ schema = {
+ fields {
+ c_map = "map>"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(16, 1)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+sink {
+ StarRocks {
+ nodeUrls = ["e2e_starRocksdb:8030"]
+ username = root
+ password = ""
+ database = "test"
+ table = "e2e_table_sink"
+ batch_max_rows = 10
+ starrocks.config = {
+ format = "JSON"
+ strip_outer_array = true
+ }
+ }
+}
+```
+
+### Support write cdc changelog event(INSERT/UPDATE/DELETE)
+
+```hocon
+sink {
+ StarRocks {
+ nodeUrls = ["e2e_starRocksdb:8030"]
+ username = root
+ password = ""
+ database = "test"
+ table = "e2e_table_sink"
+ ...
+
+ // Support upsert/delete event synchronization (enable_upsert_delete=true), only supports PrimaryKey model.
+ enable_upsert_delete = true
+ }
+}
+```
+
+### Use JSON format to import data
+
+```
+sink {
+ StarRocks {
+ nodeUrls = ["e2e_starRocksdb:8030"]
+ username = root
+ password = ""
+ database = "test"
+ table = "e2e_table_sink"
+ batch_max_rows = 10
+ starrocks.config = {
+ format = "JSON"
+ strip_outer_array = true
+ }
+ }
+}
+
+```
+
+### Use CSV format to import data
+
+```
+sink {
+ StarRocks {
+ nodeUrls = ["e2e_starRocksdb:8030"]
+ username = root
+ password = ""
+ database = "test"
+ table = "e2e_table_sink"
+ batch_max_rows = 10
+ starrocks.config = {
+ format = "CSV"
+ column_separator = "\\x01"
+ row_delimiter = "\\x02"
+ }
+ }
+}
+```
+
+### Use save_mode function
+
+```
+sink {
+ StarRocks {
+ nodeUrls = ["e2e_starRocksdb:8030"]
+ username = root
+ password = ""
+ database = "test"
+ table = "test_${schema_name}_${table_name}"
+ schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
+ data_save_mode="APPEND_DATA"
+ batch_max_rows = 10
+ starrocks.config = {
+ format = "CSV"
+ column_separator = "\\x01"
+ row_delimiter = "\\x02"
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add StarRocks Sink Connector
+- [Improve] Change Connector Custom Config Prefix To Map [3719](https://github.com/apache/seatunnel/pull/3719)
+- [Feature] Support write cdc changelog event(INSERT/UPDATE/DELETE) [3865](https://github.com/apache/seatunnel/pull/3865)
+
diff --git a/docs/zh/connector-v2/sink/TDengine.md b/docs/zh/connector-v2/sink/TDengine.md
new file mode 100644
index 00000000000..455e0effa20
--- /dev/null
+++ b/docs/zh/connector-v2/sink/TDengine.md
@@ -0,0 +1,71 @@
+# TDengine
+
+> TDengine sink connector
+
+## Description
+
+Used to write data to TDengine. You need to create stable before running seatunnel task
+
+## Key features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [cdc](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------|--------|----------|---------------|
+| url | string | yes | - |
+| username | string | yes | - |
+| password | string | yes | - |
+| database | string | yes | |
+| stable | string | yes | - |
+| timezone | string | no | UTC |
+
+### url [string]
+
+the url of the TDengine when you select the TDengine
+
+e.g.
+
+```
+jdbc:TAOS-RS://localhost:6041/
+```
+
+### username [string]
+
+the username of the TDengine when you select
+
+### password [string]
+
+the password of the TDengine when you select
+
+### database [string]
+
+the database of the TDengine when you select
+
+### stable [string]
+
+the stable of the TDengine when you select
+
+### timezone [string]
+
+the timeznoe of the TDengine sever, it's important to the ts field
+
+## Example
+
+### sink
+
+```hocon
+sink {
+ TDengine {
+ url : "jdbc:TAOS-RS://localhost:6041/"
+ username : "root"
+ password : "taosdata"
+ database : "power2"
+ stable : "meters2"
+ timezone: UTC
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/Tablestore.md b/docs/zh/connector-v2/sink/Tablestore.md
new file mode 100644
index 00000000000..8f161ad25f6
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Tablestore.md
@@ -0,0 +1,72 @@
+# Tablestore
+
+> Tablestore sink connector
+
+## Description
+
+Write data to `Tablestore`
+
+## Key features
+
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-------------------|--------|----------|---------------|
+| end_point | string | yes | - |
+| instance_name | string | yes | - |
+| access_key_id | string | yes | - |
+| access_key_secret | string | yes | - |
+| table | string | yes | - |
+| primary_keys | array | yes | - |
+| batch_size | string | no | 25 |
+| common-options | config | no | - |
+
+### end_point [string]
+
+endPoint to write to Tablestore.
+
+### instanceName [string]
+
+The instanceName of Tablestore.
+
+### access_key_id [string]
+
+The access id of Tablestore.
+
+### access_key_secret [string]
+
+The access secret of Tablestore.
+
+### table [string]
+
+The table of Tablestore.
+
+### primaryKeys [array]
+
+The primaryKeys of Tablestore.
+
+### common options [ config ]
+
+Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details.
+
+## Example
+
+```bash
+Tablestore {
+ end_point = "xxxx"
+ instance_name = "xxxx"
+ access_key_id = "xxxx"
+ access_key_secret = "xxxx"
+ table = "sink"
+ primary_keys = ["pk_1","pk_2","pk_3","pk_4"]
+ }
+```
+
+## Changelog
+
+### next version
+
+- Add Tablestore Sink Connector
+
diff --git a/docs/zh/connector-v2/sink/Vertica.md b/docs/zh/connector-v2/sink/Vertica.md
new file mode 100644
index 00000000000..dc302c5d7d5
--- /dev/null
+++ b/docs/zh/connector-v2/sink/Vertica.md
@@ -0,0 +1,183 @@
+# Vertica
+
+> JDBC Vertica Sink Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+Write data through jdbc. Support Batch mode and Streaming mode, support concurrent writing, support exactly-once
+semantics (using XA transaction guarantee).
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://www.vertica.com/download/vertica/client-drivers/) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://www.vertica.com/download/vertica/client-drivers/) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [cdc](../../concept/connector-v2-features.md)
+
+> Use `Xa transactions` to ensure `exactly-once`. So only support `exactly-once` for the database which is
+> support `Xa transactions`. You can set `is_exactly_once=true` to enable it.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|-------------------------|---------------------------------------|----------------------------------------------------------------------|
+| Vertica | Different dependency version has different driver class. | com.vertica.jdbc.Driver | jdbc:vertica://localhost:5433/vertica | [Download](https://www.vertica.com/download/vertica/client-drivers/) |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example Vertica datasource: cp vertica-jdbc-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| Vertica Data Type | SeaTunnel Data Type |
+|-----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| BIT(1) INT UNSIGNED | BOOLEAN |
+| TINYINT TINYINT UNSIGNED SMALLINT SMALLINT UNSIGNED MEDIUMINT MEDIUMINT UNSIGNED INT INTEGER YEAR | INT |
+| INT UNSIGNED INTEGER UNSIGNED BIGINT | BIGINT |
+| BIGINT UNSIGNED | DECIMAL(20,0) |
+| DECIMAL(x,y)(Get the designated column's specified column size.<38) | DECIMAL(x,y) |
+| DECIMAL(x,y)(Get the designated column's specified column size.>38) | DECIMAL(38,18) |
+| DECIMAL UNSIGNED | DECIMAL((Get the designated column's specified column size)+1, (Gets the designated column's number of digits to right of the decimal point.))) |
+| FLOAT FLOAT UNSIGNED | FLOAT |
+| DOUBLE DOUBLE UNSIGNED | DOUBLE |
+| CHAR VARCHAR TINYTEXT MEDIUMTEXT TEXT LONGTEXT JSON | STRING |
+| DATE | DATE |
+| TIME | TIME |
+| DATETIME TIMESTAMP | TIMESTAMP |
+| TINYBLOB MEDIUMBLOB BLOB LONGBLOB BINARY VARBINAR BIT(n) | BYTES |
+| GEOMETRY UNKNOWN | Not supported yet |
+
+## Sink Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|---------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:vertica://localhost:5433/vertica |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use Vertical the value is `com.vertica.jdbc.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | No | - | Use this sql write upstream input datas to database. e.g `INSERT ...`,`query` have the higher priority |
+| database | String | No | - | Use this `database` and `table-name` auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| table | String | No | - | Use database and this table-name auto-generate sql and receive upstream input datas write to database. This option is mutually exclusive with `query` and has a higher priority. |
+| primary_keys | Array | No | - | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql. |
+| support_upsert_by_query_primary_key_exist | Boolean | No | false | Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE_AFTER) based on query primary key exists. This configuration is only used when database unsupport upsert syntax. **Note**: that this method has low performance |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete. |
+| max_retries | Int | No | 0 | The number of retries to submit failed (executeBatch) |
+| batch_size | Int | No | 1000 | For batch writing, when the number of buffered records reaches the number of `batch_size` or the time reaches `checkpoint.interval` , the data will be flushed into the database |
+| is_exactly_once | Boolean | No | false | Whether to enable exactly-once semantics, which will use Xa transactions. If on, you need to set `xa_data_source_class_name`. |
+| generate_sink_sql | Boolean | No | false | Generate sql statements based on the database table you want to write to |
+| xa_data_source_class_name | String | No | - | The xa data source class name of the database Driver, for example, vertical is `com.vertical.cj.jdbc.VerticalXADataSource`, and please refer to appendix for other data sources |
+| max_commit_attempts | Int | No | 3 | The number of retries for transaction commit failures |
+| transaction_timeout_sec | Int | No | -1 | The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect exactly-once semantics |
+| auto_commit | Boolean | No | true | Automatic transaction commit is enabled by default |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | no | - | Sink plugin common parameters, please refer to [Sink Common Options](common-options.md) for details |
+| enable_upsert | Boolean | No | true | Enable upsert by primary_keys exist, If the task has no key duplicate data, setting this parameter to `false` can speed up data import |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that automatically generates data through FakeSource and sends it to JDBC Sink. FakeSource generates a total of 16 rows of data (row.num=16), with each row having two fields, name (string type) and age (int type). The final target table is test_table will also be 16 rows of data in the table. Before run this job, you need create database test and table test_table in your vertical. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ FakeSource {
+ parallelism = 1
+ result_table_name = "fake"
+ row.num = 16
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ jdbc {
+ url = "jdbc:vertica://localhost:5433/vertica"
+ driver = "com.vertica.jdbc.Driver"
+ user = "root"
+ password = "123456"
+ query = "insert into test_table(name,age) values(?,?)"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
+### Generate Sink SQL
+
+> This example not need to write complex sql statements, you can configure the database name table name to automatically generate add statements for you
+
+```
+sink {
+ jdbc {
+ url = "jdbc:vertica://localhost:5433/vertica"
+ driver = "com.vertica.jdbc.Driver"
+ user = "root"
+ password = "123456"
+ # Automatically generate sql statements based on database table names
+ generate_sink_sql = true
+ database = test
+ table = test_table
+ }
+}
+```
+
+### Exactly-once :
+
+> For accurate write scene we guarantee accurate once
+
+```
+sink {
+ jdbc {
+ url = "jdbc:vertica://localhost:5433/vertica"
+ driver = "com.vertica.jdbc.Driver"
+
+ max_retries = 0
+ user = "root"
+ password = "123456"
+ query = "insert into test_table(name,age) values(?,?)"
+
+ is_exactly_once = "true"
+
+ xa_data_source_class_name = "com.vertical.cj.jdbc.VerticalXADataSource"
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/sink/common-options.md b/docs/zh/connector-v2/sink/common-options.md
new file mode 100644
index 00000000000..2addc49278d
--- /dev/null
+++ b/docs/zh/connector-v2/sink/common-options.md
@@ -0,0 +1,58 @@
+# Sink Common Options
+
+> Common parameters of sink connectors
+
+| name | type | required | default value |
+|-------------------|--------|----------|---------------|
+| source_table_name | string | no | - |
+| parallelism | int | no | - |
+
+### source_table_name [string]
+
+When `source_table_name` is not specified, the current plug-in processes the data set `dataset` output by the previous plugin in the configuration file;
+
+When `source_table_name` is specified, the current plug-in is processing the data set corresponding to this parameter.
+
+### parallelism [int]
+
+When `parallelism` is not specified, the `parallelism` in env is used by default.
+
+When parallelism is specified, it will override the parallelism in env.
+
+## Examples
+
+```bash
+source {
+ FakeSourceStream {
+ parallelism = 2
+ result_table_name = "fake"
+ field_name = "name,age"
+ }
+}
+
+transform {
+ Filter {
+ source_table_name = "fake"
+ fields = [name]
+ result_table_name = "fake_name"
+ }
+ Filter {
+ source_table_name = "fake"
+ fields = [age]
+ result_table_name = "fake_age"
+ }
+}
+
+sink {
+ Console {
+ source_table_name = "fake_name"
+ }
+ Console {
+ source_table_name = "fake_age"
+ }
+}
+```
+
+> If the job only have one source and one(or zero) transform and one sink, You do not need to specify `source_table_name` and `result_table_name` for connector.
+> If the number of any operator in source, transform and sink is greater than 1, you must specify the `source_table_name` and `result_table_name` for each connector in the job.
+
diff --git a/docs/zh/connector-v2/source/AmazonDynamoDB.md b/docs/zh/connector-v2/source/AmazonDynamoDB.md
new file mode 100644
index 00000000000..3261046b739
--- /dev/null
+++ b/docs/zh/connector-v2/source/AmazonDynamoDB.md
@@ -0,0 +1,120 @@
+# AmazonDynamoDB
+
+> AmazonDynamoDB source connector
+
+## Description
+
+Read data from Amazon DynamoDB.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------|--------|----------|---------------|
+| url | string | yes | - |
+| region | string | yes | - |
+| access_key_id | string | yes | - |
+| secret_access_key | string | yes | - |
+| table | string | yes | - |
+| schema | config | yes | - |
+| common-options | | yes | - |
+| scan_item_limit | | false | - |
+| parallel_scan_threads | | false | - |
+
+### url [string]
+
+The URL to read to Amazon Dynamodb.
+
+### region [string]
+
+The region of Amazon Dynamodb.
+
+### accessKeyId [string]
+
+The access id of Amazon DynamoDB.
+
+### secretAccessKey [string]
+
+The access secret of Amazon DynamoDB.
+
+### table [string]
+
+The table of Amazon DynamoDB.
+
+### schema [Config]
+
+#### fields [config]
+
+Amazon Dynamodb is a NOSQL database service of support keys-value storage and document data structure,there is no way to get the data type.Therefore, we must configure schema.
+
+such as:
+
+```
+schema {
+ fields {
+ id = int
+ key_aa = string
+ key_bb = string
+ }
+}
+```
+
+### common options
+
+Source Plugin common parameters, refer to [Source Plugin](common-options.md) for details
+
+### scan_item_limit
+
+number of item each scan request should return
+
+### parallel_scan_threads
+
+number of logical segments for parallel scan
+
+## Example
+
+```bash
+Amazondynamodb {
+ url = "http://127.0.0.1:8000"
+ region = "us-east-1"
+ accessKeyId = "dummy-key"
+ secretAccessKey = "dummy-secret"
+ table = "TableName"
+ schema = {
+ fields {
+ artist = string
+ c_map = "map>"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Amazon DynamoDB Source Connector
+- Add source split to Amazondynamodb Connectors
+
diff --git a/docs/zh/connector-v2/source/AmazonSqs.md b/docs/zh/connector-v2/source/AmazonSqs.md
new file mode 100644
index 00000000000..accd6ec6c67
--- /dev/null
+++ b/docs/zh/connector-v2/source/AmazonSqs.md
@@ -0,0 +1,81 @@
+# AmazonSqs
+
+> AmazonSqs source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Read data from Amazon SQS.
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------|--------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The Queue URL to read from Amazon SQS. |
+| region | String | No | - | The AWS region for the SQS service |
+| schema | Config | No | - | The structure of the data, including field names and field types. |
+| format | String | No | json | Data format. The default format is json. Optional text format, canal-json and debezium-json.If you use json or text format. The default field separator is ", ". If you customize the delimiter, add the "field_delimiter" option.If you use canal format, please refer to [canal-json](../formats/canal-json.md) for details.If you use debezium format, please refer to [debezium-json](../formats/debezium-json.md) for details. |
+| format_error_handle_way | String | No | fail | The processing method of data format error. The default value is fail, and the optional value is (fail, skip). When fail is selected, data format error will block and an exception will be thrown. When skip is selected, data format error will skip this line data. |
+| field_delimiter | String | No | , | Customize the field delimiter for data format. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Task Example
+
+```bash
+source {
+ AmazonSqs {
+ url = "http://127.0.0.1:4566"
+ region = "us-east-1"
+ format = text
+ field_delimiter = "#"
+ schema = {
+ fields {
+ artist = string
+ c_map = "map>"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+## Changelog
+
+### next version
+
diff --git a/docs/zh/connector-v2/source/Cassandra.md b/docs/zh/connector-v2/source/Cassandra.md
new file mode 100644
index 00000000000..d4d4e97088a
--- /dev/null
+++ b/docs/zh/connector-v2/source/Cassandra.md
@@ -0,0 +1,80 @@
+# Cassandra
+
+> Cassandra source connector
+
+## Description
+
+Read data from Apache Cassandra.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-------------------|--------|----------|---------------|
+| host | String | Yes | - |
+| keyspace | String | Yes | - |
+| cql | String | Yes | - |
+| username | String | No | - |
+| password | String | No | - |
+| datacenter | String | No | datacenter1 |
+| consistency_level | String | No | LOCAL_ONE |
+
+### host [string]
+
+`Cassandra` cluster address, the format is `host:port` , allowing multiple `hosts` to be specified. Such as
+`"cassandra1:9042,cassandra2:9042"`.
+
+### keyspace [string]
+
+The `Cassandra` keyspace.
+
+### cql [String]
+
+The query cql used to search data though Cassandra session.
+
+### username [string]
+
+`Cassandra` user username.
+
+### password [string]
+
+`Cassandra` user password.
+
+### datacenter [String]
+
+The `Cassandra` datacenter, default is `datacenter1`.
+
+### consistency_level [String]
+
+The `Cassandra` write consistency level, default is `LOCAL_ONE`.
+
+## Examples
+
+```hocon
+source {
+ Cassandra {
+ host = "localhost:9042"
+ username = "cassandra"
+ password = "cassandra"
+ datacenter = "datacenter1"
+ keyspace = "test"
+ cql = "select * from source_table"
+ result_table_name = "source_table"
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Cassandra Source Connector
+
diff --git a/docs/zh/connector-v2/source/Clickhouse.md b/docs/zh/connector-v2/source/Clickhouse.md
new file mode 100644
index 00000000000..c23b25e92e7
--- /dev/null
+++ b/docs/zh/connector-v2/source/Clickhouse.md
@@ -0,0 +1,97 @@
+# Clickhouse
+
+> Clickhouse source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+> supports query SQL and can achieve projection effect.
+
+## Description
+
+Used to read data from Clickhouse.
+
+## Supported DataSource Info
+
+In order to use the Clickhouse connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Dependency |
+|------------|--------------------|------------------------------------------------------------------------------------------------------------------|
+| Clickhouse | universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/seatunnel-connectors-v2/connector-clickhouse) |
+
+## Data Type Mapping
+
+| Clickhouse Data Type | SeaTunnel Data Type |
+|-----------------------------------------------------------------------------------------------------------------------------------------------|---------------------|
+| String / Int128 / UInt128 / Int256 / UInt256 / Point / Ring / Polygon MultiPolygon | STRING |
+| Int8 / UInt8 / Int16 / UInt16 / Int32 | INT |
+| UInt64 / Int64 / IntervalYear / IntervalQuarter / IntervalMonth / IntervalWeek / IntervalDay / IntervalHour / IntervalMinute / IntervalSecond | BIGINT |
+| Float64 | DOUBLE |
+| Decimal | DECIMAL |
+| Float32 | FLOAT |
+| Date | DATE |
+| DateTime | TIME |
+| Array | ARRAY |
+| Map | MAP |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------|--------|----------|------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
+| host | String | Yes | - | `ClickHouse` cluster address, the format is `host:port` , allowing multiple `hosts` to be specified. Such as `"host1:8123,host2:8123"` . |
+| database | String | Yes | - | The `ClickHouse` database. |
+| sql | String | Yes | - | The query sql used to search data though Clickhouse server. |
+| username | String | Yes | - | `ClickHouse` user username. |
+| password | String | Yes | - | `ClickHouse` user password. |
+| server_time_zone | String | No | ZoneId.systemDefault() | The session time zone in database server. If not set, then ZoneId.systemDefault() is used to determine the server time zone. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+## How to Create a Clickhouse Data Synchronization Jobs
+
+The following example demonstrates how to create a data synchronization job that reads data from Clickhouse and prints it on the local client:
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 10
+ job.mode = "BATCH"
+}
+
+# Create a source to connect to Clickhouse
+source {
+ Clickhouse {
+ host = "localhost:8123"
+ database = "default"
+ sql = "select * from test where age = 20 limit 100"
+ username = "xxxxx"
+ password = "xxxxx"
+ server_time_zone = "UTC"
+ result_table_name = "test"
+ }
+}
+
+# Console printing of the read Clickhouse data
+sink {
+ Console {
+ parallelism = 1
+ }
+}
+```
+
+### Tips
+
+> 1.[SeaTunnel Deployment Document](../../start-v2/locally/deployment.md).
+
diff --git a/docs/zh/connector-v2/source/CosFile.md b/docs/zh/connector-v2/source/CosFile.md
new file mode 100644
index 00000000000..406c86fab5b
--- /dev/null
+++ b/docs/zh/connector-v2/source/CosFile.md
@@ -0,0 +1,308 @@
+# CosFile
+
+> Cos file source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+Read all the data in a split in a pollNext call. What splits are read will be saved in snapshot.
+
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Description
+
+Read data from aliyun Cos file system.
+
+:::tip
+
+If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+
+If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+To use this connector you need put hadoop-cos-{hadoop.version}-{version}.jar and cos_api-bundle-{version}.jar in ${SEATUNNEL_HOME}/lib dir, download: [Hadoop-Cos-release](https://github.com/tencentyun/hadoop-cos/releases). It only supports hadoop version 2.6.5+ and version 8.0.2+.
+
+:::
+
+## Options
+
+| name | type | required | default value |
+|---------------------------|---------|----------|---------------------|
+| path | string | yes | - |
+| file_format_type | string | yes | - |
+| bucket | string | yes | - |
+| secret_id | string | yes | - |
+| secret_key | string | yes | - |
+| region | string | yes | - |
+| read_columns | list | yes | - |
+| delimiter/field_delimiter | string | no | \001 |
+| parse_partition_from_path | boolean | no | true |
+| skip_header_row_number | long | no | 0 |
+| date_format | string | no | yyyy-MM-dd |
+| datetime_format | string | no | yyyy-MM-dd HH:mm:ss |
+| time_format | string | no | HH:mm:ss |
+| schema | config | no | - |
+| sheet_name | string | no | - |
+| file_filter_pattern | string | no | - |
+| compress_codec | string | no | none |
+| common-options | | no | - |
+
+### path [string]
+
+The source file path.
+
+### file_format_type [string]
+
+File type, supported as the following file types:
+
+`text` `csv` `parquet` `orc` `json` `excel`
+
+If you assign file type to `json`, you should also assign schema option to tell connector how to parse data to the row you want.
+
+For example:
+
+upstream data is the following:
+
+```json
+
+{"code": 200, "data": "get success", "success": true}
+
+```
+
+You can also save multiple pieces of data in one file and split them by newline:
+
+```json lines
+
+{"code": 200, "data": "get success", "success": true}
+{"code": 300, "data": "get failed", "success": false}
+
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+If you assign file type to `parquet` `orc`, schema option not required, connector can find the schema of upstream data automatically.
+
+If you assign file type to `text` `csv`, you can choose to specify the schema information or not.
+
+For example, upstream data is the following:
+
+```text
+
+tyrantlucifer#26#male
+
+```
+
+If you do not assign data schema connector will treat the upstream data as the following:
+
+| content |
+|-----------------------|
+| tyrantlucifer#26#male |
+
+If you assign data schema, you should also assign the option `field_delimiter` too except CSV file type
+
+you should assign schema and delimiter as the following:
+
+```hocon
+
+field_delimiter = "#"
+schema {
+ fields {
+ name = string
+ age = int
+ gender = string
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| name | age | gender |
+|---------------|-----|--------|
+| tyrantlucifer | 26 | male |
+
+### bucket [string]
+
+The bucket address of Cos file system, for example: `Cos://tyrantlucifer-image-bed`
+
+### secret_id [string]
+
+The secret id of Cos file system.
+
+### secret_key [string]
+
+The secret key of Cos file system.
+
+### region [string]
+
+The region of cos file system.
+
+### read_columns [list]
+
+The read column list of the data source, user can use it to implement field projection.
+
+### delimiter/field_delimiter [string]
+
+**delimiter** parameter will deprecate after version 2.3.5, please use **field_delimiter** instead.
+
+Only need to be configured when file_format is text.
+
+Field delimiter, used to tell connector how to slice and dice fields
+
+default `\001`, the same as hive's default delimiter
+
+### parse_partition_from_path [boolean]
+
+Control whether parse the partition keys and values from file path
+
+For example if you read a file from path `cosn://hadoop-cluster/tmp/seatunnel/parquet/name=tyrantlucifer/age=26`
+
+Every record data from file will be added these two fields:
+
+| name | age |
+|---------------|-----|
+| tyrantlucifer | 26 |
+
+Tips: **Do not define partition fields in schema option**
+
+### skip_header_row_number [long]
+
+Skip the first few lines, but only for the txt and csv.
+
+For example, set like following:
+
+`skip_header_row_number = 2`
+
+then SeaTunnel will skip the first 2 lines from source files
+
+### date_format [string]
+
+Date type format, used to tell connector how to convert string to date, supported as the following formats:
+
+`yyyy-MM-dd` `yyyy.MM.dd` `yyyy/MM/dd`
+
+default `yyyy-MM-dd`
+
+### datetime_format [string]
+
+Datetime type format, used to tell connector how to convert string to datetime, supported as the following formats:
+
+`yyyy-MM-dd HH:mm:ss` `yyyy.MM.dd HH:mm:ss` `yyyy/MM/dd HH:mm:ss` `yyyyMMddHHmmss`
+
+default `yyyy-MM-dd HH:mm:ss`
+
+### time_format [string]
+
+Time type format, used to tell connector how to convert string to time, supported as the following formats:
+
+`HH:mm:ss` `HH:mm:ss.SSS`
+
+default `HH:mm:ss`
+
+### schema [config]
+
+Only need to be configured when the file_format_type are text, json, excel or csv ( Or other format we can't read the schema from metadata).
+
+#### fields [Config]
+
+The schema of upstream data.
+
+### sheet_name [string]
+
+Only need to be configured when file_format is excel.
+
+Reader the sheet of the workbook.
+
+### file_filter_pattern [string]
+
+Filter pattern, which used for filtering files.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc/parquet:
+ automatically recognizes the compression type, no additional settings required.
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details.
+
+## Example
+
+```hocon
+
+ CosFile {
+ path = "/seatunnel/orc"
+ bucket = "cosn://seatunnel-test-1259587829"
+ secret_id = "xxxxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxxxx"
+ region = "ap-chengdu"
+ file_format_type = "orc"
+ }
+
+```
+
+```hocon
+
+ CosFile {
+ path = "/seatunnel/json"
+ bucket = "cosn://seatunnel-test-1259587829"
+ secret_id = "xxxxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxxxx"
+ region = "ap-chengdu"
+ file_format_type = "json"
+ schema {
+ fields {
+ id = int
+ name = string
+ }
+ }
+ }
+
+```
+
+## Changelog
+
+### next version
+
+- Add file cos source connector ([4979](https://github.com/apache/seatunnel/pull/4979))
+
diff --git a/docs/zh/connector-v2/source/DB2.md b/docs/zh/connector-v2/source/DB2.md
new file mode 100644
index 00000000000..0d2df826a05
--- /dev/null
+++ b/docs/zh/connector-v2/source/DB2.md
@@ -0,0 +1,165 @@
+# DB2
+
+> JDBC DB2 Source Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+Read external data source data through JDBC.
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.ibm.db2.jcc/db2jcc) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.ibm.db2.jcc/db2jcc) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+> supports query SQL and can achieve projection effect.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|--------------------------------|-----------------------------------|-----------------------------------------------------------------------|
+| DB2 | Different dependency version has different driver class. | com.ibm.db2.jdbc.app.DB2Driver | jdbc:db2://127.0.0.1:50000/dbname | [Download](https://mvnrepository.com/artifact/com.ibm.db2.jcc/db2jcc) |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example DB2 datasource: cp db2-connector-java-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| DB2 Data Type | SeaTunnel Data Type |
+|------------------------------------------------------------------------------------------------------|---------------------|---|
+| BOOLEAN | BOOLEAN |
+| SMALLINT | SHORT |
+| INT INTEGER | INTEGER |
+| BIGINT | LONG |
+| DECIMAL DEC NUMERIC NUM | DECIMAL(38,18) |
+| REAL | FLOAT |
+| FLOAT DOUBLE DOUBLE PRECISION DECFLOAT | DOUBLE |
+| CHAR VARCHAR LONG VARCHAR CLOB GRAPHIC VARGRAPHIC LONG VARGRAPHIC DBCLOB | STRING |
+| BLOB | BYTES |
+| DATE | DATE |
+| TIME | TIME |
+| TIMESTAMP | TIMESTAMP |
+| ROWID XML | Not supported yet |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------|------------|----------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:db2://127.0.0.1:50000/dbname |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use db2 the value is `com.ibm.db2.jdbc.app.DB2Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type,Only support numeric type primary key, and only can config one column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. default value is job parallelism |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects,you can configure the row fetch size used in the query toimprove performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+> This example queries type_bin 'table' 16 data in your test "database" in single parallel and queries all of its fields. You can also specify which fields to query for final output to the console.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+source{
+ Jdbc {
+ url = "jdbc:db2://127.0.0.1:50000/dbname"
+ driver = "com.ibm.db2.jdbc.app.DB2Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ query = "select * from table_xxx"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+### Parallel:
+
+> Read your query table in parallel with the shard field you configured and the shard data You can do this if you want to read the whole table
+
+```
+source {
+ Jdbc {
+ url = "jdbc:db2://127.0.0.1:50000/dbname"
+ driver = "com.ibm.db2.jdbc.app.DB2Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ # Define query logic as required
+ query = "select * from type_bin"
+ # Parallel sharding reads fields
+ partition_column = "id"
+ # Number of fragments
+ partition_num = 10
+ }
+}
+```
+
+### Parallel Boundary:
+
+> It is more efficient to specify the data within the upper and lower bounds of the query It is more efficient to read your data source according to the upper and lower boundaries you configured
+
+```
+source {
+ Jdbc {
+ url = "jdbc:db2://127.0.0.1:50000/dbname"
+ driver = "com.ibm.db2.jdbc.app.DB2Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ # Define query logic as required
+ query = "select * from type_bin"
+ partition_column = "id"
+ # Read start boundary
+ partition_lower_bound = 1
+ # Read end boundary
+ partition_upper_bound = 500
+ partition_num = 10
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/source/Doris.md b/docs/zh/connector-v2/source/Doris.md
new file mode 100644
index 00000000000..c67444b58c8
--- /dev/null
+++ b/docs/zh/connector-v2/source/Doris.md
@@ -0,0 +1,162 @@
+# Doris
+
+> Doris source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [schema projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to read data from Doris.
+Doris Source will send a SQL to FE, FE will parse it into an execution plan, send it to BE, and BE will
+directly return the data
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|--------------------------------------|--------|-----|-------|
+| Doris | Only Doris2.0 or later is supported. | - | - | - |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/'
+> working directory
+
+## Data Type Mapping
+
+| Doris Data type | SeaTunnel Data type |
+|--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| INT | INT |
+| TINYINT | TINYINT |
+| SMALLINT | SMALLINT |
+| BIGINT | BIGINT |
+| LARGEINT | STRING |
+| BOOLEAN | BOOLEAN |
+| DECIMAL | DECIMAL((Get the designated column's specified column size)+1, (Gets the designated column's number of digits to right of the decimal point.))) |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| CHAR VARCHAR STRING TEXT | STRING |
+| DATE | DATE |
+| DATETIME DATETIME(p) | TIMESTAMP |
+| ARRAY | ARRAY |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|----------------------------------|--------|----------|------------|-----------------------------------------------------------------------------------------------------|
+| fenodes | string | yes | - | FE address, the format is `"fe_host:fe_http_port"` |
+| username | string | yes | - | User username |
+| password | string | yes | - | User password |
+| database | string | yes | - | The name of Doris database |
+| table | string | yes | - | The name of Doris table |
+| doris.read.field | string | no | - | Use the 'doris.read.field' parameter to select the doris table columns to read |
+| query-port | string | no | 9030 | Doris QueryPort |
+| doris.filter.query | string | no | - | Data filtering in doris. the format is "field = value",example : doris.filter.query = "F_ID > 2" |
+| doris.batch.size | int | no | 1024 | The maximum value that can be obtained by reading Doris BE once. |
+| doris.request.query.timeout.s | int | no | 3600 | Timeout period of Doris scan data, expressed in seconds. |
+| doris.exec.mem.limit | long | no | 2147483648 | Maximum memory that can be used by a single be scan request. The default memory is 2G (2147483648). |
+| doris.request.retries | int | no | 3 | Number of retries to send requests to Doris FE. |
+| doris.request.read.timeout.ms | int | no | 30000 | |
+| doris.request.connect.timeout.ms | int | no | 30000 | |
+
+### Tips
+
+> It is not recommended to modify advanced parameters at will
+
+## Task Example
+
+> This is an example of reading a Doris table and writing to Console.
+
+```
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+source{
+ Doris {
+ fenodes = "doris_e2e:8030"
+ username = root
+ password = ""
+ database = "e2e_source"
+ table = "doris_e2e_table"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+Use the 'doris.read.field' parameter to select the doris table columns to read
+
+```
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+source{
+ Doris {
+ fenodes = "doris_e2e:8030"
+ username = root
+ password = ""
+ database = "e2e_source"
+ table = "doris_e2e_table"
+ doris.read.field = "F_ID,F_INT,F_BIGINT,F_TINYINT,F_SMALLINT"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+Use 'doris.filter.query' to filter the data, and the parameter values are passed directly to doris
+
+```
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+source{
+ Doris {
+ fenodes = "doris_e2e:8030"
+ username = root
+ password = ""
+ database = "e2e_source"
+ table = "doris_e2e_table"
+ doris.filter.query = "F_ID > 2"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform/sql
+}
+
+sink {
+ Console {}
+}
+```
+
diff --git a/docs/zh/connector-v2/source/Elasticsearch.md b/docs/zh/connector-v2/source/Elasticsearch.md
new file mode 100644
index 00000000000..461787e6f63
--- /dev/null
+++ b/docs/zh/connector-v2/source/Elasticsearch.md
@@ -0,0 +1,200 @@
+# Elasticsearch
+
+> Elasticsearch source connector
+
+## Description
+
+Used to read data from Elasticsearch.
+
+support version >= 2.x and <= 8.x.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-------------------------|---------|----------|-------------------|
+| hosts | array | yes | - |
+| username | string | no | - |
+| password | string | no | - |
+| index | string | yes | - |
+| source | array | no | - |
+| query | json | no | {"match_all": {}} |
+| scroll_time | string | no | 1m |
+| scroll_size | int | no | 100 |
+| schema | | no | - |
+| tls_verify_certificate | boolean | no | true |
+| tls_verify_hostnames | boolean | no | true |
+| tls_keystore_path | string | no | - |
+| tls_keystore_password | string | no | - |
+| tls_truststore_path | string | no | - |
+| tls_truststore_password | string | no | - |
+| common-options | | no | - |
+
+### hosts [array]
+
+Elasticsearch cluster http address, the format is `host:port`, allowing multiple hosts to be specified. Such as `["host1:9200", "host2:9200"]`.
+
+### username [string]
+
+x-pack username.
+
+### password [string]
+
+x-pack password.
+
+### index [string]
+
+Elasticsearch index name, support * fuzzy matching.
+
+### source [array]
+
+The fields of index.
+You can get the document id by specifying the field `_id`.If sink _id to other index,you need specify an alias for _id due to the Elasticsearch limit.
+If you don't config source, you must config `schema`.
+
+### query [json]
+
+Elasticsearch DSL.
+You can control the range of data read.
+
+### scroll_time [String]
+
+Amount of time Elasticsearch will keep the search context alive for scroll requests.
+
+### scroll_size [int]
+
+Maximum number of hits to be returned with each Elasticsearch scroll request.
+
+### schema
+
+The structure of the data, including field names and field types.
+If you don't config schema, you must config `source`.
+
+### tls_verify_certificate [boolean]
+
+Enable certificates validation for HTTPS endpoints
+
+### tls_verify_hostname [boolean]
+
+Enable hostname validation for HTTPS endpoints
+
+### tls_keystore_path [string]
+
+The path to the PEM or JKS key store. This file must be readable by the operating system user running SeaTunnel.
+
+### tls_keystore_password [string]
+
+The key password for the key store specified
+
+### tls_truststore_path [string]
+
+The path to PEM or JKS trust store. This file must be readable by the operating system user running SeaTunnel.
+
+### tls_truststore_password [string]
+
+The key password for the trust store specified
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Examples
+
+simple
+
+```hocon
+Elasticsearch {
+ hosts = ["localhost:9200"]
+ index = "seatunnel-*"
+ source = ["_id","name","age"]
+ query = {"range":{"firstPacket":{"gte":1669225429990,"lte":1669225429990}}}
+}
+```
+
+complex
+
+```hocon
+Elasticsearch {
+ hosts = ["elasticsearch:9200"]
+ index = "st_index"
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(2, 1)"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ query = {"range":{"firstPacket":{"gte":1669225429990,"lte":1669225429990}}}
+}
+```
+
+SSL (Disable certificates validation)
+
+```hocon
+source {
+ Elasticsearch {
+ hosts = ["https://localhost:9200"]
+ username = "elastic"
+ password = "elasticsearch"
+
+ tls_verify_certificate = false
+ }
+}
+```
+
+SSL (Disable hostname validation)
+
+```hocon
+source {
+ Elasticsearch {
+ hosts = ["https://localhost:9200"]
+ username = "elastic"
+ password = "elasticsearch"
+
+ tls_verify_hostname = false
+ }
+}
+```
+
+SSL (Enable certificates validation)
+
+```hocon
+source {
+ Elasticsearch {
+ hosts = ["https://localhost:9200"]
+ username = "elastic"
+ password = "elasticsearch"
+
+ tls_keystore_path = "${your elasticsearch home}/config/certs/http.p12"
+ tls_keystore_password = "${your password}"
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Elasticsearch Source Connector
+- [Feature] Support https protocol & compatible with opensearch ([3997](https://github.com/apache/seatunnel/pull/3997))
+- [Feature] Support DSL
+
diff --git a/docs/zh/connector-v2/source/FakeSource.md b/docs/zh/connector-v2/source/FakeSource.md
new file mode 100644
index 00000000000..c85df372611
--- /dev/null
+++ b/docs/zh/connector-v2/source/FakeSource.md
@@ -0,0 +1,421 @@
+# FakeSource
+
+> FakeSource connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+The FakeSource is a virtual data source, which randomly generates the number of rows according to the data structure of the user-defined schema,
+just for some test cases such as type conversion or connector new feature testing
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|---------------------|----------|----------|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| tables_configs | list | no | - | Define Multiple FakeSource, each item can contains the whole fake source config description below |
+| schema | config | yes | - | Define Schema information |
+| rows | config | no | - | The row list of fake data output per degree of parallelism see title `Options rows Case`. |
+| row.num | int | no | 5 | The total number of data generated per degree of parallelism |
+| split.num | int | no | 1 | the number of splits generated by the enumerator for each degree of parallelism |
+| split.read-interval | long | no | 1 | The interval(mills) between two split reads in a reader |
+| map.size | int | no | 5 | The size of `map` type that connector generated |
+| array.size | int | no | 5 | The size of `array` type that connector generated |
+| bytes.length | int | no | 5 | The length of `bytes` type that connector generated |
+| string.length | int | no | 5 | The length of `string` type that connector generated |
+| string.fake.mode | string | no | range | The fake mode of generating string data, support `range` and `template`, default `range`,if use configured it to `template`, user should also configured `string.template` option |
+| string.template | list | no | - | The template list of string type that connector generated, if user configured it, connector will randomly select an item from the template list |
+| tinyint.fake.mode | string | no | range | The fake mode of generating tinyint data, support `range` and `template`, default `range`,if use configured it to `template`, user should also configured `tinyint.template` option |
+| tinyint.min | tinyint | no | 0 | The min value of tinyint data that connector generated |
+| tinyint.max | tinyint | no | 127 | The max value of tinyint data that connector generated |
+| tinyint.template | list | no | - | The template list of tinyint type that connector generated, if user configured it, connector will randomly select an item from the template list |
+| smallint.fake.mode | string | no | range | The fake mode of generating smallint data, support `range` and `template`, default `range`,if use configured it to `template`, user should also configured `smallint.template` option |
+| smallint.min | smallint | no | 0 | The min value of smallint data that connector generated |
+| smallint.max | smallint | no | 32767 | The max value of smallint data that connector generated |
+| smallint.template | list | no | - | The template list of smallint type that connector generated, if user configured it, connector will randomly select an item from the template list |
+| int.fake.template | string | no | range | The fake mode of generating int data, support `range` and `template`, default `range`,if use configured it to `template`, user should also configured `int.template` option |
+| int.min | int | no | 0 | The min value of int data that connector generated |
+| int.max | int | no | 0x7fffffff | The max value of int data that connector generated |
+| int.template | list | no | - | The template list of int type that connector generated, if user configured it, connector will randomly select an item from the template list |
+| bigint.fake.mode | string | no | range | The fake mode of generating bigint data, support `range` and `template`, default `range`,if use configured it to `template`, user should also configured `bigint.template` option |
+| bigint.min | bigint | no | 0 | The min value of bigint data that connector generated |
+| bigint.max | bigint | no | 0x7fffffffffffffff | The max value of bigint data that connector generated |
+| bigint.template | list | no | - | The template list of bigint type that connector generated, if user configured it, connector will randomly select an item from the template list |
+| float.fake.mode | string | no | range | The fake mode of generating float data, support `range` and `template`, default `range`,if use configured it to `template`, user should also configured `float.template` option |
+| float.min | float | no | 0 | The min value of float data that connector generated |
+| float.max | float | no | 0x1.fffffeP+127 | The max value of float data that connector generated |
+| float.template | list | no | - | The template list of float type that connector generated, if user configured it, connector will randomly select an item from the template list |
+| double.fake.mode | string | no | range | The fake mode of generating float data, support `range` and `template`, default `range`,if use configured it to `template`, user should also configured `double.template` option |
+| double.min | double | no | 0 | The min value of double data that connector generated |
+| double.max | double | no | 0x1.fffffffffffffP+1023 | The max value of double data that connector generated |
+| double.template | list | no | - | The template list of double type that connector generated, if user configured it, connector will randomly select an item from the template list |
+| common-options | | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Task Example
+
+### Simple:
+
+> This example Randomly generates data of a specified type. If you want to learn how to declare field types, click [here](../../concept/schema-feature.md#how-to-declare-type-supported).
+
+```hocon
+schema = {
+ fields {
+ c_map = "map>"
+ c_map_nest = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ c_row = {
+ c_map = "map>"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+}
+```
+
+### Random Generation
+
+> 16 data matching the type are randomly generated
+
+```hocon
+source {
+ # This is a example input plugin **only for test and demonstrate the feature input plugin**
+ FakeSource {
+ row.num = 16
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ result_table_name = "fake"
+ }
+}
+```
+
+### Customize the data content Simple:
+
+> This is a self-defining data source information, defining whether each piece of data is an add or delete modification operation, and defining what each field stores
+
+```hocon
+source {
+ FakeSource {
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ rows = [
+ {
+ kind = INSERT
+ fields = [{"a": "b"}, [101], "c_string", true, 117, 15987, 56387395, 7084913402530365000, 1.23, 1.23, "2924137191386439303744.39292216", null, "bWlJWmo=", "2023-04-22", "2023-04-22T23:20:58"]
+ }
+ {
+ kind = UPDATE_BEFORE
+ fields = [{"a": "c"}, [102], "c_string", true, 117, 15987, 56387395, 7084913402530365000, 1.23, 1.23, "2924137191386439303744.39292216", null, "bWlJWmo=", "2023-04-22", "2023-04-22T23:20:58"]
+ }
+ {
+ kind = UPDATE_AFTER
+ fields = [{"a": "e"}, [103], "c_string", true, 117, 15987, 56387395, 7084913402530365000, 1.23, 1.23, "2924137191386439303744.39292216", null, "bWlJWmo=", "2023-04-22", "2023-04-22T23:20:58"]
+ }
+ {
+ kind = DELETE
+ fields = [{"a": "f"}, [104], "c_string", true, 117, 15987, 56387395, 7084913402530365000, 1.23, 1.23, "2924137191386439303744.39292216", null, "bWlJWmo=", "2023-04-22", "2023-04-22T23:20:58"]
+ }
+ ]
+ }
+}
+```
+
+> Due to the constraints of the [HOCON](https://github.com/lightbend/config/blob/main/HOCON.md) specification, users cannot directly create byte sequence objects. FakeSource uses strings to assign `bytes` type values. In the example above, the `bytes` type field is assigned `"bWlJWmo="`, which is encoded from "miIZj" with **base64**. Hence, when assigning values to `bytes` type fields, please use strings encoded with **base64**.
+
+### Specified Data number Simple:
+
+> This case specifies the number of data generated and the length of the generated value
+
+```hocon
+FakeSource {
+ row.num = 10
+ map.size = 10
+ array.size = 10
+ bytes.length = 10
+ string.length = 10
+ schema = {
+ fields {
+ c_map = "map>"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ c_row = {
+ c_map = "map>"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_null = "null"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+```
+
+### Template data Simple:
+
+> Randomly generated according to the specified template
+
+Using template
+
+```hocon
+FakeSource {
+ row.num = 5
+ string.fake.mode = "template"
+ string.template = ["tyrantlucifer", "hailin", "kris", "fanjia", "zongwen", "gaojun"]
+ tinyint.fake.mode = "template"
+ tinyint.template = [1, 2, 3, 4, 5, 6, 7, 8, 9]
+ smalling.fake.mode = "template"
+ smallint.template = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
+ int.fake.mode = "template"
+ int.template = [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
+ bigint.fake.mode = "template"
+ bigint.template = [30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
+ float.fake.mode = "template"
+ float.template = [40.0, 41.0, 42.0, 43.0]
+ double.fake.mode = "template"
+ double.template = [44.0, 45.0, 46.0, 47.0]
+ schema {
+ fields {
+ c_string = string
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ }
+ }
+}
+```
+
+### Range data Simple:
+
+> The specified data generation range is randomly generated
+
+```hocon
+FakeSource {
+ row.num = 5
+ string.template = ["tyrantlucifer", "hailin", "kris", "fanjia", "zongwen", "gaojun"]
+ tinyint.min = 1
+ tinyint.max = 9
+ smallint.min = 10
+ smallint.max = 19
+ int.min = 20
+ int.max = 29
+ bigint.min = 30
+ bigint.max = 39
+ float.min = 40.0
+ float.max = 43.0
+ double.min = 44.0
+ double.max = 47.0
+ schema {
+ fields {
+ c_string = string
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ }
+ }
+}
+```
+
+### Generate Multiple tables
+
+> This is a case of generating a multi-data source test.table1 and test.table2
+
+```hocon
+FakeSource {
+ tables_configs = [
+ {
+ row.num = 16
+ schema {
+ table = "test.table1"
+ fields {
+ c_string = string
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ }
+ }
+ },
+ {
+ row.num = 17
+ schema {
+ table = "test.table2"
+ fields {
+ c_string = string
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ }
+ }
+ }
+ ]
+}
+```
+
+### Options `rows` Case
+
+```hocon
+rows = [
+ {
+ kind = INSERT
+ fields = [1, "A", 100]
+ },
+ {
+ kind = UPDATE_BEFORE
+ fields = [1, "A", 100]
+ },
+ {
+ kind = UPDATE_AFTER
+ fields = [1, "A_1", 100]
+ },
+ {
+ kind = DELETE
+ fields = [1, "A_1", 100]
+ }
+]
+```
+
+### Options `table-names` Case
+
+```hocon
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ FakeSource {
+ table-names = ["test.table1", "test.table2", "test.table3"]
+ parallelism = 1
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add FakeSource Source Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [Improve] Supports direct definition of data values(row) ([2839](https://github.com/apache/seatunnel/pull/2839))
+- [Improve] Improve fake source connector: ([2944](https://github.com/apache/seatunnel/pull/2944))
+ - Support user-defined map size
+ - Support user-defined array size
+ - Support user-defined string length
+ - Support user-defined bytes length
+- [Improve] Support multiple splits for fake source connector ([2974](https://github.com/apache/seatunnel/pull/2974))
+- [Improve] Supports setting the number of splits per parallelism and the reading interval between two splits ([3098](https://github.com/apache/seatunnel/pull/3098))
+
+### next version
+
+- [Feature] Support config fake data rows [3865](https://github.com/apache/seatunnel/pull/3865)
+- [Feature] Support config template or range for fake data [3932](https://github.com/apache/seatunnel/pull/3932)
+
diff --git a/docs/zh/connector-v2/source/FtpFile.md b/docs/zh/connector-v2/source/FtpFile.md
new file mode 100644
index 00000000000..ee231bb087b
--- /dev/null
+++ b/docs/zh/connector-v2/source/FtpFile.md
@@ -0,0 +1,281 @@
+# FtpFile
+
+> Ftp file source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] json
+ - [x] excel
+
+## Description
+
+Read data from ftp file server.
+
+:::tip
+
+If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+
+If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+:::
+
+## Options
+
+| name | type | required | default value |
+|---------------------------|---------|----------|---------------------|
+| host | string | yes | - |
+| port | int | yes | - |
+| user | string | yes | - |
+| password | string | yes | - |
+| path | string | yes | - |
+| file_format_type | string | yes | - |
+| connection_mode | string | no | active_local |
+| delimiter/field_delimiter | string | no | \001 |
+| read_columns | list | no | - |
+| parse_partition_from_path | boolean | no | true |
+| date_format | string | no | yyyy-MM-dd |
+| datetime_format | string | no | yyyy-MM-dd HH:mm:ss |
+| time_format | string | no | HH:mm:ss |
+| skip_header_row_number | long | no | 0 |
+| schema | config | no | - |
+| sheet_name | string | no | - |
+| file_filter_pattern | string | no | - |
+| compress_codec | string | no | none |
+| common-options | | no | - |
+
+### host [string]
+
+The target ftp host is required
+
+### port [int]
+
+The target ftp port is required
+
+### user [string]
+
+The target ftp user name is required
+
+### password [string]
+
+The target ftp password is required
+
+### path [string]
+
+The source file path.
+
+### file_format_type [string]
+
+File type, supported as the following file types:
+
+`text` `csv` `parquet` `orc` `json` `excel`
+
+If you assign file type to `json` , you should also assign schema option to tell connector how to parse data to the row you want.
+
+For example:
+
+upstream data is the following:
+
+```json
+
+{"code": 200, "data": "get success", "success": true}
+
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+If you assign file type to `text` `csv`, you can choose to specify the schema information or not.
+
+For example, upstream data is the following:
+
+```text
+
+tyrantlucifer#26#male
+
+```
+
+If you do not assign data schema connector will treat the upstream data as the following:
+
+| content |
+|-----------------------|
+| tyrantlucifer#26#male |
+
+If you assign data schema, you should also assign the option `field_delimiter` too except CSV file type
+
+you should assign schema and delimiter as the following:
+
+```hocon
+
+field_delimiter = "#"
+schema {
+ fields {
+ name = string
+ age = int
+ gender = string
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| name | age | gender |
+|---------------|-----|--------|
+| tyrantlucifer | 26 | male |
+
+### connection_mode [string]
+
+The target ftp connection mode , default is active mode, supported as the following modes:
+
+`active_local` `passive_local`
+
+### delimiter/field_delimiter [string]
+
+**delimiter** parameter will deprecate after version 2.3.5, please use **field_delimiter** instead.
+
+Only need to be configured when file_format is text.
+
+Field delimiter, used to tell connector how to slice and dice fields.
+
+default `\001`, the same as hive's default delimiter
+
+### parse_partition_from_path [boolean]
+
+Control whether parse the partition keys and values from file path
+
+For example if you read a file from path `ftp://hadoop-cluster/tmp/seatunnel/parquet/name=tyrantlucifer/age=26`
+
+Every record data from file will be added these two fields:
+
+| name | age |
+|---------------|-----|
+| tyrantlucifer | 26 |
+
+Tips: **Do not define partition fields in schema option**
+
+### date_format [string]
+
+Date type format, used to tell connector how to convert string to date, supported as the following formats:
+
+`yyyy-MM-dd` `yyyy.MM.dd` `yyyy/MM/dd`
+
+default `yyyy-MM-dd`
+
+### datetime_format [string]
+
+Datetime type format, used to tell connector how to convert string to datetime, supported as the following formats:
+
+`yyyy-MM-dd HH:mm:ss` `yyyy.MM.dd HH:mm:ss` `yyyy/MM/dd HH:mm:ss` `yyyyMMddHHmmss`
+
+default `yyyy-MM-dd HH:mm:ss`
+
+### time_format [string]
+
+Time type format, used to tell connector how to convert string to time, supported as the following formats:
+
+`HH:mm:ss` `HH:mm:ss.SSS`
+
+default `HH:mm:ss`
+
+### skip_header_row_number [long]
+
+Skip the first few lines, but only for the txt and csv.
+
+For example, set like following:
+
+`skip_header_row_number = 2`
+
+then SeaTunnel will skip the first 2 lines from source files
+
+### schema [config]
+
+Only need to be configured when the file_format_type are text, json, excel or csv ( Or other format we can't read the schema from metadata).
+
+The schema information of upstream data.
+
+### read_columns [list]
+
+The read column list of the data source, user can use it to implement field projection.
+
+### sheet_name [string]
+
+Reader the sheet of the workbook,Only used when file_format_type is excel.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc/parquet:
+ automatically recognizes the compression type, no additional settings required.
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details.
+
+## Example
+
+```hocon
+
+ FtpFile {
+ path = "/tmp/seatunnel/sink/text"
+ host = "192.168.31.48"
+ port = 21
+ user = tyrantlucifer
+ password = tianchao
+ file_format_type = "text"
+ schema = {
+ name = string
+ age = int
+ }
+ field_delimiter = "#"
+ }
+
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Ftp Source Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [BugFix] Fix the bug of incorrect path in windows environment ([2980](https://github.com/apache/seatunnel/pull/2980))
+- [Improve] Support extract partition from SeaTunnelRow fields ([3085](https://github.com/apache/seatunnel/pull/3085))
+- [Improve] Support parse field from file path ([2985](https://github.com/apache/seatunnel/pull/2985))
+
diff --git a/docs/zh/connector-v2/source/Github.md b/docs/zh/connector-v2/source/Github.md
new file mode 100644
index 00000000000..900a207e697
--- /dev/null
+++ b/docs/zh/connector-v2/source/Github.md
@@ -0,0 +1,296 @@
+# Github
+
+> Github source connector
+
+## Description
+
+Used to read data from Github.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------------|---------|----------|---------------|
+| url | String | Yes | - |
+| access_token | String | No | - |
+| method | String | No | get |
+| schema.fields | Config | No | - |
+| format | String | No | json |
+| params | Map | No | - |
+| body | String | No | - |
+| json_field | Config | No | - |
+| content_json | String | No | - |
+| poll_interval_millis | int | No | - |
+| retry | int | No | - |
+| retry_backoff_multiplier_ms | int | No | 100 |
+| retry_backoff_max_ms | int | No | 10000 |
+| enable_multi_lines | boolean | No | false |
+| common-options | config | No | - |
+
+### url [String]
+
+http request url
+
+### access_token [String]
+
+Github personal access token, see: [Creating a personal access token - GitHub Docs](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
+
+### method [String]
+
+http request method, only supports GET, POST method
+
+### params [Map]
+
+http params
+
+### body [String]
+
+http body
+
+### poll_interval_millis [int]
+
+request http api interval(millis) in stream mode
+
+### retry [int]
+
+The max retry times if request http return to `IOException`
+
+### retry_backoff_multiplier_ms [int]
+
+The retry-backoff times(millis) multiplier if request http failed
+
+### retry_backoff_max_ms [int]
+
+The maximum retry-backoff times(millis) if request http failed
+
+### format [String]
+
+the format of upstream data, now only support `json` `text`, default `json`.
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### schema [Config]
+
+#### fields [Config]
+
+the schema fields of upstream data
+
+### content_json [String]
+
+This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`.
+
+If your return data looks something like this.
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can configure `content_field = "$.store.book.*"` and the result returned looks like this:
+
+```json
+[
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+]
+```
+
+Then you can get the desired result with a simpler schema,like
+
+```hocon
+Http {
+ url = "http://mockserver:1080/contentjson/mock"
+ method = "GET"
+ format = "json"
+ content_field = "$.store.book.*"
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+}
+```
+
+Here is an example:
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_contentjson_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_contentjson_to_assert.conf).
+
+### json_field [Config]
+
+This parameter helps you configure the schema,so this parameter must be used with schema.
+
+If your data looks something like this:
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can get the contents of 'book' by configuring the task as follows:
+
+```hocon
+source {
+ Http {
+ url = "http://mockserver:1080/jsonpath/mock"
+ method = "GET"
+ format = "json"
+ json_field = {
+ category = "$.store.book[*].category"
+ author = "$.store.book[*].author"
+ title = "$.store.book[*].title"
+ price = "$.store.book[*].price"
+ }
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+ }
+}
+```
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_jsonpath_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_jsonpath_to_assert.conf).
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+Github {
+ url = "https://api.github.com/orgs/apache/repos"
+ access_token = "xxxx"
+ method = "GET"
+ format = "json"
+ schema = {
+ fields {
+ id = int
+ name = string
+ description = string
+ html_url = string
+ stargazers_count = int
+ forks = int
+ }
+ }
+}
+```
+
+## Changelog
+
diff --git a/docs/zh/connector-v2/source/Gitlab.md b/docs/zh/connector-v2/source/Gitlab.md
new file mode 100644
index 00000000000..ff3b6bc6423
--- /dev/null
+++ b/docs/zh/connector-v2/source/Gitlab.md
@@ -0,0 +1,299 @@
+# Gitlab
+
+> Gitlab source connector
+
+## Description
+
+Used to read data from Gitlab.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------------|---------|----------|---------------|
+| url | String | Yes | - |
+| access_token | String | Yes | - |
+| method | String | No | get |
+| schema.fields | Config | No | - |
+| format | String | No | json |
+| params | Map | No | - |
+| body | String | No | - |
+| json_field | Config | No | - |
+| content_json | String | No | - |
+| poll_interval_millis | int | No | - |
+| retry | int | No | - |
+| retry_backoff_multiplier_ms | int | No | 100 |
+| retry_backoff_max_ms | int | No | 10000 |
+| enable_multi_lines | boolean | No | false |
+| common-options | config | No | - |
+
+### url [String]
+
+http request url
+
+### access_token [String]
+
+personal access token
+
+### method [String]
+
+http request method, only supports GET, POST method
+
+### params [Map]
+
+http params
+
+### body [String]
+
+http body
+
+### poll_interval_millis [int]
+
+request http api interval(millis) in stream mode
+
+### retry [int]
+
+The max retry times if request http return to `IOException`
+
+### retry_backoff_multiplier_ms [int]
+
+The retry-backoff times(millis) multiplier if request http failed
+
+### retry_backoff_max_ms [int]
+
+The maximum retry-backoff times(millis) if request http failed
+
+### format [String]
+
+the format of upstream data, now only support `json` `text`, default `json`.
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### schema [Config]
+
+#### fields [Config]
+
+the schema fields of upstream data
+
+### content_json [String]
+
+This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`.
+
+If your return data looks something like this.
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can configure `content_field = "$.store.book.*"` and the result returned looks like this:
+
+```json
+[
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+]
+```
+
+Then you can get the desired result with a simpler schema,like
+
+```hocon
+Http {
+ url = "http://mockserver:1080/contentjson/mock"
+ method = "GET"
+ format = "json"
+ content_field = "$.store.book.*"
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+}
+```
+
+Here is an example:
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_contentjson_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_contentjson_to_assert.conf).
+
+### json_field [Config]
+
+This parameter helps you configure the schema,so this parameter must be used with schema.
+
+If your data looks something like this:
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can get the contents of 'book' by configuring the task as follows:
+
+```hocon
+source {
+ Http {
+ url = "http://mockserver:1080/jsonpath/mock"
+ method = "GET"
+ format = "json"
+ json_field = {
+ category = "$.store.book[*].category"
+ author = "$.store.book[*].author"
+ title = "$.store.book[*].title"
+ price = "$.store.book[*].price"
+ }
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+ }
+}
+```
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_jsonpath_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_jsonpath_to_assert.conf).
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+Gitlab{
+ url = "https://gitlab.com/api/v4/projects"
+ access_token = "xxxxx"
+ schema {
+ fields {
+ id = int
+ description = string
+ name = string
+ name_with_namespace = string
+ path = string
+ http_url_to_repo = string
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Gitlab Source Connector
+- [Feature][Connector-V2][HTTP] Use json-path parsing ([3510](https://github.com/apache/seatunnel/pull/3510))
+
diff --git a/docs/zh/connector-v2/source/GoogleSheets.md b/docs/zh/connector-v2/source/GoogleSheets.md
new file mode 100644
index 00000000000..754a502f2b7
--- /dev/null
+++ b/docs/zh/connector-v2/source/GoogleSheets.md
@@ -0,0 +1,79 @@
+# GoogleSheets
+
+> GoogleSheets source connector
+
+## Description
+
+Used to read data from GoogleSheets.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [ ] file format
+ - [ ] text
+ - [ ] csv
+ - [ ] json
+
+## Options
+
+| name | type | required | default value |
+|---------------------|--------|----------|---------------|
+| service_account_key | string | yes | - |
+| sheet_id | string | yes | - |
+| sheet_name | string | yes | - |
+| range | string | yes | - |
+| schema | config | no | - |
+
+### service_account_key [string]
+
+google cloud service account, base64 required
+
+### sheet_id [string]
+
+sheet id in a Google Sheets URL
+
+### sheet_name [string]
+
+the name of the sheet you want to import
+
+### range [string]
+
+the range of the sheet you want to import
+
+### schema [config]
+
+#### fields [config]
+
+the schema fields of upstream data
+
+## Example
+
+simple:
+
+```hocon
+GoogleSheets {
+ service_account_key = "seatunnel-test"
+ sheet_id = "1VI0DvyZK-NIdssSdsDSsSSSC-_-rYMi7ppJiI_jhE"
+ sheet_name = "sheets01"
+ range = "A1:C3"
+ schema = {
+ fields {
+ a = int
+ b = string
+ c = string
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add GoogleSheets Source Connector
+
diff --git a/docs/zh/connector-v2/source/Greenplum.md b/docs/zh/connector-v2/source/Greenplum.md
new file mode 100644
index 00000000000..74669898df9
--- /dev/null
+++ b/docs/zh/connector-v2/source/Greenplum.md
@@ -0,0 +1,42 @@
+# Greenplum
+
+> Greenplum source connector
+
+## Description
+
+Read Greenplum data through [Jdbc connector](Jdbc.md).
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+
+supports query SQL and can achieve projection effect.
+
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+:::tip
+
+Optional jdbc drivers:
+- `org.postgresql.Driver`
+- `com.pivotal.jdbc.GreenplumDriver`
+
+Warn: for license compliance, if you use `GreenplumDriver` the have to provide Greenplum JDBC driver yourself, e.g. copy greenplum-xxx.jar to $SEATNUNNEL_HOME/lib for Standalone.
+
+:::
+
+## Options
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details.
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Greenplum Source Connector
+
diff --git a/docs/zh/connector-v2/source/HdfsFile.md b/docs/zh/connector-v2/source/HdfsFile.md
new file mode 100644
index 00000000000..ffcb0b68678
--- /dev/null
+++ b/docs/zh/connector-v2/source/HdfsFile.md
@@ -0,0 +1,126 @@
+# HdfsFile
+
+> Hdfs File Source Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+Read all the data in a split in a pollNext call. What splits are read will be saved in snapshot.
+
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] file format file
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Description
+
+Read data from hdfs file system.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions |
+|------------|--------------------|
+| HdfsFile | hadoop 2.x and 3.x |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|---------------------------|---------|----------|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| path | string | yes | - | The source file path. |
+| file_format_type | string | yes | - | We supported as the following file types:`text` `json` `csv` `orc` `parquet` `excel`.Please note that, The final file name will end with the file_format's suffix, the suffix of the text file is `txt`. |
+| fs.defaultFS | string | yes | - | The hadoop cluster address that start with `hdfs://`, for example: `hdfs://hadoopcluster` |
+| read_columns | list | yes | - | The read column list of the data source, user can use it to implement field projection.The file type supported column projection as the following shown:[text,json,csv,orc,parquet,excel].Tips: If the user wants to use this feature when reading `text` `json` `csv` files, the schema option must be configured. |
+| hdfs_site_path | string | no | - | The path of `hdfs-site.xml`, used to load ha configuration of namenodes |
+| delimiter/field_delimiter | string | no | \001 | Field delimiter, used to tell connector how to slice and dice fields when reading text files. default `\001`, the same as hive's default delimiter |
+| parse_partition_from_path | boolean | no | true | Control whether parse the partition keys and values from file path. For example if you read a file from path `hdfs://hadoop-cluster/tmp/seatunnel/parquet/name=tyrantlucifer/age=26`. Every record data from file will be added these two fields:[name:tyrantlucifer,age:26].Tips:Do not define partition fields in schema option. |
+| date_format | string | no | yyyy-MM-dd | Date type format, used to tell connector how to convert string to date, supported as the following formats:`yyyy-MM-dd` `yyyy.MM.dd` `yyyy/MM/dd` default `yyyy-MM-dd`.Date type format, used to tell connector how to convert string to date, supported as the following formats:`yyyy-MM-dd` `yyyy.MM.dd` `yyyy/MM/dd` default `yyyy-MM-dd` |
+| datetime_format | string | no | yyyy-MM-dd HH:mm:ss | Datetime type format, used to tell connector how to convert string to datetime, supported as the following formats:`yyyy-MM-dd HH:mm:ss` `yyyy.MM.dd HH:mm:ss` `yyyy/MM/dd HH:mm:ss` `yyyyMMddHHmmss` .default `yyyy-MM-dd HH:mm:ss` |
+| time_format | string | no | HH:mm:ss | Time type format, used to tell connector how to convert string to time, supported as the following formats:`HH:mm:ss` `HH:mm:ss.SSS`.default `HH:mm:ss` |
+| remote_user | string | no | - | The login user used to connect to hadoop login name. It is intended to be used for remote users in RPC, it won't have any credentials. |
+| krb5_path | string | no | /etc/krb5.conf | The krb5 path of kerberos |
+| kerberos_principal | string | no | - | The principal of kerberos |
+| kerberos_keytab_path | string | no | - | The keytab path of kerberos |
+| skip_header_row_number | long | no | 0 | Skip the first few lines, but only for the txt and csv.For example, set like following:`skip_header_row_number = 2`.then Seatunnel will skip the first 2 lines from source files |
+| schema | config | no | - | the schema fields of upstream data |
+| sheet_name | string | no | - | Reader the sheet of the workbook,Only used when file_format is excel. |
+| compress_codec | string | no | none | The compress codec of files |
+| common-options | | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+### delimiter/field_delimiter [string]
+
+**delimiter** parameter will deprecate after version 2.3.5, please use **field_delimiter** instead.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc/parquet:
+ automatically recognizes the compression type, no additional settings required.
+
+### Tips
+
+> If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x. If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+## Task Example
+
+### Simple:
+
+> This example defines a SeaTunnel synchronization task that read data from Hdfs and sends it to Hdfs.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ HdfsFile {
+ schema {
+ fields {
+ name = string
+ age = int
+ }
+ }
+ path = "/apps/hive/demo/student"
+ type = "json"
+ fs.defaultFS = "hdfs://namenode001"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/category/source-v2
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ HdfsFile {
+ fs.defaultFS = "hdfs://hadoopcluster"
+ path = "/tmp/hive/warehouse/test2"
+ file_format = "orc"
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/category/sink-v2
+}
+```
+
diff --git a/docs/zh/connector-v2/source/Hive-jdbc.md b/docs/zh/connector-v2/source/Hive-jdbc.md
new file mode 100644
index 00000000000..e30db04d323
--- /dev/null
+++ b/docs/zh/connector-v2/source/Hive-jdbc.md
@@ -0,0 +1,163 @@
+# Hive
+
+> JDBC Hive Source Connector
+
+## Support Hive Version
+
+- Definitely supports 3.1.3 and 3.1.2, other versions need to be tested.
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+> supports query SQL and can achieve projection effect.
+
+## Description
+
+Read external data source data through JDBC.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|---------------------------------|--------------------------------------|--------------------------------------------------------------------------|
+| Hive | Different dependency version has different driver class. | org.apache.hive.jdbc.HiveDriver | jdbc:hive2://localhost:10000/default | [Download](https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc) |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/'
+> working directory
+> For example Hive datasource: cp hive-jdbc-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| Hive Data Type | SeaTunnel Data Type |
+|-------------------------------------------------------------------------------------------|---------------------|
+| BOOLEAN | BOOLEAN |
+| TINYINT SMALLINT | SHORT |
+| INT INTEGER | INT |
+| BIGINT | LONG |
+| FLOAT | FLOAT |
+| DOUBLE DOUBLE PRECISION | DOUBLE |
+| DECIMAL(x,y) NUMERIC(x,y) (Get the designated column's specified column size.<38) | DECIMAL(x,y) |
+| DECIMAL(x,y) NUMERIC(x,y) (Get the designated column's specified column size.>38) | DECIMAL(38,18) |
+| CHAR VARCHAR STRING | STRING |
+| DATE | DATE |
+| DATETIME TIMESTAMP | TIMESTAMP |
+| BINARY ARRAY INTERVAL MAP STRUCT UNIONTYPE | Not supported yet |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------|------------|----------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:hive2://localhost:10000/default |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use Hive the value is `org.apache.hive.jdbc.HiveDriver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type,Only support numeric type primary key, and only can config one column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. default value is job parallelism |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects,you can configure the row fetch size used in the query toimprove performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+| useKerberos | Boolean | No | no | Whether to enable Kerberos, default is false |
+| kerberos_principal | String | No | - | When use kerberos, we should set kerberos principal such as 'test_user@xxx'. |
+| kerberos_keytab_path | String | No | - | When use kerberos, we should set kerberos principal file path such as '/home/test/test_user.keytab' . |
+| krb5_path | String | No | /etc/krb5.conf | When use kerberos, we should set krb5 path file path such as '/seatunnel/krb5.conf' or use the default path '/etc/krb5.conf '. |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed
+> in parallel according to the concurrency of tasks , When your shard read field is a large number type such as bigint(
+> and above and the data is not evenly distributed, it is recommended to set the parallelism level to 1 to ensure that
+> the
+> data skew problem is resolved
+
+## Task Example
+
+### Simple:
+
+> This example queries type_bin 'table' 16 data in your test "database" in single parallel and queries all of its
+> fields. You can also specify which fields to query for final output to the console.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+source{
+ Jdbc {
+ url = "jdbc:hive2://localhost:10000/default"
+ driver = "org.apache.hive.jdbc.HiveDriver"
+ connection_check_timeout_sec = 100
+ query = "select * from type_bin limit 16"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+### Parallel:
+
+> Read your query table in parallel with the shard field you configured and the shard data You can do this if you want
+> to read the whole table
+
+```
+source {
+ Jdbc {
+ url = "jdbc:hive2://localhost:10000/default"
+ driver = "org.apache.hive.jdbc.HiveDriver"
+ connection_check_timeout_sec = 100
+ # Define query logic as required
+ query = "select * from type_bin"
+ # Parallel sharding reads fields
+ partition_column = "id"
+ # Number of fragments
+ partition_num = 10
+ }
+}
+```
+
+### Parallel Boundary:
+
+> It is more efficient to specify the data within the upper and lower bounds of the query It is more efficient to read
+> your data source according to the upper and lower boundaries you configured
+
+```
+source {
+ Jdbc {
+ url = "jdbc:hive2://localhost:10000/default"
+ driver = "org.apache.hive.jdbc.HiveDriver"
+ connection_check_timeout_sec = 100
+ # Define query logic as required
+ query = "select * from type_bin"
+ partition_column = "id"
+ # Read start boundary
+ partition_lower_bound = 1
+ # Read end boundary
+ partition_upper_bound = 500
+ partition_num = 10
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/source/Hive.md b/docs/zh/connector-v2/source/Hive.md
new file mode 100644
index 00000000000..14306ef953d
--- /dev/null
+++ b/docs/zh/connector-v2/source/Hive.md
@@ -0,0 +1,129 @@
+# Hive
+
+> Hive source connector
+
+## Description
+
+Read data from Hive.
+
+:::tip
+
+In order to use this connector, You must ensure your spark/flink cluster already integrated hive. The tested hive version is 2.3.9.
+
+If you use SeaTunnel Engine, You need put seatunnel-hadoop3-3.1.4-uber.jar and hive-exec-2.3.9.jar in $SEATUNNEL_HOME/lib/ dir.
+:::
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+Read all the data in a split in a pollNext call. What splits are read will be saved in snapshot.
+
+- [x] [schema projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] file format
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+
+## Options
+
+| name | type | required | default value |
+|-------------------------------|---------|----------|----------------|
+| table_name | string | yes | - |
+| metastore_uri | string | yes | - |
+| krb5_path | string | no | /etc/krb5.conf |
+| kerberos_principal | string | no | - |
+| kerberos_keytab_path | string | no | - |
+| hdfs_site_path | string | no | - |
+| hive_site_path | string | no | - |
+| read_partitions | list | no | - |
+| read_columns | list | no | - |
+| abort_drop_partition_metadata | boolean | no | true |
+| compress_codec | string | no | none |
+| common-options | | no | - |
+
+### table_name [string]
+
+Target Hive table name eg: db1.table1
+
+### metastore_uri [string]
+
+Hive metastore uri
+
+### hdfs_site_path [string]
+
+The path of `hdfs-site.xml`, used to load ha configuration of namenodes
+
+### hive_site_path [string]
+
+The path of `hive-site.xml`, used to authentication hive metastore
+
+### read_partitions [list]
+
+The target partitions that user want to read from hive table, if user does not set this parameter, it will read all the data from hive table.
+
+**Tips: Every partition in partitions list should have the same directory depth. For example, a hive table has two partitions: par1 and par2, if user sets it like as the following:**
+**read_partitions = [par1=xxx, par1=yyy/par2=zzz], it is illegal**
+
+### krb5_path [string]
+
+The path of `krb5.conf`, used to authentication kerberos
+
+### kerberos_principal [string]
+
+The principal of kerberos authentication
+
+### kerberos_keytab_path [string]
+
+The keytab file path of kerberos authentication
+
+### read_columns [list]
+
+The read column list of the data source, user can use it to implement field projection.
+
+### abort_drop_partition_metadata [list]
+
+Flag to decide whether to drop partition metadata from Hive Metastore during an abort operation. Note: this only affects the metadata in the metastore, the data in the partition will always be deleted(data generated during the synchronization process).
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc/parquet:
+ automatically recognizes the compression type, no additional settings required.
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+```bash
+
+ Hive {
+ table_name = "default.seatunnel_orc"
+ metastore_uri = "thrift://namenode001:9083"
+ }
+
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Hive Source Connector
+
+### Next version
+
+- [Improve] Support kerberos authentication ([3840](https://github.com/apache/seatunnel/pull/3840))
+- Support user-defined partitions ([3842](https://github.com/apache/seatunnel/pull/3842))
+
diff --git a/docs/zh/connector-v2/source/Http.md b/docs/zh/connector-v2/source/Http.md
new file mode 100644
index 00000000000..e4d021c05c5
--- /dev/null
+++ b/docs/zh/connector-v2/source/Http.md
@@ -0,0 +1,357 @@
+# Http
+
+> Http source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to read data from Http.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+Supported DataSource Info
+-------------------------
+
+In order to use the Http connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Dependency |
+|------------|--------------------|------------------------------------------------------------------------------------------------------------|
+| Http | universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/seatunnel-connectors-v2/connector-http) |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|-----------------------------|---------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | Http request url. |
+| schema | Config | No | - | Http and seatunnel data structure mapping |
+| schema.fields | Config | No | - | The schema fields of upstream data |
+| json_field | Config | No | - | This parameter helps you configure the schema,so this parameter must be used with schema. |
+| pageing | Config | No | - | This parameter is used for paging queries |
+| pageing.page_field | String | No | - | This parameter is used to specify the page field name in the request parameter |
+| pageing.total_page_size | Int | No | - | This parameter is used to control the total number of pages |
+| pageing.batch_size | Int | No | - | The batch size returned per request is used to determine whether to continue when the total number of pages is unknown |
+| content_json | String | No | - | This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`. |
+| format | String | No | text | The format of upstream data, now only support `json` `text`, default `text`. |
+| method | String | No | get | Http request method, only supports GET, POST method. |
+| headers | Map | No | - | Http headers. |
+| params | Map | No | - | Http params,the program will automatically add http header application/x-www-form-urlencoded. |
+| body | String | No | - | Http body,the program will automatically add http header application/json,body is jsonbody. |
+| poll_interval_millis | Int | No | - | Request http api interval(millis) in stream mode. |
+| retry | Int | No | - | The max retry times if request http return to `IOException`. |
+| retry_backoff_multiplier_ms | Int | No | 100 | The retry-backoff times(millis) multiplier if request http failed. |
+| retry_backoff_max_ms | Int | No | 10000 | The maximum retry-backoff times(millis) if request http failed |
+| enable_multi_lines | Boolean | No | false | |
+| connect_timeout_ms | Int | No | 12000 | Connection timeout setting, default 12s. |
+| socket_timeout_ms | Int | No | 60000 | Socket timeout setting, default 60s. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## How to Create a Http Data Synchronization Jobs
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ Http {
+ result_table_name = "http"
+ url = "http://mockserver:1080/example/http"
+ method = "GET"
+ format = "json"
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ c_row = {
+ C_MAP = "map"
+ C_ARRAY = "array"
+ C_STRING = string
+ C_BOOLEAN = boolean
+ C_TINYINT = tinyint
+ C_SMALLINT = smallint
+ C_INT = int
+ C_BIGINT = bigint
+ C_FLOAT = float
+ C_DOUBLE = double
+ C_BYTES = bytes
+ C_DATE = date
+ C_DECIMAL = "decimal(38, 18)"
+ C_TIMESTAMP = timestamp
+ }
+ }
+ }
+ }
+}
+
+# Console printing of the read Http data
+sink {
+ Console {
+ parallelism = 1
+ }
+}
+```
+
+## Parameter Interpretation
+
+### format
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### content_json
+
+This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`.
+
+If your return data looks something like this.
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can configure `content_field = "$.store.book.*"` and the result returned looks like this:
+
+```json
+[
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+]
+```
+
+Then you can get the desired result with a simpler schema,like
+
+```hocon
+Http {
+ url = "http://mockserver:1080/contentjson/mock"
+ method = "GET"
+ format = "json"
+ content_field = "$.store.book.*"
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+}
+```
+
+Here is an example:
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_contentjson_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_contentjson_to_assert.conf).
+
+### json_field
+
+This parameter helps you configure the schema,so this parameter must be used with schema.
+
+If your data looks something like this:
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can get the contents of 'book' by configuring the task as follows:
+
+```hocon
+source {
+ Http {
+ url = "http://mockserver:1080/jsonpath/mock"
+ method = "GET"
+ format = "json"
+ json_field = {
+ category = "$.store.book[*].category"
+ author = "$.store.book[*].author"
+ title = "$.store.book[*].title"
+ price = "$.store.book[*].price"
+ }
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+ }
+}
+```
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_jsonpath_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_jsonpath_to_assert.conf).
+
+### pageing
+
+```hocon
+source {
+ Http {
+ url = "http://localhost:8080/mock/queryData"
+ method = "GET"
+ format = "json"
+ params={
+ page: "${page}"
+ }
+ content_field = "$.data.*"
+ pageing={
+ total_page_size=20
+ page_field=page
+ #when don't know the total_page_size use batch_size if read size Hudi source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to read data from Hudi. Currently, only supports hudi cow table and Snapshot Query with Batch Mode.
+
+In order to use this connector, You must ensure your spark/flink cluster already integrated hive. The tested hive version is 2.3.9.
+
+## Supported DataSource Info
+
+:::tip
+
+* Currently, only supports Hudi cow table and Snapshot Query with Batch Mode
+
+:::
+
+## Data Type Mapping
+
+| Hudi Data Type | Seatunnel Data Type |
+|----------------|---------------------|
+| ALL TYPE | STRING |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------|--------|------------------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| table.path | String | Yes | - | The hdfs root path of hudi table,such as 'hdfs://nameserivce/data/hudi/hudi_table/'. |
+| table.type | String | Yes | - | The type of hudi table. Now we only support 'cow', 'mor' is not support yet. |
+| conf.files | String | Yes | - | The environment conf file path list(local path), which used to init hdfs client to read hudi table file. The example is '/home/test/hdfs-site.xml;/home/test/core-site.xml;/home/test/yarn-site.xml'. |
+| use.kerberos | bool | No | false | Whether to enable Kerberos, default is false. |
+| kerberos.principal | String | yes when use.kerberos = true | - | When use kerberos, we should set kerberos principal such as 'test_user@xxx'. |
+| kerberos.principal.file | string | yes when use.kerberos = true | - | When use kerberos, we should set kerberos principal file such as '/home/test/test_user.keytab'. |
+| common-options | config | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+## Task Example
+
+### Simple:
+
+> This example reads from a Hudi COW table and configures Kerberos for the environment, printing to the console.
+
+```hocon
+# Defining the runtime environment
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+source{
+ Hudi {
+ table.path = "hdfs://nameserivce/data/hudi/hudi_table/"
+ table.type = "cow"
+ conf.files = "/home/test/hdfs-site.xml;/home/test/core-site.xml;/home/test/yarn-site.xml"
+ use.kerberos = true
+ kerberos.principal = "test_user@xxx"
+ kerberos.principal.file = "/home/test/test_user.keytab"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql/
+}
+
+sink {
+ Console {}
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Hudi Source Connector
+
diff --git a/docs/zh/connector-v2/source/Iceberg.md b/docs/zh/connector-v2/source/Iceberg.md
new file mode 100644
index 00000000000..a01833f066b
--- /dev/null
+++ b/docs/zh/connector-v2/source/Iceberg.md
@@ -0,0 +1,192 @@
+# Apache Iceberg
+
+> Apache Iceberg source connector
+
+## Support Iceberg Version
+
+- 0.14.0
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] data format
+ - [x] parquet
+ - [x] orc
+ - [x] avro
+- [x] iceberg catalog
+ - [x] hadoop(2.7.1 , 2.7.5 , 3.1.3)
+ - [x] hive(2.3.9 , 3.1.2)
+
+## Description
+
+Source connector for Apache Iceberg. It can support batch and stream mode.
+
+## Supported DataSource Info
+
+| Datasource | Dependent | Maven |
+|------------|---------------------|---------------------------------------------------------------------------|
+| Iceberg | flink-shaded-hadoop | [Download](https://mvnrepository.com/search?q=flink-shaded-hadoop-) |
+| Iceberg | hive-exec | [Download](https://mvnrepository.com/artifact/org.apache.hive/hive-exec) |
+| Iceberg | libfb303 | [Download](https://mvnrepository.com/artifact/org.apache.thrift/libfb303) |
+
+## Database Dependency
+
+> In order to be compatible with different versions of Hadoop and Hive, the scope of hive-exec and flink-shaded-hadoop-2 in the project pom file are provided, so if you use the Flink engine, first you may need to add the following Jar packages to /lib directory, if you are using the Spark engine and integrated with Hadoop, then you do not need to add the following Jar packages.
+
+```
+flink-shaded-hadoop-x-xxx.jar
+hive-exec-xxx.jar
+libfb303-xxx.jar
+```
+
+> Some versions of the hive-exec package do not have libfb303-xxx.jar, so you also need to manually import the Jar package.
+
+## Data Type Mapping
+
+| Iceberg Data type | SeaTunnel Data type |
+|-------------------|---------------------|
+| BOOLEAN | BOOLEAN |
+| INTEGER | INT |
+| LONG | BIGINT |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| DATE | DATE |
+| TIME | TIME |
+| TIMESTAMP | TIMESTAMP |
+| STRING | STRING |
+| FIXED BINARY | BYTES |
+| DECIMAL | DECIMAL |
+| STRUCT | ROW |
+| LIST | ARRAY |
+| MAP | MAP |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|--------------------------|---------|----------|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| catalog_name | string | yes | - | User-specified catalog name. |
+| catalog_type | string | yes | - | The optional values are: hive(The hive metastore catalog),hadoop(The hadoop catalog) |
+| uri | string | no | - | The Hive metastore’s thrift URI. |
+| warehouse | string | yes | - | The location to store metadata files and data files. |
+| namespace | string | yes | - | The iceberg database name in the backend catalog. |
+| table | string | yes | - | The iceberg table name in the backend catalog. |
+| schema | config | no | - | Use projection to select data columns and columns order. |
+| case_sensitive | boolean | no | false | If data columns where selected via schema [config], controls whether the match to the schema will be done with case sensitivity. |
+| start_snapshot_timestamp | long | no | - | Instructs this scan to look for changes starting from the most recent snapshot for the table as of the timestamp. timestamp – the timestamp in millis since the Unix epoch |
+| start_snapshot_id | long | no | - | Instructs this scan to look for changes starting from a particular snapshot (exclusive). |
+| end_snapshot_id | long | no | - | Instructs this scan to look for changes up to a particular snapshot (inclusive). |
+| use_snapshot_id | long | no | - | Instructs this scan to look for use the given snapshot ID. |
+| use_snapshot_timestamp | long | no | - | Instructs this scan to look for use the most recent snapshot as of the given time in milliseconds. timestamp – the timestamp in millis since the Unix epoch |
+| stream_scan_strategy | enum | no | FROM_LATEST_SNAPSHOT | Starting strategy for stream mode execution, Default to use `FROM_LATEST_SNAPSHOT` if don’t specify any value,The optional values are: TABLE_SCAN_THEN_INCREMENTAL: Do a regular table scan then switch to the incremental mode. FROM_LATEST_SNAPSHOT: Start incremental mode from the latest snapshot inclusive. FROM_EARLIEST_SNAPSHOT: Start incremental mode from the earliest snapshot inclusive. FROM_SNAPSHOT_ID: Start incremental mode from a snapshot with a specific id inclusive. FROM_SNAPSHOT_TIMESTAMP: Start incremental mode from a snapshot with a specific timestamp inclusive. |
+| common-options | | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+## Task Example
+
+### Simple:
+
+```hocon
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+
+source {
+ Iceberg {
+ schema {
+ fields {
+ f2 = "boolean"
+ f1 = "bigint"
+ f3 = "int"
+ f4 = "bigint"
+ f5 = "float"
+ f6 = "double"
+ f7 = "date"
+ f9 = "timestamp"
+ f10 = "timestamp"
+ f11 = "string"
+ f12 = "bytes"
+ f13 = "bytes"
+ f14 = "decimal(19,9)"
+ f15 = "array"
+ f16 = "map"
+ }
+ }
+ catalog_name = "seatunnel"
+ catalog_type = "hadoop"
+ warehouse = "file:///tmp/seatunnel/iceberg/hadoop/"
+ namespace = "database1"
+ table = "source"
+ result_table_name = "iceberg"
+ }
+}
+
+transform {
+}
+
+sink {
+ Console {
+ source_table_name = "iceberg"
+ }
+}
+```
+
+### Hive Catalog:
+
+```hocon
+source {
+ Iceberg {
+ catalog_name = "seatunnel"
+ catalog_type = "hive"
+ uri = "thrift://localhost:9083"
+ warehouse = "hdfs://your_cluster//tmp/seatunnel/iceberg/"
+ namespace = "your_iceberg_database"
+ table = "your_iceberg_table"
+ }
+}
+```
+
+### Column Projection:
+
+```hocon
+source {
+ Iceberg {
+ catalog_name = "seatunnel"
+ catalog_type = "hadoop"
+ warehouse = "hdfs://your_cluster/tmp/seatunnel/iceberg/"
+ namespace = "your_iceberg_database"
+ table = "your_iceberg_table"
+
+ schema {
+ fields {
+ f2 = "boolean"
+ f1 = "bigint"
+ f3 = "int"
+ f4 = "bigint"
+ }
+ }
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Iceberg Source Connector
+
+### next version
+
+- [Feature] Support Hadoop3.x ([3046](https://github.com/apache/seatunnel/pull/3046))
+- [improve][api] Refactoring schema parse ([4157](https://github.com/apache/seatunnel/pull/4157))
+
diff --git a/docs/zh/connector-v2/source/InfluxDB.md b/docs/zh/connector-v2/source/InfluxDB.md
new file mode 100644
index 00000000000..d9eee30829d
--- /dev/null
+++ b/docs/zh/connector-v2/source/InfluxDB.md
@@ -0,0 +1,195 @@
+# InfluxDB
+
+> InfluxDB source connector
+
+## Description
+
+Read external data source data through InfluxDB.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+
+supports query SQL and can achieve projection effect.
+
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|--------------------|--------|----------|---------------|
+| url | string | yes | - |
+| sql | string | yes | - |
+| schema | config | yes | - |
+| database | string | yes | |
+| username | string | no | - |
+| password | string | no | - |
+| lower_bound | long | no | - |
+| upper_bound | long | no | - |
+| partition_num | int | no | - |
+| split_column | string | no | - |
+| epoch | string | no | n |
+| connect_timeout_ms | long | no | 15000 |
+| query_timeout_sec | int | no | 3 |
+| common-options | config | no | - |
+
+### url
+
+the url to connect to influxDB e.g.
+
+```
+http://influxdb-host:8086
+```
+
+### sql [string]
+
+The query sql used to search data
+
+```
+select name,age from test
+```
+
+### schema [config]
+
+#### fields [Config]
+
+The schema information of upstream data.
+e.g.
+
+```
+schema {
+ fields {
+ name = string
+ age = int
+ }
+ }
+```
+
+### database [string]
+
+The `influxDB` database
+
+### username [string]
+
+the username of the influxDB when you select
+
+### password [string]
+
+the password of the influxDB when you select
+
+### split_column [string]
+
+the `split_column` of the influxDB when you select
+
+> Tips:
+> - influxDB tags is not supported as a segmented primary key because the type of tags can only be a string
+> - influxDB time is not supported as a segmented primary key because the time field cannot participate in mathematical calculation
+> - Currently, `split_column` only supports integer data segmentation, and does not support `float`, `string`, `date` and other types.
+
+### upper_bound [long]
+
+upper bound of the `split_column`column
+
+### lower_bound [long]
+
+lower bound of the `split_column` column
+
+```
+ split the $split_column range into $partition_num parts
+ if partition_num is 1, use the whole `split_column` range
+ if partition_num < (upper_bound - lower_bound), use (upper_bound - lower_bound) partitions
+
+ eg: lower_bound = 1, upper_bound = 10, partition_num = 2
+ sql = "select * from test where age > 0 and age < 10"
+
+ split result
+
+ split 1: select * from test where ($split_column >= 1 and $split_column < 6) and ( age > 0 and age < 10 )
+
+ split 2: select * from test where ($split_column >= 6 and $split_column < 11) and ( age > 0 and age < 10 )
+
+```
+
+### partition_num [int]
+
+the `partition_num` of the InfluxDB when you select
+
+> Tips: Ensure that `upper_bound` minus `lower_bound` is divided `bypartition_num`, otherwise the query results will overlap
+
+### epoch [string]
+
+returned time precision
+- Optional values: H, m, s, MS, u, n
+- default value: n
+
+### query_timeout_sec [int]
+
+the `query_timeout` of the InfluxDB when you select, in seconds
+
+### connect_timeout_ms [long]
+
+the timeout for connecting to InfluxDB, in milliseconds
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Examples
+
+Example of multi parallelism and multi partition scanning
+
+```hocon
+source {
+
+ InfluxDB {
+ url = "http://influxdb-host:8086"
+ sql = "select label, value, rt, time from test"
+ database = "test"
+ upper_bound = 100
+ lower_bound = 1
+ partition_num = 4
+ split_column = "value"
+ schema {
+ fields {
+ label = STRING
+ value = INT
+ rt = STRING
+ time = BIGINT
+ }
+ }
+
+}
+
+```
+
+Example of not using partition scan
+
+```hocon
+source {
+
+ InfluxDB {
+ url = "http://influxdb-host:8086"
+ sql = "select label, value, rt, time from test"
+ database = "test"
+ schema {
+ fields {
+ label = STRING
+ value = INT
+ rt = STRING
+ time = BIGINT
+ }
+ }
+
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add InfluxDB Source Connector
+
diff --git a/docs/zh/connector-v2/source/IoTDB.md b/docs/zh/connector-v2/source/IoTDB.md
new file mode 100644
index 00000000000..ee9f04cb7a5
--- /dev/null
+++ b/docs/zh/connector-v2/source/IoTDB.md
@@ -0,0 +1,187 @@
+# IoTDB
+
+> IoTDB source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Description
+
+Read external data source data through IoTDB.
+
+:::tip
+
+There is a conflict of thrift version between IoTDB and Spark.Therefore, you need to execute `rm -f $SPARK_HOME/jars/libthrift*` and `cp $IOTDB_HOME/lib/libthrift* $SPARK_HOME/jars/` to resolve it.
+
+:::
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/org.apache.iotdb/iotdb-jdbc) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/org.apache.iotdb/iotdb-jdbc) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+
+supports query SQL and can achieve projection effect.
+
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions | Url |
+|------------|--------------------|----------------|
+| IoTDB | `>= 0.13.0` | localhost:6667 |
+
+## Data Type Mapping
+
+| IotDB Data Type | SeaTunnel Data Type |
+|-----------------|---------------------|
+| BOOLEAN | BOOLEAN |
+| INT32 | TINYINT |
+| INT32 | SMALLINT |
+| INT32 | INT |
+| INT64 | BIGINT |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| TEXT | STRING |
+
+## Source Options
+
+| Name | Type | Required | Default Value | Description |
+|----------------------------|---------|----------|---------------|------------------------------------------------------------------------------------|
+| node_urls | string | yes | - | `IoTDB` cluster address, the format is `"host1:port"` or `"host1:port,host2:port"` |
+| username | string | yes | - | `IoTDB` user username |
+| password | string | yes | - | `IoTDB` user password |
+| sql | string | yes | - | execute sql statement |
+| schema | config | yes | - | the data schema |
+| fetch_size | int | no | - | the fetch_size of the IoTDB when you select |
+| lower_bound | long | no | - | the lower_bound of the IoTDB when you select |
+| upper_bound | long | no | - | the upper_bound of the IoTDB when you select |
+| num_partitions | int | no | - | the num_partitions of the IoTDB when you select |
+| thrift_default_buffer_size | int | no | - | the thrift_default_buffer_size of the IoTDB when you select |
+| thrift_max_frame_size | int | no | - | the thrift max frame size |
+| enable_cache_leader | boolean | no | - | enable_cache_leader of the IoTDB when you select |
+| version | string | no | - | SQL semantic version used by the client, The possible values are: V_0_12, V_0_13 |
+| common-options | | no | - | |
+
+### split partitions
+
+we can split the partitions of the IoTDB and we used time column split
+
+#### num_partitions [int]
+
+split num
+
+### upper_bound [long]
+
+upper bound of the time column
+
+### lower_bound [long]
+
+lower bound of the time column
+
+```
+ split the time range into numPartitions parts
+ if numPartitions is 1, use the whole time range
+ if numPartitions < (upper_bound - lower_bound), use (upper_bound - lower_bound) partitions
+
+ eg: lower_bound = 1, upper_bound = 10, numPartitions = 2
+ sql = "select * from test where age > 0 and age < 10"
+
+ split result
+
+ split 1: select * from test where (time >= 1 and time < 6) and ( age > 0 and age < 10 )
+
+ split 2: select * from test where (time >= 6 and time < 11) and ( age > 0 and age < 10 )
+
+```
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Examples
+
+```hocon
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+
+source {
+ IoTDB {
+ node_urls = "localhost:6667"
+ username = "root"
+ password = "root"
+ sql = "SELECT temperature, moisture, c_int, c_bigint, c_float, c_double, c_string, c_boolean FROM root.test_group.* WHERE time < 4102329600000 align by device"
+ schema {
+ fields {
+ ts = timestamp
+ device_name = string
+ temperature = float
+ moisture = bigint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_string = string
+ c_boolean = boolean
+ }
+ }
+ }
+}
+
+sink {
+ Console {
+ }
+}
+```
+
+Upstream `IoTDB` data format is the following:
+
+```shell
+IoTDB> SELECT temperature, moisture, c_int, c_bigint, c_float, c_double, c_string, c_boolean FROM root.test_group.* WHERE time < 4102329600000 align by device;
++------------------------+------------------------+--------------+-----------+--------+--------------+----------+---------+---------+----------+
+| Time| Device| temperature| moisture| c_int| c_bigint| c_float| c_double| c_string| c_boolean|
++------------------------+------------------------+--------------+-----------+--------+--------------+----------+---------+---------+----------+
+|2022-09-25T00:00:00.001Z|root.test_group.device_a| 36.1| 100| 1| 21474836470| 1.0f| 1.0d| abc| true|
+|2022-09-25T00:00:00.001Z|root.test_group.device_b| 36.2| 101| 2| 21474836470| 2.0f| 2.0d| abc| true|
+|2022-09-25T00:00:00.001Z|root.test_group.device_c| 36.3| 102| 3| 21474836470| 3.0f| 3.0d| abc| true|
++------------------------+------------------------+--------------+-----------+--------+--------------+----------+---------+---------+----------+
+```
+
+Loaded to SeaTunnelRow data format is the following:
+
+| ts | device_name | temperature | moisture | c_int | c_bigint | c_float | c_double | c_string | c_boolean |
+|---------------|--------------------------|-------------|----------|-------|-------------|---------|----------|----------|-----------|
+| 1664035200001 | root.test_group.device_a | 36.1 | 100 | 1 | 21474836470 | 1.0f | 1.0d | abc | true |
+| 1664035200001 | root.test_group.device_b | 36.2 | 101 | 2 | 21474836470 | 2.0f | 2.0d | abc | true |
+| 1664035200001 | root.test_group.device_c | 36.3 | 102 | 3 | 21474836470 | 3.0f | 3.0d | abc | true |
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add IoTDB Source Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [Improve] Improve IoTDB Source Connector ([2917](https://github.com/apache/seatunnel/pull/2917))
+ - Support extract timestamp、device、measurement from SeaTunnelRow
+ - Support TINYINT、SMALLINT
+ - Support flush cache to database before prepareCommit
+
diff --git a/docs/zh/connector-v2/source/Jdbc.md b/docs/zh/connector-v2/source/Jdbc.md
new file mode 100644
index 00000000000..09c3ab636d7
--- /dev/null
+++ b/docs/zh/connector-v2/source/Jdbc.md
@@ -0,0 +1,387 @@
+# JDBC
+
+> JDBC source connector
+
+## Description
+
+Read external data source data through JDBC.
+
+:::tip
+
+Warn: for license compliance, you have to provide database driver yourself, copy to `$SEATNUNNEL_HOME/lib/` directory in order to make them work.
+
+e.g. If you use MySQL, should download and copy `mysql-connector-java-xxx.jar` to `$SEATNUNNEL_HOME/lib/`. For Spark/Flink, you should also copy it to `$SPARK_HOME/jars/` or `$FLINK_HOME/lib/`.
+
+:::
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/mysql/mysql-connector-java) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/mysql/mysql-connector-java) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+
+supports query SQL and can achieve projection effect.
+
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] [support multiple table read](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|--------------------------------------------|--------|----------|-----------------|
+| url | String | Yes | - |
+| driver | String | Yes | - |
+| user | String | No | - |
+| password | String | No | - |
+| query | String | No | - |
+| compatible_mode | String | No | - |
+| connection_check_timeout_sec | Int | No | 30 |
+| partition_column | String | No | - |
+| partition_upper_bound | Long | No | - |
+| partition_lower_bound | Long | No | - |
+| partition_num | Int | No | job parallelism |
+| fetch_size | Int | No | 0 |
+| properties | Map | No | - |
+| table_path | String | No | - |
+| table_list | Array | No | - |
+| where_condition | String | No | - |
+| split.size | Int | No | 8096 |
+| split.even-distribution.factor.lower-bound | Double | No | 0.05 |
+| split.even-distribution.factor.upper-bound | Double | No | 100 |
+| split.sample-sharding.threshold | Int | No | 1000 |
+| split.inverse-sampling.rate | Int | No | 1000 |
+| common-options | | No | - |
+
+### driver [string]
+
+The jdbc class name used to connect to the remote data source, if you use MySQL the value is `com.mysql.cj.jdbc.Driver`.
+
+### user [string]
+
+userName
+
+### password [string]
+
+password
+
+### url [string]
+
+The URL of the JDBC connection. Refer to a case: jdbc:postgresql://localhost/test
+
+### query [string]
+
+Query statement
+
+### compatible_mode [string]
+
+The compatible mode of database, required when the database supports multiple compatible modes. For example, when using OceanBase database, you need to set it to 'mysql' or 'oracle'.
+
+### connection_check_timeout_sec [int]
+
+The time in seconds to wait for the database operation used to validate the connection to complete.
+
+### fetch_size [int]
+
+For queries that return a large number of objects, you can configure the row fetch size used in the query to
+improve performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value.
+
+### properties
+
+Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL.
+
+### table_path
+
+The path to the full path of table, you can use this configuration instead of `query`.
+
+examples:
+- mysql: "testdb.table1"
+- oracle: "test_schema.table1"
+- sqlserver: "testdb.test_schema.table1"
+- postgresql: "testdb.test_schema.table1"
+
+### table_list
+
+The list of tables to be read, you can use this configuration instead of `table_path`
+
+example
+
+```hocon
+table_list = [
+ {
+ table_path = "testdb.table1"
+ }
+ {
+ table_path = "testdb.table2"
+ query = "select * from testdb.table2 where id > 100"
+ }
+]
+```
+
+### where_condition
+
+Common row filter conditions for all tables/queries, must start with `where`. for example `where id > 100`
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details.
+
+## Parallel Reader
+
+The JDBC Source connector supports parallel reading of data from tables. SeaTunnel will use certain rules to split the data in the table, which will be handed over to readers for reading. The number of readers is determined by the `parallelism` option.
+
+**Split Key Rules:**
+
+1. If `partition_column` is not null, It will be used to calculate split. The column must in **Supported split data type**.
+2. If `partition_column` is null, seatunnel will read the schema from table and get the Primary Key and Unique Index. If there are more than one column in Primary Key and Unique Index, The first column which in the **supported split data type** will be used to split data. For example, the table have Primary Key(nn guid, name varchar), because `guid` id not in **supported split data type**, so the column `name` will be used to split data.
+
+**Supported split data type:**
+* String
+* Number(int, bigint, decimal, ...)
+* Date
+
+### Options Related To Split
+
+#### split.size
+
+How many rows in one split, captured tables are split into multiple splits when read of table.
+
+#### split.even-distribution.factor.lower-bound
+
+> Not recommended for use
+
+The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05.
+
+#### split.even-distribution.factor.upper-bound
+
+> Not recommended for use
+
+The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0.
+
+#### split.sample-sharding.threshold
+
+This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards.
+
+#### split.inverse-sampling.rate
+
+The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000.
+
+#### partition_column [string]
+
+The column name for split data.
+
+#### partition_upper_bound [BigDecimal]
+
+The partition_column max value for scan, if not set SeaTunnel will query database get max value.
+
+#### partition_lower_bound [BigDecimal]
+
+The partition_column min value for scan, if not set SeaTunnel will query database get min value.
+
+#### partition_num [int]
+
+> Not recommended for use, The correct approach is to control the number of split through `split.size`
+
+How many splits do we need to split into, only support positive integer. default value is job parallelism.
+
+## tips
+
+> If the table can not be split(for example, table have no Primary Key or Unique Index, and `partition_column` is not set), it will run in single concurrency.
+>
+> Use `table_path` to replace `query` for single table reading. If you need to read multiple tables, use `table_list`.
+
+## appendix
+
+there are some reference value for params above.
+
+| datasource | driver | url | maven |
+|------------|-----------------------------------------------------|------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
+| mysql | com.mysql.cj.jdbc.Driver | jdbc:mysql://localhost:3306/test | https://mvnrepository.com/artifact/mysql/mysql-connector-java |
+| postgresql | org.postgresql.Driver | jdbc:postgresql://localhost:5432/postgres | https://mvnrepository.com/artifact/org.postgresql/postgresql |
+| dm | dm.jdbc.driver.DmDriver | jdbc:dm://localhost:5236 | https://mvnrepository.com/artifact/com.dameng/DmJdbcDriver18 |
+| phoenix | org.apache.phoenix.queryserver.client.Driver | jdbc:phoenix:thin:url=http://localhost:8765;serialization=PROTOBUF | https://mvnrepository.com/artifact/com.aliyun.phoenix/ali-phoenix-shaded-thin-client |
+| sqlserver | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://localhost:1433 | https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc |
+| oracle | oracle.jdbc.OracleDriver | jdbc:oracle:thin:@localhost:1521/xepdb1 | https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 |
+| sqlite | org.sqlite.JDBC | jdbc:sqlite:test.db | https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc |
+| gbase8a | com.gbase.jdbc.Driver | jdbc:gbase://e2e_gbase8aDb:5258/test | https://www.gbase8.cn/wp-content/uploads/2020/10/gbase-connector-java-8.3.81.53-build55.5.7-bin_min_mix.jar |
+| starrocks | com.mysql.cj.jdbc.Driver | jdbc:mysql://localhost:3306/test | https://mvnrepository.com/artifact/mysql/mysql-connector-java |
+| db2 | com.ibm.db2.jcc.DB2Driver | jdbc:db2://localhost:50000/testdb | https://mvnrepository.com/artifact/com.ibm.db2.jcc/db2jcc/db2jcc4 |
+| tablestore | com.alicloud.openservices.tablestore.jdbc.OTSDriver | "jdbc:ots:http s://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance" | https://mvnrepository.com/artifact/com.aliyun.openservices/tablestore-jdbc |
+| saphana | com.sap.db.jdbc.Driver | jdbc:sap://localhost:39015 | https://mvnrepository.com/artifact/com.sap.cloud.db.jdbc/ngdbc |
+| doris | com.mysql.cj.jdbc.Driver | jdbc:mysql://localhost:3306/test | https://mvnrepository.com/artifact/mysql/mysql-connector-java |
+| teradata | com.teradata.jdbc.TeraDriver | jdbc:teradata://localhost/DBS_PORT=1025,DATABASE=test | https://mvnrepository.com/artifact/com.teradata.jdbc/terajdbc |
+| Snowflake | net.snowflake.client.jdbc.SnowflakeDriver | jdbc:snowflake://.snowflakecomputing.com | https://mvnrepository.com/artifact/net.snowflake/snowflake-jdbc |
+| Redshift | com.amazon.redshift.jdbc42.Driver | jdbc:redshift://localhost:5439/testdb?defaultRowFetchSize=1000 | https://mvnrepository.com/artifact/com.amazon.redshift/redshift-jdbc42 |
+| Vertica | com.vertica.jdbc.Driver | jdbc:vertica://localhost:5433 | https://repo1.maven.org/maven2/com/vertica/jdbc/vertica-jdbc/12.0.3-0/vertica-jdbc-12.0.3-0.jar |
+| Kingbase | com.kingbase8.Driver | jdbc:kingbase8://localhost:54321/db_test | https://repo1.maven.org/maven2/cn/com/kingbase/kingbase8/8.6.0/kingbase8-8.6.0.jar |
+| OceanBase | com.oceanbase.jdbc.Driver | jdbc:oceanbase://localhost:2881 | https://repo1.maven.org/maven2/com/oceanbase/oceanbase-client/2.4.3/oceanbase-client-2.4.3.jar |
+| Hive | org.apache.hive.jdbc.HiveDriver | jdbc:hive2://localhost:10000 | https://repo1.maven.org/maven2/org/apache/hive/hive-jdbc/3.1.3/hive-jdbc-3.1.3-standalone.jar |
+
+## Example
+
+### simple
+
+```
+Jdbc {
+ url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
+ driver = "com.mysql.cj.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ query = "select * from type_bin"
+}
+```
+
+### parallel by partition_column
+
+```
+env {
+ parallelism = 10
+ job.mode = "BATCH"
+}
+source {
+ Jdbc {
+ url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
+ driver = "com.mysql.cj.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ query = "select * from type_bin"
+ partition_column = "id"
+ split.size = 10000
+ # Read start boundary
+ #partition_lower_bound = ...
+ # Read end boundary
+ #partition_upper_bound = ...
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
+### Parallel Boundary:
+
+> It is more efficient to specify the data within the upper and lower bounds of the query. It is more efficient to read your data source according to the upper and lower boundaries you configured.
+
+```
+source {
+ Jdbc {
+ url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
+ driver = "com.mysql.cj.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ # Define query logic as required
+ query = "select * from type_bin"
+ partition_column = "id"
+ # Read start boundary
+ partition_lower_bound = 1
+ # Read end boundary
+ partition_upper_bound = 500
+ partition_num = 10
+ properties {
+ useSSL=false
+ }
+ }
+}
+```
+
+### parallel by Primary Key or Unique Index
+
+> Configuring `table_path` will turn on auto split, you can configure `split.*` to adjust the split strategy
+
+```
+env {
+ parallelism = 10
+ job.mode = "BATCH"
+}
+source {
+ Jdbc {
+ url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
+ driver = "com.mysql.cj.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ table_path = "testdb.table1"
+ query = "select * from testdb.table1"
+ split.size = 10000
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
+### multiple table read:
+
+***Configuring `table_list` will turn on auto split, you can configure `split.*` to adjust the split strategy***
+
+```hocon
+Jdbc {
+ url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
+ driver = "com.mysql.cj.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+
+ table_list = [
+ {
+ # e.g. table_path = "testdb.table1"、table_path = "test_schema.table1"、table_path = "testdb.test_schema.table1"
+ table_path = "testdb.table1"
+ },
+ {
+ table_path = "testdb.table2"
+ # Use query filetr rows & columns
+ query = "select id, name from testdb.table2 where id > 100"
+ }
+ ]
+ #where_condition= "where id > 100"
+ #split.size = 10000
+ #split.even-distribution.factor.upper-bound = 100
+ #split.even-distribution.factor.lower-bound = 0.05
+ #split.sample-sharding.threshold = 1000
+ #split.inverse-sampling.rate = 1000
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add ClickHouse Source Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [Feature] Support Phoenix JDBC Source ([2499](https://github.com/apache/seatunnel/pull/2499))
+- [Feature] Support SQL Server JDBC Source ([2646](https://github.com/apache/seatunnel/pull/2646))
+- [Feature] Support Oracle JDBC Source ([2550](https://github.com/apache/seatunnel/pull/2550))
+- [Feature] Support StarRocks JDBC Source ([3060](https://github.com/apache/seatunnel/pull/3060))
+- [Feature] Support GBase8a JDBC Source ([3026](https://github.com/apache/seatunnel/pull/3026))
+- [Feature] Support DB2 JDBC Source ([2410](https://github.com/apache/seatunnel/pull/2410))
+
+### next version
+
+- [BugFix] Fix jdbc split bug ([3220](https://github.com/apache/seatunnel/pull/3220))
+- [Feature] Support Sqlite JDBC Source ([3089](https://github.com/apache/seatunnel/pull/3089))
+- [Feature] Support Tablestore Source ([3309](https://github.com/apache/seatunnel/pull/3309))
+- [Feature] Support Teradata JDBC Source ([3362](https://github.com/apache/seatunnel/pull/3362))
+- [Feature] Support JDBC Fetch Size Config ([3478](https://github.com/apache/seatunnel/pull/3478))
+- [Feature] Support Doris JDBC Source ([3586](https://github.com/apache/seatunnel/pull/3586))
+- [Feature] Support Redshift JDBC Sink([#3615](https://github.com/apache/seatunnel/pull/3615))
+- [BugFix] Fix jdbc connection reset bug ([3670](https://github.com/apache/seatunnel/pull/3670))
+- [Improve] Add Vertica connector([#4303](https://github.com/apache/seatunnel/pull/4303))
+
diff --git a/docs/zh/connector-v2/source/Jira.md b/docs/zh/connector-v2/source/Jira.md
new file mode 100644
index 00000000000..dcfe6cc11d3
--- /dev/null
+++ b/docs/zh/connector-v2/source/Jira.md
@@ -0,0 +1,305 @@
+# Jira
+
+> Jira source connector
+
+## Description
+
+Used to read data from Jira.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------------|---------|----------|---------------|
+| url | String | Yes | - |
+| email | String | Yes | - |
+| api_token | String | Yes | - |
+| method | String | No | get |
+| schema.fields | Config | No | - |
+| format | String | No | json |
+| params | Map | No | - |
+| body | String | No | - |
+| json_field | Config | No | - |
+| content_json | String | No | - |
+| poll_interval_millis | int | No | - |
+| retry | int | No | - |
+| retry_backoff_multiplier_ms | int | No | 100 |
+| retry_backoff_max_ms | int | No | 10000 |
+| enable_multi_lines | boolean | No | false |
+| common-options | config | No | - |
+
+### url [String]
+
+http request url
+
+### email [String]
+
+Jira Email
+
+### api_token [String]
+
+Jira API Token
+
+https://id.atlassian.com/manage-profile/security/api-tokens
+
+### method [String]
+
+http request method, only supports GET, POST method
+
+### params [Map]
+
+http params
+
+### body [String]
+
+http body
+
+### poll_interval_millis [int]
+
+request http api interval(millis) in stream mode
+
+### retry [int]
+
+The max retry times if request http return to `IOException`
+
+### retry_backoff_multiplier_ms [int]
+
+The retry-backoff times(millis) multiplier if request http failed
+
+### retry_backoff_max_ms [int]
+
+The maximum retry-backoff times(millis) if request http failed
+
+### format [String]
+
+the format of upstream data, now only support `json` `text`, default `json`.
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### schema [Config]
+
+#### fields [Config]
+
+the schema fields of upstream data
+
+### content_json [String]
+
+This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`.
+
+If your return data looks something like this.
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can configure `content_field = "$.store.book.*"` and the result returned looks like this:
+
+```json
+[
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+]
+```
+
+Then you can get the desired result with a simpler schema,like
+
+```hocon
+Http {
+ url = "http://mockserver:1080/contentjson/mock"
+ method = "GET"
+ format = "json"
+ content_field = "$.store.book.*"
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+}
+```
+
+Here is an example:
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_contentjson_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_contentjson_to_assert.conf).
+
+### json_field [Config]
+
+This parameter helps you configure the schema,so this parameter must be used with schema.
+
+If your data looks something like this:
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can get the contents of 'book' by configuring the task as follows:
+
+```hocon
+source {
+ Http {
+ url = "http://mockserver:1080/jsonpath/mock"
+ method = "GET"
+ format = "json"
+ json_field = {
+ category = "$.store.book[*].category"
+ author = "$.store.book[*].author"
+ title = "$.store.book[*].title"
+ price = "$.store.book[*].price"
+ }
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+ }
+}
+```
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_jsonpath_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_jsonpath_to_assert.conf).
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+Jira {
+ url = "https://liugddx.atlassian.net/rest/api/3/search"
+ email = "test@test.com"
+ api_token = "xxx"
+ schema {
+ fields {
+ expand = string
+ startAt = bigint
+ maxResults = int
+ total = int
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Jira Source Connector
+- [Feature][Connector-V2][HTTP] Use json-path parsing ([3510](https://github.com/apache/seatunnel/pull/3510))
+
diff --git a/docs/zh/connector-v2/source/Kingbase.md b/docs/zh/connector-v2/source/Kingbase.md
new file mode 100644
index 00000000000..5e9630e4e52
--- /dev/null
+++ b/docs/zh/connector-v2/source/Kingbase.md
@@ -0,0 +1,148 @@
+# Kingbase
+
+> JDBC Kingbase Source Connector
+
+## Support Connector Version
+
+- 8.6
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Read external data source data through JDBC.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|--------------------|----------------------|------------------------------------------|------------------------------------------------------------------------------------------------|
+| Kingbase | 8.6 | com.kingbase8.Driver | jdbc:kingbase8://localhost:54321/db_test | [Download](https://repo1.maven.org/maven2/cn/com/kingbase/kingbase8/8.6.0/kingbase8-8.6.0.jar) |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example: cp kingbase8-8.6.0.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| Kingbase Data type | SeaTunnel Data type |
+|-------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
+| BOOL | BOOLEAN |
+| INT2 | SHORT |
+| SMALLSERIAL SERIAL INT4 | INT |
+| INT8 BIGSERIAL | BIGINT |
+| FLOAT4 | FLOAT |
+| FLOAT8 | DOUBLE |
+| NUMERIC | DECIMAL((Get the designated column's specified column size), (Gets the designated column's number of digits to right of the decimal point.))) |
+| BPCHAR CHARACTER VARCHAR TEXT | STRING |
+| TIMESTAMP | LOCALDATETIME |
+| TIME | LOCALTIME |
+| DATE | LOCALDATE |
+| Other data type | Not supported yet |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------|------------|----------|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:kingbase8://localhost:54321/test |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, should be `com.kingbase8.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type column and string type column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. Default value is job parallelism. |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects, you can configure the row fetch size used in the query to improve performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+```
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+
+source {
+ Jdbc {
+ driver = "com.kingbase8.Driver"
+ url = "jdbc:kingbase8://localhost:54321/db_test"
+ user = "root"
+ password = ""
+ query = "select * from source"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+### Parallel:
+
+> Read your query table in parallel with the shard field you configured and the shard data. You can do this if you want to read the whole table
+
+```
+source {
+ Jdbc {
+ driver = "com.kingbase8.Driver"
+ url = "jdbc:kingbase8://localhost:54321/db_test"
+ user = "root"
+ password = ""
+ query = "select * from source"
+ # Parallel sharding reads fields
+ partition_column = "id"
+ # Number of fragments
+ partition_num = 10
+ }
+}
+```
+
+### Parallel Boundary:
+
+> It is more efficient to read your data source according to the upper and lower boundaries you configured
+
+```
+source {
+ Jdbc {
+ driver = "com.kingbase8.Driver"
+ url = "jdbc:kingbase8://localhost:54321/db_test"
+ user = "root"
+ password = ""
+ query = "select * from source"
+ partition_column = "id"
+ partition_num = 10
+ # Read start boundary
+ partition_lower_bound = 1
+ # Read end boundary
+ partition_upper_bound = 500
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/source/Klaviyo.md b/docs/zh/connector-v2/source/Klaviyo.md
new file mode 100644
index 00000000000..e80a2434fdf
--- /dev/null
+++ b/docs/zh/connector-v2/source/Klaviyo.md
@@ -0,0 +1,312 @@
+# Klaviyo
+
+> Klaviyo source connector
+
+## Description
+
+Used to read data from Klaviyo.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------------|---------|----------|---------------|
+| url | String | Yes | - |
+| private_key | String | Yes | - |
+| revision | String | Yes | - |
+| method | String | No | get |
+| schema | Config | No | - |
+| schema.fields | Config | No | - |
+| format | String | No | json |
+| params | Map | No | - |
+| body | String | No | - |
+| json_field | Config | No | - |
+| content_json | String | No | - |
+| poll_interval_millis | int | No | - |
+| retry | int | No | - |
+| retry_backoff_multiplier_ms | int | No | 100 |
+| retry_backoff_max_ms | int | No | 10000 |
+| enable_multi_lines | boolean | No | false |
+| common-options | config | No | - |
+
+### url [String]
+
+http request url
+
+### private_key [String]
+
+API private key for login, you can get more detail at this link:
+
+https://developers.klaviyo.com/en/docs/retrieve_api_credentials
+
+### revision [String]
+
+API endpoint revision (format: YYYY-MM-DD)
+
+### method [String]
+
+http request method, only supports GET, POST method
+
+### params [Map]
+
+http params
+
+### body [String]
+
+http body
+
+### poll_interval_millis [int]
+
+request http api interval(millis) in stream mode
+
+### retry [int]
+
+The max retry times if request http return to `IOException`
+
+### retry_backoff_multiplier_ms [int]
+
+The retry-backoff times(millis) multiplier if request http failed
+
+### retry_backoff_max_ms [int]
+
+The maximum retry-backoff times(millis) if request http failed
+
+### format [String]
+
+the format of upstream data, now only support `json` `text`, default `json`.
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+you should assign schema as the following:
+
+```hocon
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### schema [Config]
+
+#### fields [Config]
+
+the schema fields of upstream data
+
+### content_json [String]
+
+This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`.
+
+If your return data looks something like this.
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can configure `content_field = "$.store.book.*"` and the result returned looks like this:
+
+```json
+[
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+]
+```
+
+Then you can get the desired result with a simpler schema,like
+
+```hocon
+Http {
+ url = "http://mockserver:1080/contentjson/mock"
+ method = "GET"
+ format = "json"
+ content_field = "$.store.book.*"
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+}
+```
+
+Here is an example:
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_contentjson_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_contentjson_to_assert.conf).
+
+### json_field [Config]
+
+This parameter helps you configure the schema,so this parameter must be used with schema.
+
+If your data looks something like this:
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can get the contents of 'book' by configuring the task as follows:
+
+```hocon
+source {
+ Http {
+ url = "http://mockserver:1080/jsonpath/mock"
+ method = "GET"
+ format = "json"
+ json_field = {
+ category = "$.store.book[*].category"
+ author = "$.store.book[*].author"
+ title = "$.store.book[*].title"
+ price = "$.store.book[*].price"
+ }
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+ }
+}
+```
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_jsonpath_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_jsonpath_to_assert.conf).
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+Klaviyo {
+ url = "https://a.klaviyo.com/api/lists/"
+ private_key = "SeaTunnel-test"
+ revision = "2020-10-17"
+ method = "GET"
+ format = "json"
+ schema = {
+ fields {
+ type = string
+ id = string
+ attributes = {
+ name = string
+ created = string
+ updated = string
+ }
+ links = {
+ self = string
+ }
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Klaviyo Source Connector
+- [Feature][Connector-V2][HTTP] Use json-path parsing ([3510](https://github.com/apache/seatunnel/pull/3510))
+
diff --git a/docs/zh/connector-v2/source/Kudu.md b/docs/zh/connector-v2/source/Kudu.md
new file mode 100644
index 00000000000..4d834e5e2d6
--- /dev/null
+++ b/docs/zh/connector-v2/source/Kudu.md
@@ -0,0 +1,153 @@
+# Kudu
+
+> Kudu source connector
+
+## Support Kudu Version
+
+- 1.11.1/1.12.0/1.13.0/1.14.0/1.15.0
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to read data from Kudu.
+
+The tested kudu version is 1.11.1.
+
+## Data Type Mapping
+
+| kudu Data Type | SeaTunnel Data Type |
+|--------------------------|---------------------|
+| BOOL | BOOLEAN |
+| INT8 INT16 INT32 | INT |
+| INT64 | BIGINT |
+| DECIMAL | DECIMAL |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| STRING | STRING |
+| UNIXTIME_MICROS | TIMESTAMP |
+| BINARY | BYTES |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------------|--------|----------|------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| kudu_masters | String | Yes | - | Kudu master address. Separated by ',',such as '192.168.88.110:7051'. |
+| table_name | String | Yes | - | The name of kudu table. |
+| client_worker_count | Int | No | 2 * Runtime.getRuntime().availableProcessors() | Kudu worker count. Default value is twice the current number of cpu cores. |
+| client_default_operation_timeout_ms | Long | No | 30000 | Kudu normal operation time out. |
+| client_default_admin_operation_timeout_ms | Long | No | 30000 | Kudu admin operation time out. |
+| enable_kerberos | Bool | No | false | Kerberos principal enable. |
+| kerberos_principal | String | No | - | Kerberos principal. Note that all zeta nodes require have this file. |
+| kerberos_keytab | String | No | - | Kerberos keytab. Note that all zeta nodes require have this file. |
+| kerberos_krb5conf | String | No | - | Kerberos krb5 conf. Note that all zeta nodes require have this file. |
+| scan_token_query_timeout | Long | No | 30000 | The timeout for connecting scan token. If not set, it will be the same as operationTimeout. |
+| scan_token_batch_size_bytes | Int | No | 1024 * 1024 | Kudu scan bytes. The maximum number of bytes read at a time, the default is 1MB. |
+| filter | Int | No | 1024 * 1024 | Kudu scan filter expressions,Not supported yet. |
+| schema | Map | No | 1024 * 1024 | SeaTunnel Schema. |
+| table_list | Array | No | - | The list of tables to be read. you can use this configuration instead of `table_path` example: ```table_list = [{ table_name = "kudu_source_table_1"},{ table_name = "kudu_source_table_2"}] ``` |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+## Task Example
+
+### Simple:
+
+> The following example is for a Kudu table named "kudu_source_table", The goal is to print the data from this table on the console and write kudu table "kudu_sink_table"
+
+```hocon
+# Defining the runtime environment
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ kudu {
+ kudu_masters = "kudu-master:7051"
+ table_name = "kudu_source_table"
+ result_table_name = "kudu"
+ enable_kerberos = true
+ kerberos_principal = "xx@xx.COM"
+ kerberos_keytab = "xx.keytab"
+ }
+}
+
+transform {
+}
+
+sink {
+ console {
+ source_table_name = "kudu"
+ }
+
+ kudu {
+ source_table_name = "kudu"
+ kudu_masters = "kudu-master:7051"
+ table_name = "kudu_sink_table"
+ enable_kerberos = true
+ kerberos_principal = "xx@xx.COM"
+ kerberos_keytab = "xx.keytab"
+ }
+}
+```
+
+### Multiple Table
+
+```hocon
+env {
+ # You can set engine configuration here
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 5000
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ kudu{
+ kudu_masters = "kudu-master:7051"
+ table_list = [
+ {
+ table_name = "kudu_source_table_1"
+ },{
+ table_name = "kudu_source_table_2"
+ }
+ ]
+ result_table_name = "kudu"
+}
+}
+
+transform {
+}
+
+sink {
+ Assert {
+ rules {
+ table-names = ["kudu_source_table_1", "kudu_source_table_2"]
+ }
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Kudu Source Connector
+
+### Next Version
+
+- Change plugin name from `KuduSource` to `Kudu` [3432](https://github.com/apache/seatunnel/pull/3432)
+
diff --git a/docs/zh/connector-v2/source/Lemlist.md b/docs/zh/connector-v2/source/Lemlist.md
new file mode 100644
index 00000000000..76cac3b9bf8
--- /dev/null
+++ b/docs/zh/connector-v2/source/Lemlist.md
@@ -0,0 +1,297 @@
+# Lemlist
+
+> Lemlist source connector
+
+## Description
+
+Used to read data from Lemlist.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------------|---------|----------|---------------|
+| url | String | Yes | - |
+| password | String | Yes | - |
+| method | String | No | get |
+| schema.fields | Config | No | - |
+| format | String | No | json |
+| params | Map | No | - |
+| body | String | No | - |
+| json_field | Config | No | - |
+| content_json | String | No | - |
+| poll_interval_millis | int | No | - |
+| retry | int | No | - |
+| retry_backoff_multiplier_ms | int | No | 100 |
+| retry_backoff_max_ms | int | No | 10000 |
+| enable_multi_lines | boolean | No | false |
+| common-options | config | No | - |
+
+### url [String]
+
+http request url
+
+### password [String]
+
+API key for login, you can get more detail at this link:
+
+https://app.lemlist.com/settings/integrations
+
+### method [String]
+
+http request method, only supports GET, POST method
+
+### params [Map]
+
+http params
+
+### body [String]
+
+http body
+
+### poll_interval_millis [int]
+
+request http api interval(millis) in stream mode
+
+### retry [int]
+
+The max retry times if request http return to `IOException`
+
+### retry_backoff_multiplier_ms [int]
+
+The retry-backoff times(millis) multiplier if request http failed
+
+### retry_backoff_max_ms [int]
+
+The maximum retry-backoff times(millis) if request http failed
+
+### format [String]
+
+the format of upstream data, now only support `json` `text`, default `json`.
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### schema [Config]
+
+#### fields [Config]
+
+the schema fields of upstream data
+
+### content_json [String]
+
+This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`.
+
+If your return data looks something like this.
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can configure `content_field = "$.store.book.*"` and the result returned looks like this:
+
+```json
+[
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+]
+```
+
+Then you can get the desired result with a simpler schema,like
+
+```hocon
+Http {
+ url = "http://mockserver:1080/contentjson/mock"
+ method = "GET"
+ format = "json"
+ content_field = "$.store.book.*"
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+}
+```
+
+Here is an example:
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_contentjson_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_contentjson_to_assert.conf).
+
+### json_field [Config]
+
+This parameter helps you configure the schema,so this parameter must be used with schema.
+
+If your data looks something like this:
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can get the contents of 'book' by configuring the task as follows:
+
+```hocon
+source {
+ Http {
+ url = "http://mockserver:1080/jsonpath/mock"
+ method = "GET"
+ format = "json"
+ json_field = {
+ category = "$.store.book[*].category"
+ author = "$.store.book[*].author"
+ title = "$.store.book[*].title"
+ price = "$.store.book[*].price"
+ }
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+ }
+}
+```
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_jsonpath_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_jsonpath_to_assert.conf).
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+Lemlist {
+ url = "https://api.lemlist.com/api/campaigns"
+ password = "SeaTunnel-test"
+ schema {
+ fields {
+ _id = string
+ name = string
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Lemlist Source Connector
+- [Feature][Connector-V2][HTTP] Use json-path parsing ([3510](https://github.com/apache/seatunnel/pull/3510))
+
diff --git a/docs/zh/connector-v2/source/LocalFile.md b/docs/zh/connector-v2/source/LocalFile.md
new file mode 100644
index 00000000000..4d20ca532d1
--- /dev/null
+++ b/docs/zh/connector-v2/source/LocalFile.md
@@ -0,0 +1,344 @@
+# LocalFile
+
+> Local file source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+Read all the data in a split in a pollNext call. What splits are read will be saved in snapshot.
+
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Description
+
+Read data from local file system.
+
+:::tip
+
+If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+
+If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+:::
+
+## Options
+
+| name | type | required | default value |
+|---------------------------|---------|----------|--------------------------------------|
+| path | string | yes | - |
+| file_format_type | string | yes | - |
+| read_columns | list | no | - |
+| delimiter/field_delimiter | string | no | \001 |
+| parse_partition_from_path | boolean | no | true |
+| date_format | string | no | yyyy-MM-dd |
+| datetime_format | string | no | yyyy-MM-dd HH:mm:ss |
+| time_format | string | no | HH:mm:ss |
+| skip_header_row_number | long | no | 0 |
+| schema | config | no | - |
+| sheet_name | string | no | - |
+| file_filter_pattern | string | no | - |
+| compress_codec | string | no | none |
+| common-options | | no | - |
+| tables_configs | list | no | used to define a multiple table task |
+
+### path [string]
+
+The source file path.
+
+### file_format_type [string]
+
+File type, supported as the following file types:
+
+`text` `csv` `parquet` `orc` `json` `excel`
+
+If you assign file type to `json`, you should also assign schema option to tell connector how to parse data to the row you want.
+
+For example:
+
+upstream data is the following:
+
+```json
+
+{"code": 200, "data": "get success", "success": true}
+
+```
+
+You can also save multiple pieces of data in one file and split them by newline:
+
+```json lines
+
+{"code": 200, "data": "get success", "success": true}
+{"code": 300, "data": "get failed", "success": false}
+
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+If you assign file type to `parquet` `orc`, schema option not required, connector can find the schema of upstream data automatically.
+
+If you assign file type to `text` `csv`, you can choose to specify the schema information or not.
+
+For example, upstream data is the following:
+
+```text
+
+tyrantlucifer#26#male
+
+```
+
+If you do not assign data schema connector will treat the upstream data as the following:
+
+| content |
+|-----------------------|
+| tyrantlucifer#26#male |
+
+If you assign data schema, you should also assign the option `field_delimiter` too except CSV file type
+
+you should assign schema and delimiter as the following:
+
+```hocon
+
+field_delimiter = "#"
+schema {
+ fields {
+ name = string
+ age = int
+ gender = string
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| name | age | gender |
+|---------------|-----|--------|
+| tyrantlucifer | 26 | male |
+
+### read_columns [list]
+
+The read column list of the data source, user can use it to implement field projection.
+
+### delimiter/field_delimiter [string]
+
+**delimiter** parameter will deprecate after version 2.3.5, please use **field_delimiter** instead.
+
+Only need to be configured when file_format is text.
+
+Field delimiter, used to tell connector how to slice and dice fields.
+
+default `\001`, the same as hive's default delimiter
+
+### parse_partition_from_path [boolean]
+
+Control whether parse the partition keys and values from file path
+
+For example if you read a file from path `file://hadoop-cluster/tmp/seatunnel/parquet/name=tyrantlucifer/age=26`
+
+Every record data from file will be added these two fields:
+
+| name | age |
+|---------------|-----|
+| tyrantlucifer | 26 |
+
+Tips: **Do not define partition fields in schema option**
+
+### date_format [string]
+
+Date type format, used to tell connector how to convert string to date, supported as the following formats:
+
+`yyyy-MM-dd` `yyyy.MM.dd` `yyyy/MM/dd`
+
+default `yyyy-MM-dd`
+
+### datetime_format [string]
+
+Datetime type format, used to tell connector how to convert string to datetime, supported as the following formats:
+
+`yyyy-MM-dd HH:mm:ss` `yyyy.MM.dd HH:mm:ss` `yyyy/MM/dd HH:mm:ss` `yyyyMMddHHmmss`
+
+default `yyyy-MM-dd HH:mm:ss`
+
+### time_format [string]
+
+Time type format, used to tell connector how to convert string to time, supported as the following formats:
+
+`HH:mm:ss` `HH:mm:ss.SSS`
+
+default `HH:mm:ss`
+
+### skip_header_row_number [long]
+
+Skip the first few lines, but only for the txt and csv.
+
+For example, set like following:
+
+`skip_header_row_number = 2`
+
+then SeaTunnel will skip the first 2 lines from source files
+
+### schema [config]
+
+Only need to be configured when the file_format_type are text, json, excel or csv ( Or other format we can't read the schema from metadata).
+
+#### fields [Config]
+
+The schema information of upstream data.
+
+### sheet_name [string]
+
+Only need to be configured when file_format is excel.
+
+Reader the sheet of the workbook.
+
+### file_filter_pattern [string]
+
+Filter pattern, which used for filtering files.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc/parquet:
+ automatically recognizes the compression type, no additional settings required.
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+### tables_configs
+
+Used to define a multiple table task, when you have multiple tables to read, you can use this option to define multiple tables.
+
+## Example
+
+### One Table
+
+```hocon
+
+LocalFile {
+ path = "/apps/hive/demo/student"
+ file_format_type = "parquet"
+}
+
+```
+
+```hocon
+
+LocalFile {
+ schema {
+ fields {
+ name = string
+ age = int
+ }
+ }
+ path = "/apps/hive/demo/student"
+ file_format_type = "json"
+}
+
+```
+
+### Multiple Table
+
+```hocon
+
+LocalFile {
+ tables_configs = [
+ {
+ schema {
+ table = "student"
+ }
+ path = "/apps/hive/demo/student"
+ file_format_type = "parquet"
+ },
+ {
+ schema {
+ table = "teacher"
+ }
+ path = "/apps/hive/demo/teacher"
+ file_format_type = "parquet"
+ }
+ ]
+}
+
+```
+
+```hocon
+
+LocalFile {
+ tables_configs = [
+ {
+ schema {
+ fields {
+ name = string
+ age = int
+ }
+ }
+ path = "/apps/hive/demo/student"
+ file_format_type = "json"
+ },
+ {
+ schema {
+ fields {
+ name = string
+ age = int
+ }
+ }
+ path = "/apps/hive/demo/teacher"
+ file_format_type = "json"
+ }
+}
+
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Local File Source Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [BugFix] Fix the bug of incorrect path in windows environment ([2980](https://github.com/apache/seatunnel/pull/2980))
+- [Improve] Support extract partition from SeaTunnelRow fields ([3085](https://github.com/apache/seatunnel/pull/3085))
+- [Improve] Support parse field from file path ([2985](https://github.com/apache/seatunnel/pull/2985))
+
diff --git a/docs/zh/connector-v2/source/Maxcompute.md b/docs/zh/connector-v2/source/Maxcompute.md
new file mode 100644
index 00000000000..cb9bc32dd38
--- /dev/null
+++ b/docs/zh/connector-v2/source/Maxcompute.md
@@ -0,0 +1,98 @@
+# Maxcompute
+
+> Maxcompute source connector
+
+## Description
+
+Used to read data from Maxcompute.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------------|--------|----------|---------------|
+| accessId | string | yes | - |
+| accesskey | string | yes | - |
+| endpoint | string | yes | - |
+| project | string | yes | - |
+| table_name | string | yes | - |
+| partition_spec | string | no | - |
+| split_row | int | no | 10000 |
+| common-options | string | no | |
+| schema | config | no | |
+
+### accessId [string]
+
+`accessId` Your Maxcompute accessId which cloud be access from Alibaba Cloud.
+
+### accesskey [string]
+
+`accesskey` Your Maxcompute accessKey which cloud be access from Alibaba Cloud.
+
+### endpoint [string]
+
+`endpoint` Your Maxcompute endpoint start with http.
+
+### project [string]
+
+`project` Your Maxcompute project which is created in Alibaba Cloud.
+
+### table_name [string]
+
+`table_name` Target Maxcompute table name eg: fake.
+
+### partition_spec [string]
+
+`partition_spec` This spec of Maxcompute partition table eg:ds='20220101'.
+
+### split_row [int]
+
+`split_row` Number of rows per split, default: 10000.
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details.
+
+### schema [config]
+
+#### fields [Config]
+
+The schema information of upstream data.
+
+## Examples
+
+```hocon
+source {
+ Maxcompute {
+ accessId=""
+ accesskey=""
+ endpoint=""
+ project=""
+ table_name=""
+ #partition_spec=""
+ #split_row = 10000
+ schema {
+ fields {
+ name = string
+ age = int
+ gender = string
+ }
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- [Feature] Add Maxcompute Source Connector([3640](https://github.com/apache/seatunnel/pull/3640))
+- [Feature] Support Schema in MaxCompute Source([3640](https://github.com/apache/seatunnel/pull/5283))
+
diff --git a/docs/zh/connector-v2/source/MongoDB-CDC.md b/docs/zh/connector-v2/source/MongoDB-CDC.md
new file mode 100644
index 00000000000..a7bd980b6d3
--- /dev/null
+++ b/docs/zh/connector-v2/source/MongoDB-CDC.md
@@ -0,0 +1,312 @@
+# MongoDB CDC
+
+> MongoDB CDC source connector
+
+## Support Those Engines
+
+> SeaTunnel Zeta
+> Flink
+
+## Key Features
+
+- [ ] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+The MongoDB CDC connector allows for reading snapshot data and incremental data from MongoDB database.
+
+## Supported DataSource Info
+
+In order to use the Mongodb CDC connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Dependency |
+|------------|--------------------|-------------------------------------------------------------------------------------------------------------------|
+| MongoDB | universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/seatunnel-connectors-v2/connector-cdc-mongodb) |
+
+## Availability Settings
+
+1.MongoDB version: MongoDB version >= 4.0.
+
+2.Cluster deployment: replica sets or sharded clusters.
+
+3.Storage Engine: WiredTiger Storage Engine.
+
+4.Permissions:changeStream and read
+
+```shell
+use admin;
+db.createRole(
+ {
+ role: "strole",
+ privileges: [{
+ resource: { db: "", collection: "" },
+ actions: [
+ "splitVector",
+ "listDatabases",
+ "listCollections",
+ "collStats",
+ "find",
+ "changeStream" ]
+ }],
+ roles: [
+ { role: 'read', db: 'config' }
+ ]
+ }
+);
+
+db.createUser(
+ {
+ user: 'stuser',
+ pwd: 'stpw',
+ roles: [
+ { role: 'strole', db: 'admin' }
+ ]
+ }
+);
+```
+
+## Data Type Mapping
+
+The following table lists the field data type mapping from MongoDB BSON type to Seatunnel data type.
+
+| MongoDB BSON Type | SeaTunnel Data Type |
+|-------------------|---------------------|
+| ObjectId | STRING |
+| String | STRING |
+| Boolean | BOOLEAN |
+| Binary | BINARY |
+| Int32 | INTEGER |
+| Int64 | BIGINT |
+| Double | DOUBLE |
+| Decimal128 | DECIMAL |
+| Date | DATE |
+| Timestamp | TIMESTAMP |
+| Object | ROW |
+| Array | ARRAY |
+
+For specific types in MongoDB, we use Extended JSON format to map them to Seatunnel STRING type.
+
+| MongoDB BSON type | SeaTunnel STRING |
+|-------------------|----------------------------------------------------------------------------------------------|
+| Symbol | {"_value": {"$symbol": "12"}} |
+| RegularExpression | {"_value": {"$regularExpression": {"pattern": "^9$", "options": "i"}}} |
+| JavaScript | {"_value": {"$code": "function() { return 10; }"}} |
+| DbPointer | {"_value": {"$dbPointer": {"$ref": "db.coll", "$id": {"$oid": "63932a00da01604af329e33c"}}}} |
+
+**Tips**
+
+> 1.When using the DECIMAL type in SeaTunnel, be aware that the maximum range cannot exceed 34 digits, which means you should use decimal(34, 18).
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------------|--------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| hosts | String | Yes | - | The comma-separated list of hostname and port pairs of the MongoDB servers. eg. `localhost:27017,localhost:27018` |
+| username | String | No | - | Name of the database user to be used when connecting to MongoDB. |
+| password | String | No | - | Password to be used when connecting to MongoDB. |
+| database | List | Yes | - | Name of the database to watch for changes. If not set then all databases will be captured. The database also supports regular expressions to monitor multiple databases matching the regular expression. eg. `db1,db2`. |
+| collection | List | Yes | - | Name of the collection in the database to watch for changes. If not set then all collections will be captured. The collection also supports regular expressions to monitor multiple collections matching fully-qualified collection identifiers. eg. `db1.coll1,db2.coll2`. |
+| connection.options | String | No | - | The ampersand-separated connection options of MongoDB. eg. `replicaSet=test&connectTimeoutMS=300000`. |
+| batch.size | Long | No | 1024 | The cursor batch size. |
+| poll.max.batch.size | Enum | No | 1024 | Maximum number of change stream documents to include in a single batch when polling for new data. |
+| poll.await.time.ms | Long | No | 1000 | The amount of time to wait before checking for new results on the change stream. |
+| heartbeat.interval.ms | String | No | 0 | The length of time in milliseconds between sending heartbeat messages. Use 0 to disable. |
+| incremental.snapshot.chunk.size.mb | Long | No | 64 | The chunk size mb of incremental snapshot. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+### Tips:
+
+> 1.If the collection changes at a slow pace, it is strongly recommended to set an appropriate value greater than 0 for the heartbeat.interval.ms parameter. When we recover a Seatunnel job from a checkpoint or savepoint, the heartbeat events can push the resumeToken forward to avoid its expiration.
+> 2.MongoDB has a limit of 16MB for a single document. Change documents include additional information, so even if the original document is not larger than 15MB, the change document may exceed the 16MB limit, resulting in the termination of the Change Stream operation.
+> 3.It is recommended to use immutable shard keys. In MongoDB, shard keys allow modifications after transactions are enabled, but changing the shard key can cause frequent shard migrations, resulting in additional performance overhead. Additionally, modifying the shard key can also cause the Update Lookup feature to become ineffective, leading to inconsistent results in CDC (Change Data Capture) scenarios.
+
+## How to Create a MongoDB CDC Data Synchronization Jobs
+
+### CDC Data Print to Client
+
+The following example demonstrates how to create a data synchronization job that reads cdc data from MongoDB and prints it on the local client:
+
+```hocon
+env {
+ # You can set engine configuration here
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 5000
+}
+
+source {
+ MongoDB-CDC {
+ hosts = "mongo0:27017"
+ database = ["inventory"]
+ collection = ["inventory.products"]
+ username = stuser
+ password = stpw
+ schema = {
+ fields {
+ "_id" : string,
+ "name" : string,
+ "description" : string,
+ "weight" : string
+ }
+ }
+ }
+}
+
+# Console printing of the read Mongodb data
+sink {
+ Console {
+ parallelism = 1
+ }
+}
+```
+
+## CDC Data Write to MysqlDB
+
+The following example demonstrates how to create a data synchronization job that reads cdc data from MongoDB and write to mysql database:
+
+```hocon
+env {
+ # You can set engine configuration here
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 5000
+}
+
+source {
+ MongoDB-CDC {
+ hosts = "mongo0:27017"
+ database = ["inventory"]
+ collection = ["inventory.products"]
+ username = stuser
+ password = stpw
+ }
+}
+
+sink {
+ jdbc {
+ url = "jdbc:mysql://mysql_cdc_e2e:3306"
+ driver = "com.mysql.cj.jdbc.Driver"
+ user = "st_user"
+ password = "seatunnel"
+
+ generate_sink_sql = true
+ # You need to configure both database and table
+ database = mongodb_cdc
+ table = products
+ primary_keys = ["_id"]
+ }
+}
+```
+
+## Multi-table Synchronization
+
+The following example demonstrates how to create a data synchronization job that read the cdc data of multiple library tables mongodb and prints it on the local client:
+
+```hocon
+env {
+ # You can set engine configuration here
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 5000
+}
+
+source {
+ MongoDB-CDC {
+ hosts = "mongo0:27017"
+ database = ["inventory","crm"]
+ collection = ["inventory.products","crm.test"]
+ username = stuser
+ password = stpw
+ }
+}
+
+# Console printing of the read Mongodb data
+sink {
+ Console {
+ parallelism = 1
+ }
+}
+```
+
+### Tips:
+
+> 1.The cdc synchronization of multiple library tables cannot specify the schema, and can only output json data downstream.
+> This is because MongoDB does not provide metadata information for querying, so if you want to support multiple tables, all tables can only be read as one structure.
+
+## Regular Expression Matching for Multiple Tables
+
+The following example demonstrates how to create a data synchronization job that through regular expression read the data of multiple library tables mongodb and prints it on the local client:
+
+| Matching example | Expressions | | Describe |
+|------------------|-------------|---|----------------------------------------------------------------------------------------|
+| Prefix matching | ^(test).* | | Match the database name or table name with the prefix test, such as test1, test2, etc. |
+| Suffix matching | .*[p$] | | Match the database name or table name with the suffix p, such as cdcp, edcp, etc. |
+
+```hocon
+env {
+ # You can set engine configuration here
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 5000
+}
+
+source {
+ MongoDB-CDC {
+ hosts = "mongo0:27017"
+ # So this example is used (^(test).*|^(tpc).*|txc|.*[p$]|t{2}).(t[5-8]|tt),matching txc.tt、test2.test5.
+ database = ["(^(test).*|^(tpc).*|txc|.*[p$]|t{2})"]
+ collection = ["(t[5-8]|tt)"]
+ username = stuser
+ password = stpw
+ }
+}
+
+# Console printing of the read Mongodb data
+sink {
+ Console {
+ parallelism = 1
+ }
+}
+```
+
+## Format of real-time streaming data
+
+```shell
+{
+ _id : { }, // Identifier of the open change stream, can be assigned to the 'resumeAfter' parameter for subsequent resumption of this change stream
+ "operationType" : "", // The type of change operation that occurred, such as: insert, delete, update, etc.
+ "fullDocument" : { }, // The full document data involved in the change operation. This field does not exist in delete operations
+ "ns" : {
+ "db" : "", // The database where the change operation occurred
+ "coll" : "" // The collection where the change operation occurred
+ },
+ "to" : { // These fields are displayed only when the operation type is 'rename'
+ "db" : "", // The new database name after the change
+ "coll" : "" // The new collection name after the change
+ },
+ "source":{
+ "ts_ms":"", // The timestamp when the change operation occurred
+ "table":"" // The collection where the change operation occurred
+ "db":"", // The database where the change operation occurred
+ "snapshot":"false" // Identify the current stage of data synchronization
+ },
+ "documentKey" : { "_id" : }, // The _id field value of the document involved in the change operation
+ "updateDescription" : { // Description of the update operation
+ "updatedFields" : { }, // The fields and values that the update operation modified
+ "removedFields" : [ "", ... ] // The fields and values that the update operation removed
+ }
+ "clusterTime" : , // The timestamp of the Oplog log entry corresponding to the change operation
+ "txnNumber" : , // If the change operation is executed in a multi-document transaction, this field and value are displayed, representing the transaction number
+ "lsid" : { // Represents information related to the Session in which the transaction is located
+ "id" : ,
+ "uid" :
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/source/MongoDB.md b/docs/zh/connector-v2/source/MongoDB.md
new file mode 100644
index 00000000000..4662e1712a9
--- /dev/null
+++ b/docs/zh/connector-v2/source/MongoDB.md
@@ -0,0 +1,458 @@
+# MongoDB
+
+> MongoDB Source Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+The MongoDB Connector provides the ability to read and write data from and to MongoDB.
+This document describes how to set up the MongoDB connector to run data reads against MongoDB.
+
+## Supported DataSource Info
+
+In order to use the Mongodb connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Dependency |
+|------------|--------------------|---------------------------------------------------------------------------------------------------------------|
+| MongoDB | universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/seatunnel-connectors-v2/connector-mongodb) |
+
+## Data Type Mapping
+
+The following table lists the field data type mapping from MongoDB BSON type to SeaTunnel data type.
+
+| MongoDB BSON type | SeaTunnel Data type |
+|-------------------|---------------------|
+| ObjectId | STRING |
+| String | STRING |
+| Boolean | BOOLEAN |
+| Binary | BINARY |
+| Int32 | INTEGER |
+| Int64 | BIGINT |
+| Double | DOUBLE |
+| Decimal128 | DECIMAL |
+| Date | Date |
+| Timestamp | Timestamp |
+| Object | ROW |
+| Array | ARRAY |
+
+For specific types in MongoDB, we use Extended JSON format to map them to SeaTunnel STRING type.
+
+| MongoDB BSON type | SeaTunnel STRING |
+|-------------------|----------------------------------------------------------------------------------------------|
+| Symbol | {"_value": {"$symbol": "12"}} |
+| RegularExpression | {"_value": {"$regularExpression": {"pattern": "^9$", "options": "i"}}} |
+| JavaScript | {"_value": {"$code": "function() { return 10; }"}} |
+| DbPointer | {"_value": {"$dbPointer": {"$ref": "db.coll", "$id": {"$oid": "63932a00da01604af329e33c"}}}} |
+
+**Tips**
+
+> 1.When using the DECIMAL type in SeaTunnel, be aware that the maximum range cannot exceed 34 digits, which means you should use decimal(34, 18).
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|----------------------|---------|----------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| uri | String | Yes | - | The MongoDB standard connection uri. eg. mongodb://user:password@hosts:27017/database?readPreference=secondary&slaveOk=true. |
+| database | String | Yes | - | The name of MongoDB database to read or write. |
+| collection | String | Yes | - | The name of MongoDB collection to read or write. |
+| schema | String | Yes | - | MongoDB's BSON and seatunnel data structure mapping. |
+| match.query | String | No | - | In MongoDB, filters are used to filter documents for query operations. |
+| match.projection | String | No | - | In MongoDB, Projection is used to control the fields contained in the query results. |
+| partition.split-key | String | No | _id | The key of Mongodb fragmentation. |
+| partition.split-size | Long | No | 64 * 1024 * 1024 | The size of Mongodb fragment. |
+| cursor.no-timeout | Boolean | No | true | 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. However, if the application takes longer than 30 minutes to process the current batch of documents, the session is marked as expired and closed. |
+| fetch.size | Int | No | 2048 | Set the number of documents obtained from the server for each batch. Setting the appropriate batch size can improve query performance and avoid the memory pressure caused by obtaining a large amount of data at one time. |
+| max.time-min | Long | No | 600 | This parameter is a MongoDB query option that limits the maximum execution time for query operations. The value of maxTimeMin is in Minute. If the execution time of the query exceeds the specified time limit, MongoDB will terminate the operation and return an error. |
+| flat.sync-string | Boolean | No | true | By utilizing flatSyncString, only one field attribute value can be set, and the field type must be a String. This operation will perform a string mapping on a single MongoDB data entry. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+### Tips
+
+> 1.The parameter `match.query` is compatible with the historical old version parameter `matchQuery`, and they are equivalent replacements.
+
+## How to Create a MongoDB Data Synchronization Jobs
+
+The following example demonstrates how to create a data synchronization job that reads data from MongoDB and prints it on the local client:
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+# Create a source to connect to Mongodb
+source {
+ MongoDB {
+ uri = "mongodb://user:password@127.0.0.1:27017"
+ database = "test_db"
+ collection = "source_table"
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_int = int
+ c_bigint = bigint
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ c_row = {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_int = int
+ c_bigint = bigint
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ }
+ }
+ }
+ }
+}
+
+# Console printing of the read Mongodb data
+sink {
+ Console {
+ parallelism = 1
+ }
+}
+```
+
+## Parameter Interpretation
+
+### MongoDB Database Connection URI Examples
+
+Unauthenticated single node connection:
+
+```bash
+mongodb://192.168.0.100:27017/mydb
+```
+
+Replica set connection:
+
+```bash
+mongodb://192.168.0.100:27017/mydb?replicaSet=xxx
+```
+
+Authenticated replica set connection:
+
+```bash
+mongodb://admin:password@192.168.0.100:27017/mydb?replicaSet=xxx&authSource=admin
+```
+
+Multi-node replica set connection:
+
+```bash
+mongodb://192.168.0.1:27017,192.168.0.2:27017,192.168.0.3:27017/mydb?replicaSet=xxx
+```
+
+Sharded cluster connection:
+
+```bash
+mongodb://192.168.0.100:27017/mydb
+```
+
+Multiple mongos connections:
+
+```bash
+mongodb://192.168.0.1:27017,192.168.0.2:27017,192.168.0.3:27017/mydb
+```
+
+Note: The username and password in the URI must be URL-encoded before being concatenated into the connection string.
+
+### MatchQuery Scan
+
+In data synchronization scenarios, the matchQuery approach needs to be used early to reduce the number of documents that need to be processed by subsequent operators, thus improving performance.
+Here is a simple example of a seatunnel using `match.query`
+
+```bash
+source {
+ MongoDB {
+ uri = "mongodb://user:password@127.0.0.1:27017"
+ database = "test_db"
+ collection = "orders"
+ match.query = "{status: \"A\"}"
+ schema = {
+ fields {
+ id = bigint
+ status = string
+ }
+ }
+ }
+}
+```
+
+The following are examples of MatchQuery query statements of various data types:
+
+```bash
+# Query Boolean type
+"{c_boolean:true}"
+# Query string type
+"{c_string:\"OCzCj\"}"
+# Query the integer
+"{c_int:2}"
+# Type of query time
+"{c_date:ISODate(\"2023-06-26T16:00:00.000Z\")}"
+# Query floating point type
+{c_double:{$gte:1.71763202185342e+308}}
+```
+
+Please refer to how to write the syntax of `match.query`:https://www.mongodb.com/docs/manual/tutorial/query-documents
+
+### Projection Scan
+
+In MongoDB, Projection is used to control which fields are included in the query results. This can be accomplished by specifying which fields need to be returned and which fields do not.
+In the find() method, a projection object can be passed as a second argument. The key of the projection object indicates the fields to include or exclude, and a value of 1 indicates inclusion and 0 indicates exclusion.
+Here is a simple example, assuming we have a collection named users:
+
+```bash
+# Returns only the name and email fields
+db.users.find({}, { name: 1, email: 0 });
+```
+
+In data synchronization scenarios, projection needs to be used early to reduce the number of documents that need to be processed by subsequent operators, thus improving performance.
+Here is a simple example of a seatunnel using projection:
+
+```bash
+source {
+ MongoDB {
+ uri = "mongodb://user:password@127.0.0.1:27017"
+ database = "test_db"
+ collection = "users"
+ match.projection = "{ name: 1, email: 0 }"
+ schema = {
+ fields {
+ name = string
+ }
+ }
+ }
+}
+
+```
+
+### Partitioned Scan
+
+To speed up reading data in parallel source task instances, seatunnel provides a partitioned scan feature for MongoDB collections. The following partitioning strategies are provided.
+Users can control data sharding by setting the partition.split-key for sharding keys and partition.split-size for sharding size.
+
+```bash
+source {
+ MongoDB {
+ uri = "mongodb://user:password@127.0.0.1:27017"
+ database = "test_db"
+ collection = "users"
+ partition.split-key = "id"
+ partition.split-size = 1024
+ schema = {
+ fields {
+ id = bigint
+ status = string
+ }
+ }
+ }
+}
+
+```
+
+### Flat Sync String
+
+By utilizing `flat.sync-string`, only one field attribute value can be set, and the field type must be a String.
+This operation will perform a string mapping on a single MongoDB data entry.
+
+```bash
+env {
+ parallelism = 10
+ job.mode = "BATCH"
+}
+source {
+ MongoDB {
+ uri = "mongodb://user:password@127.0.0.1:27017"
+ database = "test_db"
+ collection = "users"
+ flat.sync-string = true
+ schema = {
+ fields {
+ data = string
+ }
+ }
+ }
+}
+sink {
+ Console {}
+}
+```
+
+Use the data samples synchronized with modified parameters, such as the following:
+
+```json
+{
+ "_id":{
+ "$oid":"643d41f5fdc6a52e90e59cbf"
+ },
+ "c_map":{
+ "OQBqH":"jllt",
+ "rkvlO":"pbfdf",
+ "pCMEX":"hczrdtve",
+ "DAgdj":"t",
+ "dsJag":"voo"
+ },
+ "c_array":[
+ {
+ "$numberInt":"-865590937"
+ },
+ {
+ "$numberInt":"833905600"
+ },
+ {
+ "$numberInt":"-1104586446"
+ },
+ {
+ "$numberInt":"2076336780"
+ },
+ {
+ "$numberInt":"-1028688944"
+ }
+ ],
+ "c_string":"bddkzxr",
+ "c_boolean":false,
+ "c_tinyint":{
+ "$numberInt":"39"
+ },
+ "c_smallint":{
+ "$numberInt":"23672"
+ },
+ "c_int":{
+ "$numberInt":"-495763561"
+ },
+ "c_bigint":{
+ "$numberLong":"3768307617923954543"
+ },
+ "c_float":{
+ "$numberDouble":"5.284220288280258E37"
+ },
+ "c_double":{
+ "$numberDouble":"1.1706091642478246E308"
+ },
+ "c_bytes":{
+ "$binary":{
+ "base64":"ZWJ4",
+ "subType":"00"
+ }
+ },
+ "c_date":{
+ "$date":{
+ "$numberLong":"1686614400000"
+ }
+ },
+ "c_decimal":{
+ "$numberDecimal":"683265300"
+ },
+ "c_timestamp":{
+ "$date":{
+ "$numberLong":"1684283772000"
+ }
+ },
+ "c_row":{
+ "c_map":{
+ "OQBqH":"cbrzhsktmm",
+ "rkvlO":"qtaov",
+ "pCMEX":"tuq",
+ "DAgdj":"jzop",
+ "dsJag":"vwqyxtt"
+ },
+ "c_array":[
+ {
+ "$numberInt":"1733526799"
+ },
+ {
+ "$numberInt":"-971483501"
+ },
+ {
+ "$numberInt":"-1716160960"
+ },
+ {
+ "$numberInt":"-919976360"
+ },
+ {
+ "$numberInt":"727499700"
+ }
+ ],
+ "c_string":"oboislr",
+ "c_boolean":true,
+ "c_tinyint":{
+ "$numberInt":"-66"
+ },
+ "c_smallint":{
+ "$numberInt":"1308"
+ },
+ "c_int":{
+ "$numberInt":"-1573886733"
+ },
+ "c_bigint":{
+ "$numberLong":"4877994302999518682"
+ },
+ "c_float":{
+ "$numberDouble":"1.5353209063652051E38"
+ },
+ "c_double":{
+ "$numberDouble":"1.1952441956458565E308"
+ },
+ "c_bytes":{
+ "$binary":{
+ "base64":"cWx5Ymp0Yw==",
+ "subType":"00"
+ }
+ },
+ "c_date":{
+ "$date":{
+ "$numberLong":"1686614400000"
+ }
+ },
+ "c_decimal":{
+ "$numberDecimal":"656406177"
+ },
+ "c_timestamp":{
+ "$date":{
+ "$numberLong":"1684283772000"
+ }
+ }
+ },
+ "id":{
+ "$numberInt":"2"
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add MongoDB Source Connector
+
+### Next Version
+
+- [Feature]Refactor mongodb source connector([4620](https://github.com/apache/seatunnel/pull/4620))
+
diff --git a/docs/zh/connector-v2/source/MyHours.md b/docs/zh/connector-v2/source/MyHours.md
new file mode 100644
index 00000000000..012b32fb1e2
--- /dev/null
+++ b/docs/zh/connector-v2/source/MyHours.md
@@ -0,0 +1,310 @@
+# My Hours
+
+> My Hours source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to read data from My Hours.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Supported DataSource Info
+
+In order to use the My Hours connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Dependency |
+|------------|--------------------|---------------------------------------------------------------------------------------------|
+| My Hours | universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/seatunnel-connectors-v2) |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|-----------------------------|---------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | Http request url. |
+| email | String | Yes | - | My hours login email address. |
+| password | String | Yes | - | My hours login password. |
+| schema | Config | No | - | Http and seatunnel data structure mapping |
+| schema.fields | Config | No | - | The schema fields of upstream data |
+| json_field | Config | No | - | This parameter helps you configure the schema,so this parameter must be used with schema. |
+| content_json | String | No | - | This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`. |
+| format | String | No | json | The format of upstream data, now only support `json` `text`, default `json`. |
+| method | String | No | get | Http request method, only supports GET, POST method. |
+| headers | Map | No | - | Http headers. |
+| params | Map | No | - | Http params. |
+| body | String | No | - | Http body. |
+| poll_interval_millis | Int | No | - | Request http api interval(millis) in stream mode. |
+| retry | Int | No | - | The max retry times if request http return to `IOException`. |
+| retry_backoff_multiplier_ms | Int | No | 100 | The retry-backoff times(millis) multiplier if request http failed. |
+| retry_backoff_max_ms | Int | No | 10000 | The maximum retry-backoff times(millis) if request http failed |
+| enable_multi_lines | Boolean | No | false | |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## How to Create a My Hours Data Synchronization Jobs
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+MyHours{
+ url = "https://api2.myhours.com/api/Projects/getAll"
+ email = "seatunnel@test.com"
+ password = "seatunnel"
+ schema {
+ fields {
+ name = string
+ archived = boolean
+ dateArchived = string
+ dateCreated = string
+ clientName = string
+ budgetAlertPercent = string
+ budgetType = int
+ totalTimeLogged = double
+ budgetValue = double
+ totalAmount = double
+ totalExpense = double
+ laborCost = double
+ totalCost = double
+ billableTimeLogged = double
+ totalBillableAmount = double
+ billable = boolean
+ roundType = int
+ roundInterval = int
+ budgetSpentPercentage = double
+ budgetTarget = int
+ budgetPeriodType = string
+ budgetSpent = string
+ id = string
+ }
+ }
+}
+
+# Console printing of the read data
+sink {
+ Console {
+ parallelism = 1
+ }
+}
+```
+
+## Parameter Interpretation
+
+### format
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### content_json
+
+This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`.
+
+If your return data looks something like this.
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can configure `content_field = "$.store.book.*"` and the result returned looks like this:
+
+```json
+[
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+]
+```
+
+Then you can get the desired result with a simpler schema,like
+
+```hocon
+Http {
+ url = "http://mockserver:1080/contentjson/mock"
+ method = "GET"
+ format = "json"
+ content_field = "$.store.book.*"
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+}
+```
+
+Here is an example:
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_contentjson_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_contentjson_to_assert.conf).
+
+### json_field
+
+This parameter helps you configure the schema,so this parameter must be used with schema.
+
+If your data looks something like this:
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can get the contents of 'book' by configuring the task as follows:
+
+```hocon
+source {
+ Http {
+ url = "http://mockserver:1080/jsonpath/mock"
+ method = "GET"
+ format = "json"
+ json_field = {
+ category = "$.store.book[*].category"
+ author = "$.store.book[*].author"
+ title = "$.store.book[*].title"
+ price = "$.store.book[*].price"
+ }
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+ }
+}
+```
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_jsonpath_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_jsonpath_to_assert.conf).
+
+## Changelog
+
+### next version
+
+- Add My Hours Source Connector
+- [Feature][Connector-V2][HTTP] Use json-path parsing ([3510](https://github.com/apache/seatunnel/pull/3510))
+
diff --git a/docs/zh/connector-v2/source/MySQL-CDC.md b/docs/zh/connector-v2/source/MySQL-CDC.md
new file mode 100644
index 00000000000..74f8782a9bb
--- /dev/null
+++ b/docs/zh/connector-v2/source/MySQL-CDC.md
@@ -0,0 +1,255 @@
+# MySQL CDC
+
+> MySQL CDC source connector
+
+## Support Those Engines
+
+> SeaTunnel Zeta
+> Flink
+
+## Description
+
+The MySQL CDC connector allows for reading snapshot data and incremental data from MySQL database. This document
+describes how to set up the MySQL CDC connector to run SQL queries against MySQL databases.
+
+## Key features
+
+- [ ] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|-------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|----------------------------------|----------------------------------------------------------------------|
+| MySQL | [MySQL](https://dev.mysql.com/doc): 5.6, 5.7, 8.0.x [RDS MySQL](https://www.aliyun.com/product/rds/mysql): 5.6, 5.7, 8.0.x | com.mysql.cj.jdbc.Driver | jdbc:mysql://localhost:3306/test | https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.28 |
+
+## Using Dependency
+
+### Install Jdbc Driver
+
+#### For Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/mysql/mysql-connector-java) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+#### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/mysql/mysql-connector-java) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+### Creating MySQL user
+
+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, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user' IDENTIFIED BY 'password';
+```
+
+3. Finalize the user’s permissions:
+
+```sql
+mysql> FLUSH PRIVILEGES;
+```
+
+### Enabling the MySQL Binlog
+
+You must enable binary logging for MySQL replication. The binary logs record transaction updates for replication tools to propagate changes.
+
+1. Check whether the `log-bin` option is already on:
+
+```sql
+mysql> show variables where variable_name in ('log_bin', 'binlog_format', 'binlog_row_image', 'gtid_mode', 'enforce_gtid_consistency');
++--------------------------+----------------+
+| Variable_name | Value |
++--------------------------+----------------+
+| binlog_format | ROW |
+| binlog_row_image | FULL |
+| enforce_gtid_consistency | ON |
+| gtid_mode | ON |
+| log_bin | ON |
++--------------------------+----------------+
+5 rows in set (0.00 sec)
+```
+
+2. If inconsistent with the above results, configure your MySQL server configuration file(`$MYSQL_HOME/mysql.cnf`) with the following properties, which are described in the table below:
+
+```
+# Enable binary replication log and set the prefix, expiration, and log format.
+# The prefix is arbitrary, expiration can be short for integration tests but would
+# be longer on a production system. Row-level info is required for ingest to work.
+# Server ID is required, but this will vary on production systems
+server-id = 223344
+log_bin = mysql-bin
+expire_logs_days = 10
+binlog_format = row
+binlog_row_image = FULL
+
+# enable gtid mode
+gtid_mode = on
+enforce_gtid_consistency = on
+```
+
+3. Restart MySQL Server
+
+```shell
+/etc/inint.d/mysqld restart
+```
+
+4. Confirm your changes by checking the binlog status once more:
+
+```sql
+mysql> show variables where variable_name in ('log_bin', 'binlog_format', 'binlog_row_image', 'gtid_mode', 'enforce_gtid_consistency');
++--------------------------+----------------+
+| Variable_name | Value |
++--------------------------+----------------+
+| binlog_format | ROW |
+| binlog_row_image | FULL |
+| enforce_gtid_consistency | ON |
+| gtid_mode | ON |
+| log_bin | ON |
++--------------------------+----------------+
+5 rows in set (0.00 sec)
+```
+
+### Notes
+
+#### 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’s documentation](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_interactive_timeout) for more details.
+- `wait_timeout`: The number of seconds the server waits for activity on a non-interactive connection before closing it. See [MySQL’s documentation](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout) for more details.
+
+*For more database settings see [Debezium MySQL Connector](https://github.com/debezium/debezium/blob/1.6/documentation/modules/ROOT/pages/connectors/mysql.adoc#set-up)*
+
+## Data Type Mapping
+
+| Mysql Data Type | SeaTunnel Data Type |
+|------------------------------------------------------------------------------------------|---------------------|
+| BIT(1) TINYINT(1) | BOOLEAN |
+| TINYINT | TINYINT |
+| TINYINT UNSIGNED SMALLINT | SMALLINT |
+| SMALLINT UNSIGNED MEDIUMINT MEDIUMINT UNSIGNED INT INTEGER YEAR | INT |
+| INT UNSIGNED INTEGER UNSIGNED BIGINT | BIGINT |
+| BIGINT UNSIGNED | DECIMAL(20,0) |
+| DECIMAL(p, s) DECIMAL(p, s) UNSIGNED NUMERIC(p, s) NUMERIC(p, s) UNSIGNED | DECIMAL(p,s) |
+| FLOAT FLOAT UNSIGNED | FLOAT |
+| DOUBLE DOUBLE UNSIGNED REAL REAL UNSIGNED | DOUBLE |
+| CHAR VARCHAR TINYTEXT MEDIUMTEXT TEXT LONGTEXT ENUM JSON | STRING |
+| DATE | DATE |
+| TIME | TIME |
+| DATETIME TIMESTAMP | TIMESTAMP |
+| BINARY VARBINAR BIT(p) TINYBLOB MEDIUMBLOB BLOB LONGBLOB | BYTES |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------------------------|----------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| base-url | String | Yes | - | The URL of the JDBC connection. Refer to a case: `jdbc:mysql://localhost:3306:3306/test`. |
+| username | String | Yes | - | Name of the database to use when connecting to the database server. |
+| password | String | Yes | - | Password to use when connecting to the database server. |
+| database-names | List | No | - | Database name of the database to monitor. |
+| table-names | List | Yes | - | Table name of the database to monitor. The table name needs to include the database name, for example: `database_name.table_name` |
+| table-names-config | List | No | - | Table config list. for example: [{"table": "db1.schema1.table1","primaryKeys":["key1"]}] |
+| startup.mode | Enum | No | INITIAL | Optional startup mode for MySQL CDC consumer, valid enumerations are `initial`, `earliest`, `latest` and `specific`. `initial`: Synchronize historical data at startup, and then synchronize incremental data. `earliest`: Startup from the earliest offset possible. `latest`: Startup from the latest offset. `specific`: Startup from user-supplied specific offsets. |
+| startup.specific-offset.file | String | No | - | Start from the specified binlog file name. **Note, This option is required when the `startup.mode` option used `specific`.** |
+| startup.specific-offset.pos | Long | No | - | Start from the specified binlog file position. **Note, This option is required when the `startup.mode` option used `specific`.** |
+| stop.mode | Enum | No | NEVER | Optional stop mode for MySQL CDC consumer, valid enumerations are `never`, `latest` or `specific`. `never`: Real-time job don't stop the source. `latest`: Stop from the latest offset. `specific`: Stop from user-supplied specific offset. |
+| stop.specific-offset.file | String | No | - | Stop from the specified binlog file name. **Note, This option is required when the `stop.mode` option used `specific`.** |
+| stop.specific-offset.pos | Long | No | - | Stop from the specified binlog file position. **Note, This option is required when the `stop.mode` option used `specific`.** |
+| snapshot.split.size | Integer | No | 8096 | The split size (number of rows) of table snapshot, captured tables are split into multiple splits when read the snapshot of table. |
+| snapshot.fetch.size | Integer | No | 1024 | The maximum fetch size for per poll when read table snapshot. |
+| server-id | String | No | - | 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'. 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 6500 and 2,148,492,146, though we recommend setting an explicit value. |
+| server-time-zone | String | No | UTC | The session time zone in database server. If not set, then ZoneId.systemDefault() is used to determine the server time zone. |
+| connect.timeout.ms | Duration | No | 30000 | The maximum time that the connector should wait after trying to connect to the database server before timing out. |
+| connect.max-retries | Integer | No | 3 | The max retry times that the connector should retry to build database server connection. |
+| connection.pool.size | Integer | No | 20 | The jdbc connection pool size. |
+| chunk-key.even-distribution.factor.upper-bound | Double | No | 100 | The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0. |
+| chunk-key.even-distribution.factor.lower-bound | Double | No | 0.05 | The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05. |
+| sample-sharding.threshold | Integer | No | 1000 | This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards. |
+| inverse-sampling.rate | Integer | No | 1000 | The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000. |
+| exactly_once | Boolean | No | false | Enable exactly once semantic. |
+| format | Enum | No | DEFAULT | Optional output format for MySQL CDC, valid enumerations are `DEFAULT`、`COMPATIBLE_DEBEZIUM_JSON`. |
+| debezium | Config | No | - | Pass-through [Debezium's properties](https://github.com/debezium/debezium/blob/1.6/documentation/modules/ROOT/pages/connectors/mysql.adoc#connector-properties) to Debezium Embedded Engine which is used to capture data changes from MySQL server. |
+| common-options | | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Task Example
+
+### Simple
+
+> Support multi-table reading
+
+```
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 10000
+}
+
+source {
+ MySQL-CDC {
+ base-url = "jdbc:mysql://localhost:3306/testdb"
+ username = "root"
+ password = "root@123"
+ table-names = ["testdb.table1", "testdb.table2"]
+
+ startup.mode = "initial"
+ }
+}
+
+sink {
+ Console {
+ }
+}
+```
+
+### Support debezium-compatible format send to kafka
+
+> Must be used with kafka connector sink, see [compatible debezium format](../formats/cdc-compatible-debezium-json.md) for details
+
+### Support custom primary key for table
+
+```
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 10000
+}
+
+source {
+ MySQL-CDC {
+ base-url = "jdbc:mysql://localhost:3306/testdb"
+ username = "root"
+ password = "root@123"
+
+ table-names = ["testdb.table1", "testdb.table2"]
+ table-names-config = [
+ {
+ table = "testdb.table2"
+ primaryKeys = ["id"]
+ }
+ ]
+ }
+}
+
+sink {
+ Console {
+ }
+}
+```
+
+## Changelog
+
+- Add MySQL CDC Source Connector
+
+### next version
+
diff --git a/docs/zh/connector-v2/source/Mysql.md b/docs/zh/connector-v2/source/Mysql.md
new file mode 100644
index 00000000000..82e1e38da79
--- /dev/null
+++ b/docs/zh/connector-v2/source/Mysql.md
@@ -0,0 +1,318 @@
+# MySQL
+
+> JDBC Mysql Source Connector
+
+## Description
+
+Read external data source data through JDBC.
+
+## Support Mysql Version
+
+- 5.5/5.6/5.7/8.0
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/mysql/mysql-connector-java) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/mysql/mysql-connector-java) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] [support multiple table reading](../../concept/connector-v2-features.md)
+
+> supports query SQL and can achieve projection effect.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|--------------------------|---------------------------------------|---------------------------------------------------------------------------|
+| Mysql | Different dependency version has different driver class. | com.mysql.cj.jdbc.Driver | jdbc:mysql://localhost:3306:3306/test | [Download](https://mvnrepository.com/artifact/mysql/mysql-connector-java) |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example Mysql datasource: cp mysql-connector-java-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| Mysql Data Type | SeaTunnel Data Type |
+|-----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| BIT(1) INT UNSIGNED | BOOLEAN |
+| TINYINT TINYINT UNSIGNED SMALLINT SMALLINT UNSIGNED MEDIUMINT MEDIUMINT UNSIGNED INT INTEGER YEAR | INT |
+| INT UNSIGNED INTEGER UNSIGNED BIGINT | BIGINT |
+| BIGINT UNSIGNED | DECIMAL(20,0) |
+| DECIMAL(x,y)(Get the designated column's specified column size.<38) | DECIMAL(x,y) |
+| DECIMAL(x,y)(Get the designated column's specified column size.>38) | DECIMAL(38,18) |
+| DECIMAL UNSIGNED | DECIMAL((Get the designated column's specified column size)+1, (Gets the designated column's number of digits to right of the decimal point.))) |
+| FLOAT FLOAT UNSIGNED | FLOAT |
+| DOUBLE DOUBLE UNSIGNED | DOUBLE |
+| CHAR VARCHAR TINYTEXT MEDIUMTEXT TEXT LONGTEXT JSON | STRING |
+| DATE | DATE |
+| TIME | TIME |
+| DATETIME TIMESTAMP | TIMESTAMP |
+| TINYBLOB MEDIUMBLOB BLOB LONGBLOB BINARY VARBINAR BIT(n) | BYTES |
+| GEOMETRY UNKNOWN | Not supported yet |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|--------------------------------------------|------------|----------|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:mysql://localhost:3306:3306/test |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use MySQL the value is `com.mysql.cj.jdbc.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type,Only support numeric type primary key, and only can config one column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. default value is job parallelism |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects,you can configure the row fetch size used in the query toimprove performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| table_path | Int | No | 0 | The path to the full path of table, you can use this configuration instead of `query`. examples: mysql: "testdb.table1" oracle: "test_schema.table1" sqlserver: "testdb.test_schema.table1" postgresql: "testdb.test_schema.table1" |
+| table_list | Array | No | 0 | The list of tables to be read, you can use this configuration instead of `table_path` example: ```[{ table_path = "testdb.table1"}, {table_path = "testdb.table2", query = "select * id, name from testdb.table2"}]``` |
+| where_condition | String | No | - | Common row filter conditions for all tables/queries, must start with `where`. for example `where id > 100` |
+| split.size | Int | No | 8096 | The split size (number of rows) of table, captured tables are split into multiple splits when read of table. |
+| split.even-distribution.factor.lower-bound | Double | No | 0.05 | The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05. |
+| split.even-distribution.factor.upper-bound | Double | No | 100 | The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0. |
+| split.sample-sharding.threshold | Int | No | 10000 | This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards. |
+| split.inverse-sampling.rate | Int | No | 1000 | The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Parallel Reader
+
+The JDBC Source connector supports parallel reading of data from tables. SeaTunnel will use certain rules to split the data in the table, which will be handed over to readers for reading. The number of readers is determined by the `parallelism` option.
+
+**Split Key Rules:**
+
+1. If `partition_column` is not null, It will be used to calculate split. The column must in **Supported split data type**.
+2. If `partition_column` is null, seatunnel will read the schema from table and get the Primary Key and Unique Index. If there are more than one column in Primary Key and Unique Index, The first column which in the **supported split data type** will be used to split data. For example, the table have Primary Key(nn guid, name varchar), because `guid` id not in **supported split data type**, so the column `name` will be used to split data.
+
+**Supported split data type:**
+* String
+* Number(int, bigint, decimal, ...)
+* Date
+
+### Options Related To Split
+
+#### split.size
+
+How many rows in one split, captured tables are split into multiple splits when read of table.
+
+#### split.even-distribution.factor.lower-bound
+
+> Not recommended for use
+
+The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05.
+
+#### split.even-distribution.factor.upper-bound
+
+> Not recommended for use
+
+The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0.
+
+#### split.sample-sharding.threshold
+
+This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards.
+
+#### split.inverse-sampling.rate
+
+The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000.
+
+#### partition_column [string]
+
+The column name for split data.
+
+#### partition_upper_bound [BigDecimal]
+
+The partition_column max value for scan, if not set SeaTunnel will query database get max value.
+
+#### partition_lower_bound [BigDecimal]
+
+The partition_column min value for scan, if not set SeaTunnel will query database get min value.
+
+#### partition_num [int]
+
+> Not recommended for use, The correct approach is to control the number of split through `split.size`
+
+How many splits do we need to split into, only support positive integer. default value is job parallelism.
+
+## tips
+
+> If the table can not be split(for example, table have no Primary Key or Unique Index, and `partition_column` is not set), it will run in single concurrency.
+>
+> Use `table_path` to replace `query` for single table reading. If you need to read multiple tables, use `table_list`.
+
+## Task Example
+
+### Simple:
+
+> This example queries type_bin 'table' 16 data in your test "database" in single parallel and queries all of its fields. You can also specify which fields to query for final output to the console.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 4
+ job.mode = "BATCH"
+}
+source{
+ Jdbc {
+ url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
+ driver = "com.mysql.cj.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ query = "select * from type_bin limit 16"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+### parallel by partition_column
+
+```
+env {
+ parallelism = 4
+ job.mode = "BATCH"
+}
+source {
+ Jdbc {
+ url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
+ driver = "com.mysql.cj.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ query = "select * from type_bin"
+ partition_column = "id"
+ split.size = 10000
+ # Read start boundary
+ #partition_lower_bound = ...
+ # Read end boundary
+ #partition_upper_bound = ...
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
+### parallel by Primary Key or Unique Index
+
+> Configuring `table_path` will turn on auto split, you can configure `split.*` to adjust the split strategy
+
+```
+env {
+ parallelism = 4
+ job.mode = "BATCH"
+}
+source {
+ Jdbc {
+ url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
+ driver = "com.mysql.cj.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ table_path = "testdb.table1"
+ query = "select * from testdb.table1"
+ split.size = 10000
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
+### Parallel Boundary:
+
+> It is more efficient to specify the data within the upper and lower bounds of the query It is more efficient to read your data source according to the upper and lower boundaries you configured
+
+```
+source {
+ Jdbc {
+ url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
+ driver = "com.mysql.cj.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ # Define query logic as required
+ query = "select * from type_bin"
+ partition_column = "id"
+ # Read start boundary
+ partition_lower_bound = 1
+ # Read end boundary
+ partition_upper_bound = 500
+ partition_num = 10
+ properties {
+ useSSL=false
+ }
+ }
+}
+```
+
+### Multiple table read:
+
+***Configuring `table_list` will turn on auto split, you can configure `split.*` to adjust the split strategy***
+
+```hocon
+env {
+ job.mode = "BATCH"
+ parallelism = 4
+}
+source {
+ Jdbc {
+ url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
+ driver = "com.mysql.cj.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+
+ table_list = [
+ {
+ table_path = "testdb.table1"
+ },
+ {
+ table_path = "testdb.table2"
+ # Use query filetr rows & columns
+ query = "select id, name from testdb.table2 where id > 100"
+ }
+ ]
+ #where_condition= "where id > 100"
+ #split.size = 8096
+ #split.even-distribution.factor.upper-bound = 100
+ #split.even-distribution.factor.lower-bound = 0.05
+ #split.sample-sharding.threshold = 1000
+ #split.inverse-sampling.rate = 1000
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
diff --git a/docs/zh/connector-v2/source/Neo4j.md b/docs/zh/connector-v2/source/Neo4j.md
new file mode 100644
index 00000000000..9797a8a575d
--- /dev/null
+++ b/docs/zh/connector-v2/source/Neo4j.md
@@ -0,0 +1,107 @@
+# Neo4j
+
+> Neo4j source connector
+
+## Description
+
+Read data from Neo4j.
+
+`neo4j-java-driver` version 4.4.9
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------------------------|--------|----------|---------------|
+| uri | String | Yes | - |
+| username | String | No | - |
+| password | String | No | - |
+| bearer_token | String | No | - |
+| kerberos_ticket | String | No | - |
+| database | String | Yes | - |
+| query | String | Yes | - |
+| schema | Object | Yes | - |
+| max_transaction_retry_time | Long | No | 30 |
+| max_connection_timeout | Long | No | 30 |
+
+### uri [string]
+
+The URI of the Neo4j database. Refer to a case: `neo4j://localhost:7687`
+
+### username [string]
+
+username of the Neo4j
+
+### password [string]
+
+password of the Neo4j. required if `username` is provided
+
+### bearer_token [string]
+
+base64 encoded bearer token of the Neo4j. for Auth.
+
+### kerberos_ticket [string]
+
+base64 encoded kerberos ticket of the Neo4j. for Auth.
+
+### database [string]
+
+database name.
+
+### query [string]
+
+Query statement.
+
+### schema.fields [string]
+
+returned fields of `query`
+
+see [column projection](../../concept/connector-v2-features.md)
+
+### max_transaction_retry_time [long]
+
+maximum transaction retry time(seconds). transaction fail if exceeded
+
+### max_connection_timeout [long]
+
+The maximum amount of time to wait for a TCP connection to be established (seconds)
+
+## Example
+
+```
+source {
+ Neo4j {
+ uri = "neo4j://localhost:7687"
+ username = "neo4j"
+ password = "1234"
+ database = "neo4j"
+
+ max_transaction_retry_time = 1
+ max_connection_timeout = 1
+
+ query = "MATCH (a:Person) RETURN a.name, a.age"
+
+ schema {
+ fields {
+ a.age=INT
+ a.name=STRING
+ }
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Neo4j Source Connector
+
diff --git a/docs/zh/connector-v2/source/Notion.md b/docs/zh/connector-v2/source/Notion.md
new file mode 100644
index 00000000000..d138c21c1d6
--- /dev/null
+++ b/docs/zh/connector-v2/source/Notion.md
@@ -0,0 +1,308 @@
+# Notion
+
+> Notion source connector
+
+## Description
+
+Used to read data from Notion.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------------|---------|----------|---------------|
+| url | String | Yes | - |
+| password | String | Yes | - |
+| version | String | Yes | - |
+| method | String | No | get |
+| schema.fields | Config | No | - |
+| format | String | No | json |
+| params | Map | No | - |
+| body | String | No | - |
+| json_field | Config | No | - |
+| content_json | String | No | - |
+| poll_interval_millis | int | No | - |
+| retry | int | No | - |
+| retry_backoff_multiplier_ms | int | No | 100 |
+| retry_backoff_max_ms | int | No | 10000 |
+| enable_multi_lines | boolean | No | false |
+| common-options | config | No | - |
+
+### url [String]
+
+http request url
+
+### password [String]
+
+API key for login, you can get more detail at this link:
+
+https://developers.notion.com/docs/authorization
+
+### version [String]
+
+The Notion API is versioned. API versions are named for the date the version is released
+
+### method [String]
+
+http request method, only supports GET, POST method
+
+### params [Map]
+
+http params
+
+### body [String]
+
+http body
+
+### poll_interval_millis [int]
+
+request http api interval(millis) in stream mode
+
+### retry [int]
+
+The max retry times if request http return to `IOException`
+
+### retry_backoff_multiplier_ms [int]
+
+The retry-backoff times(millis) multiplier if request http failed
+
+### retry_backoff_max_ms [int]
+
+The maximum retry-backoff times(millis) if request http failed
+
+### format [String]
+
+the format of upstream data, now only support `json` `text`, default `json`.
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### schema [Config]
+
+#### fields [Config]
+
+the schema fields of upstream data
+
+### content_json [String]
+
+This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`.
+
+If your return data looks something like this.
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can configure `content_field = "$.store.book.*"` and the result returned looks like this:
+
+```json
+[
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+]
+```
+
+Then you can get the desired result with a simpler schema,like
+
+```hocon
+Http {
+ url = "http://mockserver:1080/contentjson/mock"
+ method = "GET"
+ format = "json"
+ content_field = "$.store.book.*"
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+}
+```
+
+Here is an example:
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_contentjson_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_contentjson_to_assert.conf).
+
+### json_field [Config]
+
+This parameter helps you configure the schema,so this parameter must be used with schema.
+
+If your data looks something like this:
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can get the contents of 'book' by configuring the task as follows:
+
+```hocon
+source {
+ Http {
+ url = "http://mockserver:1080/jsonpath/mock"
+ method = "GET"
+ format = "json"
+ json_field = {
+ category = "$.store.book[*].category"
+ author = "$.store.book[*].author"
+ title = "$.store.book[*].title"
+ price = "$.store.book[*].price"
+ }
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+ }
+}
+```
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_jsonpath_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_jsonpath_to_assert.conf).
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+Notion {
+ url = "https://api.notion.com/v1/users"
+ password = "SeaTunnel-test"
+ version = "2022-06-28"
+ content_field = "$.results.*"
+ schema = {
+ fields {
+ object = string
+ id = string
+ type = string
+ person = {
+ email = string
+ }
+ avatar_url = string
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Notion Source Connector
+
diff --git a/docs/zh/connector-v2/source/OceanBase.md b/docs/zh/connector-v2/source/OceanBase.md
new file mode 100644
index 00000000000..20d6eb16124
--- /dev/null
+++ b/docs/zh/connector-v2/source/OceanBase.md
@@ -0,0 +1,176 @@
+# OceanBase
+
+> JDBC OceanBase Source Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Read external data source data through JDBC.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|--------------------------------|---------------------------|--------------------------------------|-------------------------------------------------------------------------------|
+| OceanBase | All OceanBase server versions. | com.oceanbase.jdbc.Driver | jdbc:oceanbase://localhost:2883/test | [Download](https://mvnrepository.com/artifact/com.oceanbase/oceanbase-client) |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example: cp oceanbase-client-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+### Mysql Mode
+
+| Mysql Data type | SeaTunnel Data type |
+|-----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| BIT(1) INT UNSIGNED | BOOLEAN |
+| TINYINT TINYINT UNSIGNED SMALLINT SMALLINT UNSIGNED MEDIUMINT MEDIUMINT UNSIGNED INT INTEGER YEAR | INT |
+| INT UNSIGNED INTEGER UNSIGNED BIGINT | BIGINT |
+| BIGINT UNSIGNED | DECIMAL(20,0) |
+| DECIMAL(x,y)(Get the designated column's specified column size.<38) | DECIMAL(x,y) |
+| DECIMAL(x,y)(Get the designated column's specified column size.>38) | DECIMAL(38,18) |
+| DECIMAL UNSIGNED | DECIMAL((Get the designated column's specified column size)+1, (Gets the designated column's number of digits to right of the decimal point.))) |
+| FLOAT FLOAT UNSIGNED | FLOAT |
+| DOUBLE DOUBLE UNSIGNED | DOUBLE |
+| CHAR VARCHAR TINYTEXT MEDIUMTEXT TEXT LONGTEXT JSON | STRING |
+| DATE | DATE |
+| TIME | TIME |
+| DATETIME TIMESTAMP | TIMESTAMP |
+| TINYBLOB MEDIUMBLOB BLOB LONGBLOB BINARY VARBINAR BIT(n) | BYTES |
+| GEOMETRY UNKNOWN | Not supported yet |
+
+### Oracle Mode
+
+| Oracle Data type | SeaTunnel Data type |
+|-----------------------------------------------------------|---------------------|
+| Number(p), p <= 9 | INT |
+| Number(p), p <= 18 | BIGINT |
+| Number(p), p > 18 | DECIMAL(38,18) |
+| REAL BINARY_FLOAT | FLOAT |
+| BINARY_DOUBLE | DOUBLE |
+| CHAR NCHAR NVARCHAR2 NCLOB CLOB ROWID | STRING |
+| DATE | DATE |
+| TIMESTAMP TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP |
+| BLOB RAW LONG RAW BFILE | BYTES |
+| UNKNOWN | Not supported yet |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------|------------|----------|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:oceanbase://localhost:2883/test |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, should be `com.oceanbase.jdbc.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| compatible_mode | String | Yes | - | The compatible mode of OceanBase, can be 'mysql' or 'oracle'. |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type column and string type column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. Default value is job parallelism. |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects, you can configure the row fetch size used in the query to improve performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+```
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+
+source {
+ Jdbc {
+ driver = "com.oceanbase.jdbc.Driver"
+ url = "jdbc:oceanbase://localhost:2883/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
+ user = "root"
+ password = ""
+ compatible_mode = "mysql"
+ query = "select * from source"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+### Parallel:
+
+> Read your query table in parallel with the shard field you configured and the shard data. You can do this if you want to read the whole table
+
+```
+env {
+ parallelism = 10
+ job.mode = "BATCH"
+}
+source {
+ Jdbc {
+ driver = "com.oceanbase.jdbc.Driver"
+ url = "jdbc:oceanbase://localhost:2883/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
+ user = "root"
+ password = ""
+ compatible_mode = "mysql"
+ query = "select * from source"
+ # Parallel sharding reads fields
+ partition_column = "id"
+ # Number of fragments
+ partition_num = 10
+ }
+}
+sink {
+ Console {}
+}
+```
+
+### Parallel Boundary:
+
+> It is more efficient to read your data source according to the upper and lower boundaries you configured
+
+```
+source {
+ Jdbc {
+ driver = "com.oceanbase.jdbc.Driver"
+ url = "jdbc:oceanbase://localhost:2883/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
+ user = "root"
+ password = ""
+ compatible_mode = "mysql"
+ query = "select * from source"
+ partition_column = "id"
+ partition_num = 10
+ # Read start boundary
+ partition_lower_bound = 1
+ # Read end boundary
+ partition_upper_bound = 500
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/source/OneSignal.md b/docs/zh/connector-v2/source/OneSignal.md
new file mode 100644
index 00000000000..9fb6d65379b
--- /dev/null
+++ b/docs/zh/connector-v2/source/OneSignal.md
@@ -0,0 +1,327 @@
+# OneSignal
+
+> OneSignal source connector
+
+## Description
+
+Used to read data from OneSignal.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------------|---------|----------|---------------|
+| url | String | Yes | - |
+| password | String | Yes | - |
+| method | String | No | get |
+| schema | Config | No | - |
+| schema.fields | Config | No | - |
+| format | String | No | json |
+| params | Map | No | - |
+| body | String | No | - |
+| json_field | Config | No | - |
+| content_json | String | No | - |
+| poll_interval_millis | int | No | - |
+| retry | int | No | - |
+| retry_backoff_multiplier_ms | int | No | 100 |
+| retry_backoff_max_ms | int | No | 10000 |
+| enable_multi_lines | boolean | No | false |
+| common-options | config | No | - |
+
+### url [String]
+
+http request url
+
+### password [String]
+
+Auth key for login, you can get more detail at this link:
+
+https://documentation.onesignal.com/docs/accounts-and-keys#user-auth-key
+
+### method [String]
+
+http request method, only supports GET, POST method
+
+### params [Map]
+
+http params
+
+### body [String]
+
+http body
+
+### poll_interval_millis [int]
+
+request http api interval(millis) in stream mode
+
+### retry [int]
+
+The max retry times if request http return to `IOException`
+
+### retry_backoff_multiplier_ms [int]
+
+The retry-backoff times(millis) multiplier if request http failed
+
+### retry_backoff_max_ms [int]
+
+The maximum retry-backoff times(millis) if request http failed
+
+### format [String]
+
+the format of upstream data, now only support `json` `text`, default `json`.
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### schema [Config]
+
+#### fields [Config]
+
+the schema fields of upstream data
+
+### content_json [String]
+
+This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`.
+
+If your return data looks something like this.
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can configure `content_field = "$.store.book.*"` and the result returned looks like this:
+
+```json
+[
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+]
+```
+
+Then you can get the desired result with a simpler schema,like
+
+```hocon
+Http {
+ url = "http://mockserver:1080/contentjson/mock"
+ method = "GET"
+ format = "json"
+ content_field = "$.store.book.*"
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+}
+```
+
+Here is an example:
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_contentjson_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_contentjson_to_assert.conf).
+
+### json_field [Config]
+
+This parameter helps you configure the schema,so this parameter must be used with schema.
+
+If your data looks something like this:
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can get the contents of 'book' by configuring the task as follows:
+
+```hocon
+source {
+ Http {
+ url = "http://mockserver:1080/jsonpath/mock"
+ method = "GET"
+ format = "json"
+ json_field = {
+ category = "$.store.book[*].category"
+ author = "$.store.book[*].author"
+ title = "$.store.book[*].title"
+ price = "$.store.book[*].price"
+ }
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+ }
+}
+```
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_jsonpath_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_jsonpath_to_assert.conf).
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+
+OneSignal {
+ url = "https://onesignal.com/api/v1/apps"
+ password = "SeaTunnel-test"
+ schema = {
+ fields {
+ id = string
+ name = string
+ gcm_key = string
+ chrome_key = string
+ chrome_web_key = string
+ chrome_web_origin = string
+ chrome_web_gcm_sender_id = string
+ chrome_web_default_notification_icon = string
+ chrome_web_sub_domain = string
+ apns_env = string
+ apns_certificates = string
+ apns_p8 = string
+ apns_team_id = string
+ apns_key_id = string
+ apns_bundle_id = string
+ safari_apns_certificate = string
+ safari_site_origin = string
+ safari_push_id = string
+ safari_icon_16_16 = string
+ safari_icon_32_32 = string
+ safari_icon_64_64 = string
+ safari_icon_128_128 = string
+ safari_icon_256_256 = string
+ site_name = string
+ created_at = string
+ updated_at = string
+ players = int
+ messageable_players = int
+ basic_auth_key = string
+ additional_data_is_root_payload = string
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add OneSignal Source Connector
+- [Feature][Connector-V2][HTTP] Use json-path parsing ([3510](https://github.com/apache/seatunnel/pull/3510))
+
diff --git a/docs/zh/connector-v2/source/OpenMldb.md b/docs/zh/connector-v2/source/OpenMldb.md
new file mode 100644
index 00000000000..a3eb291762d
--- /dev/null
+++ b/docs/zh/connector-v2/source/OpenMldb.md
@@ -0,0 +1,86 @@
+# OpenMldb
+
+> OpenMldb source connector
+
+## Description
+
+Used to read data from OpenMldb.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------|---------|----------|---------------|
+| cluster_mode | boolean | yes | - |
+| sql | string | yes | - |
+| database | string | yes | - |
+| host | string | no | - |
+| port | int | no | - |
+| zk_path | string | no | - |
+| zk_host | string | no | - |
+| session_timeout | int | no | 10000 |
+| request_timeout | int | no | 60000 |
+| common-options | | no | - |
+
+### cluster_mode [string]
+
+OpenMldb is or not cluster mode
+
+### sql [string]
+
+Sql statement
+
+### database [string]
+
+Database name
+
+### host [string]
+
+OpenMldb host, only supported on OpenMldb single mode
+
+### port [int]
+
+OpenMldb port, only supported on OpenMldb single mode
+
+### zk_host [string]
+
+Zookeeper host, only supported on OpenMldb cluster mode
+
+### zk_path [string]
+
+Zookeeper path, only supported on OpenMldb cluster mode
+
+### session_timeout [int]
+
+OpenMldb session timeout(ms), default 60000
+
+### request_timeout [int]
+
+OpenMldb request timeout(ms), default 10000
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+
+ OpenMldb {
+ host = "172.17.0.2"
+ port = 6527
+ sql = "select * from demo_table1"
+ database = "demo_db"
+ cluster_mode = false
+ }
+
+```
+
diff --git a/docs/zh/connector-v2/source/Oracle-CDC.md b/docs/zh/connector-v2/source/Oracle-CDC.md
new file mode 100644
index 00000000000..b7c564b80ff
--- /dev/null
+++ b/docs/zh/connector-v2/source/Oracle-CDC.md
@@ -0,0 +1,302 @@
+# Oracle CDC
+
+> Oracle CDC source connector
+
+## Support Those Engines
+
+> SeaTunnel Zeta
+> Flink
+
+## Key features
+
+- [ ] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+The Oracle CDC connector allows for reading snapshot data and incremental data from Oracle database. This document
+describes how to set up the Oracle CDC connector to run SQL queries against Oracle databases.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|--------------------------|----------------------------------------|--------------------------------------------------------------------|
+| Oracle | Different dependency version has different driver class. | oracle.jdbc.OracleDriver | jdbc:oracle:thin:@datasource01:1523:xe | https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 |
+
+## Database Dependency
+
+### Install Jdbc Driver
+
+#### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+> 2. To support the i18n character set, copy the `orai18n.jar` to the `$SEATNUNNEL_HOME/plugins/` directory.
+
+#### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+> 2. To support the i18n character set, copy the `orai18n.jar` to the `$SEATNUNNEL_HOME/lib/` directory.
+
+### Enable Oracle Logminer
+
+> To enable Oracle CDC (Change Data Capture) using Logminer in Seatunnel, which is a built-in tool provided by Oracle, follow the steps below:
+
+#### Enabling Logminer without CDB (Container Database) mode.
+
+1. The operating system creates an empty file directory to store Oracle archived logs and user tablespaces.
+
+```shell
+mkdir -p /opt/oracle/oradata/recovery_area
+mkdir -p /opt/oracle/oradata/ORCLCDB
+chown -R oracle /opt/oracle/***
+```
+
+2. Login as admin and enable Oracle archived logs.
+
+```sql
+sqlplus /nolog;
+connect sys as sysdba;
+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;
+ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
+archive log list;
+```
+
+3. Login as admin and create an account called logminer_user with the password "oracle", and grant it privileges to read tables and logs.
+
+```sql
+CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
+CREATE USER logminer_user IDENTIFIED BY oracle DEFAULT TABLESPACE logminer_tbs QUOTA UNLIMITED ON logminer_tbs;
+
+GRANT CREATE SESSION TO logminer_user;
+GRANT SELECT ON V_$DATABASE to logminer_user;
+GRANT SELECT ON V_$LOG TO logminer_user;
+GRANT SELECT ON V_$LOGFILE TO logminer_user;
+GRANT SELECT ON V_$LOGMNR_LOGS TO logminer_user;
+GRANT SELECT ON V_$LOGMNR_CONTENTS TO logminer_user;
+GRANT SELECT ON V_$ARCHIVED_LOG TO logminer_user;
+GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO logminer_user;
+GRANT EXECUTE ON DBMS_LOGMNR TO logminer_user;
+GRANT EXECUTE ON DBMS_LOGMNR_D TO logminer_user;
+```
+
+##### Oracle 11g is not supported
+
+```sql
+GRANT LOGMINING TO logminer_user;
+```
+
+##### Grant privileges only to the tables that need to be collected
+
+```sql
+GRANT SELECT ANY TABLE TO logminer_user;
+GRANT ANALYZE ANY TO logminer_user;
+```
+
+#### To enable Logminer in Oracle with CDB (Container Database) + PDB (Pluggable Database) mode, follow the steps below:
+
+1. The operating system creates an empty file directory to store Oracle archived logs and user tablespaces.
+
+```shell
+mkdir -p /opt/oracle/oradata/recovery_area
+mkdir -p /opt/oracle/oradata/ORCLCDB
+mkdir -p /opt/oracle/oradata/ORCLCDB/ORCLPDB1
+chown -R oracle /opt/oracle/***
+```
+
+2. Login as admin and enable logging
+
+```sql
+sqlplus /nolog
+connect sys as sysdba; # Password: oracle
+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;
+archive log list;
+```
+
+3. Executing in CDB
+
+```sql
+ALTER TABLE TEST.* ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
+ALTER TABLE TEST.T2 ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
+```
+
+4. Creating debeziume account
+
+> Operating in CDB
+
+```sql
+sqlplus sys/top_secret@//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;
+```
+
+> Operating in PDB
+
+```sql
+sqlplus sys/top_secret@//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;
+```
+
+5. Operating in CDB
+
+```sql
+sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba
+
+CREATE USER c##dbzuser IDENTIFIED BY dbz
+DEFAULT TABLESPACE logminer_tbs
+QUOTA UNLIMITED ON logminer_tbs
+CONTAINER=ALL;
+
+GRANT CREATE SESSION TO c##dbzuser CONTAINER=ALL;
+GRANT SET CONTAINER TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT ON V_$DATABASE to c##dbzuser CONTAINER=ALL;
+GRANT FLASHBACK ANY TABLE TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT ANY TABLE TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT_CATALOG_ROLE TO c##dbzuser CONTAINER=ALL;
+GRANT EXECUTE_CATALOG_ROLE TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT ANY TRANSACTION TO c##dbzuser CONTAINER=ALL;
+GRANT LOGMINING TO c##dbzuser CONTAINER=ALL;
+
+GRANT CREATE TABLE TO c##dbzuser CONTAINER=ALL;
+GRANT LOCK ANY TABLE TO c##dbzuser CONTAINER=ALL;
+GRANT CREATE SEQUENCE TO c##dbzuser CONTAINER=ALL;
+
+GRANT EXECUTE ON DBMS_LOGMNR TO c##dbzuser CONTAINER=ALL;
+GRANT EXECUTE ON DBMS_LOGMNR_D TO c##dbzuser CONTAINER=ALL;
+
+GRANT SELECT ON V_$LOG TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT ON V_$LOG_HISTORY TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT ON V_$LOGMNR_LOGS TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT ON V_$LOGMNR_CONTENTS TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT ON V_$LOGMNR_PARAMETERS TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT ON V_$LOGFILE TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT ON V_$ARCHIVED_LOG TO c##dbzuser CONTAINER=ALL;
+GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO c##dbzuser CONTAINER=ALL;
+GRANT analyze any TO debeziume_1 CONTAINER=ALL;
+
+exit;
+```
+
+## Data Type Mapping
+
+| Oracle Data type | SeaTunnel Data type |
+|--------------------------------------------------------------------------------------|---------------------|
+| INTEGER | INT |
+| FLOAT | DECIMAL(38, 18) |
+| NUMBER(precision <= 9, scale == 0) | INT |
+| NUMBER(9 < precision <= 18, scale == 0) | BIGINT |
+| NUMBER(18 < precision, scale == 0) | DECIMAL(38, 0) |
+| NUMBER(precision == 0, scale == 0) | DECIMAL(38, 18) |
+| NUMBER(scale != 0) | DECIMAL(38, 18) |
+| BINARY_DOUBLE | DOUBLE |
+| BINARY_FLOAT REAL | FLOAT |
+| CHAR NCHAR NVARCHAR2 VARCHAR2 LONG ROWID NCLOB CLOB | STRING |
+| DATE | DATE |
+| TIMESTAMP TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP |
+| BLOB RAW LONG RAW BFILE | BYTES |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------------------------|----------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| base-url | String | Yes | - | The URL of the JDBC connection. Refer to a case: `idbc:oracle:thin:datasource01:1523:xe`. |
+| username | String | Yes | - | Name of the database to use when connecting to the database server. |
+| password | String | Yes | - | Password to use when connecting to the database server. |
+| database-names | List | No | - | Database name of the database to monitor. |
+| schema-names | List | No | - | Schema name of the database to monitor. |
+| table-names | List | Yes | - | Table name of the database to monitor. The table name needs to include the database name, for example: `database_name.table_name` |
+| table-names-config | List | No | - | Table config list. for example: [{"table": "db1.schema1.table1","primaryKeys":["key1"]}] |
+| startup.mode | Enum | No | INITIAL | Optional startup mode for Oracle CDC consumer, valid enumerations are `initial`, `earliest`, `latest` and `specific`. `initial`: Synchronize historical data at startup, and then synchronize incremental data. `earliest`: Startup from the earliest offset possible. `latest`: Startup from the latest offset. `specific`: Startup from user-supplied specific offsets. |
+| startup.specific-offset.file | String | No | - | Start from the specified binlog file name. **Note, This option is required when the `startup.mode` option used `specific`.** |
+| startup.specific-offset.pos | Long | No | - | Start from the specified binlog file position. **Note, This option is required when the `startup.mode` option used `specific`.** |
+| stop.mode | Enum | No | NEVER | Optional stop mode for Oracle CDC consumer, valid enumerations are `never`, `latest` or `specific`. `never`: Real-time job don't stop the source. `latest`: Stop from the latest offset. `specific`: Stop from user-supplied specific offset. |
+| stop.specific-offset.file | String | No | - | Stop from the specified binlog file name. **Note, This option is required when the `stop.mode` option used `specific`.** |
+| stop.specific-offset.pos | Long | No | - | Stop from the specified binlog file position. **Note, This option is required when the `stop.mode` option used `specific`.** |
+| snapshot.split.size | Integer | No | 8096 | The split size (number of rows) of table snapshot, captured tables are split into multiple splits when read the snapshot of table. |
+| snapshot.fetch.size | Integer | No | 1024 | The maximum fetch size for per poll when read table snapshot. |
+| server-time-zone | String | No | UTC | The session time zone in database server. If not set, then ZoneId.systemDefault() is used to determine the server time zone. |
+| connect.timeout.ms | Duration | No | 30000 | The maximum time that the connector should wait after trying to connect to the database server before timing out. |
+| connect.max-retries | Integer | No | 3 | The max retry times that the connector should retry to build database server connection. |
+| connection.pool.size | Integer | No | 20 | The jdbc connection pool size. |
+| chunk-key.even-distribution.factor.upper-bound | Double | No | 100 | The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0. |
+| chunk-key.even-distribution.factor.lower-bound | Double | No | 0.05 | The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05. |
+| sample-sharding.threshold | Integer | No | 1000 | This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards. |
+| inverse-sampling.rate | Integer | No | 1000 | The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000. |
+| exactly_once | Boolean | No | false | Enable exactly once semantic. |
+| format | Enum | No | DEFAULT | Optional output format for Oracle CDC, valid enumerations are `DEFAULT`、`COMPATIBLE_DEBEZIUM_JSON`. |
+| debezium | Config | No | - | Pass-through [Debezium's properties](https://github.com/debezium/debezium/blob/1.6/documentation/modules/ROOT/pages/connectors/oracle.adoc#connector-properties) to Debezium Embedded Engine which is used to capture data changes from Oracle server. |
+| common-options | | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Task Example
+
+### Simple
+
+> Support multi-table reading
+
+```conf
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ Oracle-CDC {
+ result_table_name = "customers"
+ username = "system"
+ password = "oracle"
+ database-names = ["XE"]
+ schema-names = ["DEBEZIUM"]
+ table-names = ["XE.DEBEZIUM.FULL_TYPES"]
+ base-url = "jdbc:oracle:thin:system/oracle@oracle-host:1521:xe"
+ source.reader.close.timeout = 120000
+ }
+}
+```
+
+### Support custom primary key for table
+
+```
+
+source {
+ Oracle-CDC {
+ result_table_name = "customers"
+ base-url = "jdbc:oracle:thin:system/oracle@oracle-host:1521:xe"
+ source.reader.close.timeout = 120000
+ username = "system"
+ password = "oracle"
+ database-names = ["XE"]
+ schema-names = ["DEBEZIUM"]
+ table-names = ["XE.DEBEZIUM.FULL_TYPES"]
+ table-names-config = [
+ {
+ table = "XE.DEBEZIUM.FULL_TYPES"
+ primaryKeys = ["ID"]
+ }
+ ]
+ }
+}
+
+```
+
+### Support debezium-compatible format send to kafka
+
+> Must be used with kafka connector sink, see [compatible debezium format](../formats/cdc-compatible-debezium-json.md) for details
+
+## Changelog
+
+- Add Oracle CDC Source Connector
+
+### next version
+
diff --git a/docs/zh/connector-v2/source/Oracle.md b/docs/zh/connector-v2/source/Oracle.md
new file mode 100644
index 00000000000..ba44142a31c
--- /dev/null
+++ b/docs/zh/connector-v2/source/Oracle.md
@@ -0,0 +1,324 @@
+# Oracle
+
+> JDBC Oracle Source Connector
+
+## Description
+
+Read external data source data through JDBC.
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+> 2. To support the i18n character set, copy the `orai18n.jar` to the `$SEATNUNNEL_HOME/plugins/` directory.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+> 2. To support the i18n character set, copy the `orai18n.jar` to the `$SEATNUNNEL_HOME/lib/` directory.
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+> supports query SQL and can achieve projection effect.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|--------------------------|----------------------------------------|--------------------------------------------------------------------|
+| Oracle | Different dependency version has different driver class. | oracle.jdbc.OracleDriver | jdbc:oracle:thin:@datasource01:1523:xe | https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example Oracle datasource: cp ojdbc8-xxxxxx.jar $SEATNUNNEL_HOME/lib/
+> To support the i18n character set, copy the orai18n.jar to the $SEATNUNNEL_HOME/lib/ directory.
+
+## Data Type Mapping
+
+| Oracle Data Type | SeaTunnel Data Type |
+|--------------------------------------------------------------------------------------|---------------------|
+| INTEGER | INT |
+| FLOAT | DECIMAL(38, 18) |
+| NUMBER(precision <= 9, scale == 0) | INT |
+| NUMBER(9 < precision <= 18, scale == 0) | BIGINT |
+| NUMBER(18 < precision, scale == 0) | DECIMAL(38, 0) |
+| NUMBER(scale != 0) | DECIMAL(38, 18) |
+| BINARY_DOUBLE | DOUBLE |
+| BINARY_FLOAT REAL | FLOAT |
+| CHAR NCHAR NVARCHAR2 VARCHAR2 LONG ROWID NCLOB CLOB | STRING |
+| DATE | DATE |
+| TIMESTAMP TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP |
+| BLOB RAW LONG RAW BFILE | BYTES |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------|------------|----------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:oracle:thin:@datasource01:1523:xe |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use MySQL the value is `oracle.jdbc.OracleDriver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type,Only support numeric type primary key, and only can config one column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. default value is job parallelism |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects,you can configure the row fetch size used in the query toimprove performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+
+| Name | Type | Required | Default | Description |
+|--------------------------------------------|------------|----------|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:mysql://localhost:3306:3306/test |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use MySQL the value is `com.mysql.cj.jdbc.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type,Only support numeric type primary key, and only can config one column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. default value is job parallelism |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects,you can configure the row fetch size used in the query toimprove performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| table_path | Int | No | 0 | The path to the full path of table, you can use this configuration instead of `query`. examples: mysql: "testdb.table1" oracle: "test_schema.table1" sqlserver: "testdb.test_schema.table1" postgresql: "testdb.test_schema.table1" |
+| table_list | Array | No | 0 | The list of tables to be read, you can use this configuration instead of `table_path` example: ```[{ table_path = "testdb.table1"}, {table_path = "testdb.table2", query = "select * id, name from testdb.table2"}]``` |
+| where_condition | String | No | - | Common row filter conditions for all tables/queries, must start with `where`. for example `where id > 100` |
+| split.size | Int | No | 8096 | The split size (number of rows) of table, captured tables are split into multiple splits when read of table. |
+| split.even-distribution.factor.lower-bound | Double | No | 0.05 | The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05. |
+| split.even-distribution.factor.upper-bound | Double | No | 100 | The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0. |
+| split.sample-sharding.threshold | Int | No | 10000 | This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards. |
+| split.inverse-sampling.rate | Int | No | 1000 | The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Parallel Reader
+
+The JDBC Source connector supports parallel reading of data from tables. SeaTunnel will use certain rules to split the data in the table, which will be handed over to readers for reading. The number of readers is determined by the `parallelism` option.
+
+**Split Key Rules:**
+
+1. If `partition_column` is not null, It will be used to calculate split. The column must in **Supported split data type**.
+2. If `partition_column` is null, seatunnel will read the schema from table and get the Primary Key and Unique Index. If there are more than one column in Primary Key and Unique Index, The first column which in the **supported split data type** will be used to split data. For example, the table have Primary Key(nn guid, name varchar), because `guid` id not in **supported split data type**, so the column `name` will be used to split data.
+
+**Supported split data type:**
+* String
+* Number(int, bigint, decimal, ...)
+* Date
+
+### Options Related To Split
+
+#### split.size
+
+How many rows in one split, captured tables are split into multiple splits when read of table.
+
+#### split.even-distribution.factor.lower-bound
+
+> Not recommended for use
+
+The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05.
+
+#### split.even-distribution.factor.upper-bound
+
+> Not recommended for use
+
+The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0.
+
+#### split.sample-sharding.threshold
+
+This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards.
+
+#### split.inverse-sampling.rate
+
+The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000.
+
+#### partition_column [string]
+
+The column name for split data.
+
+#### partition_upper_bound [BigDecimal]
+
+The partition_column max value for scan, if not set SeaTunnel will query database get max value.
+
+#### partition_lower_bound [BigDecimal]
+
+The partition_column min value for scan, if not set SeaTunnel will query database get min value.
+
+#### partition_num [int]
+
+> Not recommended for use, The correct approach is to control the number of split through `split.size`
+
+How many splits do we need to split into, only support positive integer. default value is job parallelism.
+
+## tips
+
+> If the table can not be split(for example, table have no Primary Key or Unique Index, and `partition_column` is not set), it will run in single concurrency.
+>
+> Use `table_path` to replace `query` for single table reading. If you need to read multiple tables, use `table_list`.
+
+## Task Example
+
+### Simple:
+
+> This example queries type_bin 'table' 16 data in your test "database" in single parallel and queries all of its fields. You can also specify which fields to query for final output to the console.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 4
+ job.mode = "BATCH"
+}
+source{
+ Jdbc {
+ url = "jdbc:oracle:thin:@datasource01:1523:xe"
+ driver = "oracle.jdbc.OracleDriver"
+ user = "root"
+ password = "123456"
+ query = "SELECT * FROM TEST_TABLE"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+### parallel by partition_column
+
+> Read your query table in parallel with the shard field you configured and the shard data You can do this if you want to read the whole table
+
+```
+env {
+ parallelism = 4
+ job.mode = "BATCH"
+}
+source {
+ Jdbc {
+ url = "jdbc:oracle:thin:@datasource01:1523:xe"
+ driver = "oracle.jdbc.OracleDriver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ # Define query logic as required
+ query = "SELECT * FROM TEST_TABLE"
+ # Parallel sharding reads fields
+ partition_column = "ID"
+ # Number of fragments
+ partition_num = 10
+ properties {
+ database.oracle.jdbc.timezoneAsRegion = "false"
+ }
+ }
+}
+sink {
+ Console {}
+}
+```
+
+### parallel by Primary Key or Unique Index
+
+> Configuring `table_path` will turn on auto split, you can configure `split.*` to adjust the split strategy
+
+```
+env {
+ parallelism = 4
+ job.mode = "BATCH"
+}
+source {
+ Jdbc {
+ url = "jdbc:oracle:thin:@datasource01:1523:xe"
+ driver = "oracle.jdbc.OracleDriver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ table_path = "DA.SCHEMA1.TABLE1"
+ query = "select * from SCHEMA1.TABLE1"
+ split.size = 10000
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
+### Parallel Boundary:
+
+> It is more efficient to specify the data within the upper and lower bounds of the query It is more efficient to read your data source according to the upper and lower boundaries you configured
+
+```
+source {
+ Jdbc {
+ url = "jdbc:oracle:thin:@datasource01:1523:xe"
+ driver = "oracle.jdbc.OracleDriver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ # Define query logic as required
+ query = "SELECT * FROM TEST_TABLE"
+ partition_column = "ID"
+ # Read start boundary
+ partition_lower_bound = 1
+ # Read end boundary
+ partition_upper_bound = 500
+ partition_num = 10
+ }
+}
+```
+
+### Multiple table read:
+
+***Configuring `table_list` will turn on auto split, you can configure `split.*` to adjust the split strategy***
+
+```hocon
+env {
+ job.mode = "BATCH"
+ parallelism = 4
+}
+source {
+ Jdbc {
+ url = "jdbc:oracle:thin:@datasource01:1523:xe"
+ driver = "oracle.jdbc.OracleDriver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ "table_list"=[
+ {
+ "table_path"="XE.TEST.USER_INFO"
+ },
+ {
+ "table_path"="XE.TEST.YOURTABLENAME"
+ }
+ ]
+ #where_condition= "where id > 100"
+ split.size = 10000
+ #split.even-distribution.factor.upper-bound = 100
+ #split.even-distribution.factor.lower-bound = 0.05
+ #split.sample-sharding.threshold = 1000
+ #split.inverse-sampling.rate = 1000
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
diff --git a/docs/zh/connector-v2/source/OssFile.md b/docs/zh/connector-v2/source/OssFile.md
new file mode 100644
index 00000000000..233eb76800f
--- /dev/null
+++ b/docs/zh/connector-v2/source/OssFile.md
@@ -0,0 +1,482 @@
+# OssFile
+
+> Oss file source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Usage Dependency
+
+### For Spark/Flink Engine
+
+1. You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+2. You must ensure `hadoop-aliyun-xx.jar`, `aliyun-sdk-oss-xx.jar` and `jdom-xx.jar` in `${SEATUNNEL_HOME}/plugins/` dir and the version of `hadoop-aliyun` jar need equals your hadoop version which used in spark/flink and `aliyun-sdk-oss-xx.jar` and `jdom-xx.jar` version needs to be the version corresponding to the `hadoop-aliyun` version. Eg: `hadoop-aliyun-3.1.4.jar` dependency `aliyun-sdk-oss-3.4.1.jar` and `jdom-1.1.jar`.
+
+### For SeaTunnel Zeta Engine
+
+1. You must ensure `seatunnel-hadoop3-3.1.4-uber.jar`, `aliyun-sdk-oss-3.4.1.jar`, `hadoop-aliyun-3.1.4.jar` and `jdom-1.1.jar` in `${SEATUNNEL_HOME}/lib/` dir.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+Read all the data in a split in a pollNext call. What splits are read will be saved in snapshot.
+
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Data Type Mapping
+
+Data type mapping is related to the type of file being read, We supported as the following file types:
+
+`text` `csv` `parquet` `orc` `json` `excel`
+
+### JSON File Type
+
+If you assign file type to `json`, you should also assign schema option to tell connector how to parse data to the row you want.
+
+For example:
+
+upstream data is the following:
+
+```json
+
+{"code": 200, "data": "get success", "success": true}
+
+```
+
+You can also save multiple pieces of data in one file and split them by newline:
+
+```json lines
+
+{"code": 200, "data": "get success", "success": true}
+{"code": 300, "data": "get failed", "success": false}
+
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+### Text Or CSV File Type
+
+If you assign file type to `text` `csv`, you can choose to specify the schema information or not.
+
+For example, upstream data is the following:
+
+```text
+
+tyrantlucifer#26#male
+
+```
+
+If you do not assign data schema connector will treat the upstream data as the following:
+
+| content |
+|-----------------------|
+| tyrantlucifer#26#male |
+
+If you assign data schema, you should also assign the option `field_delimiter` too except CSV file type
+
+you should assign schema and delimiter as the following:
+
+```hocon
+
+field_delimiter = "#"
+schema {
+ fields {
+ name = string
+ age = int
+ gender = string
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| name | age | gender |
+|---------------|-----|--------|
+| tyrantlucifer | 26 | male |
+
+### Orc File Type
+
+If you assign file type to `parquet` `orc`, schema option not required, connector can find the schema of upstream data automatically.
+
+| Orc Data type | SeaTunnel Data type |
+|----------------------------------|----------------------------------------------------------------|
+| BOOLEAN | BOOLEAN |
+| INT | INT |
+| BYTE | BYTE |
+| SHORT | SHORT |
+| LONG | LONG |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| BINARY | BINARY |
+| STRING VARCHAR CHAR | STRING |
+| DATE | LOCAL_DATE_TYPE |
+| TIMESTAMP | LOCAL_DATE_TIME_TYPE |
+| DECIMAL | DECIMAL |
+| LIST(STRING) | STRING_ARRAY_TYPE |
+| LIST(BOOLEAN) | BOOLEAN_ARRAY_TYPE |
+| LIST(TINYINT) | BYTE_ARRAY_TYPE |
+| LIST(SMALLINT) | SHORT_ARRAY_TYPE |
+| LIST(INT) | INT_ARRAY_TYPE |
+| LIST(BIGINT) | LONG_ARRAY_TYPE |
+| LIST(FLOAT) | FLOAT_ARRAY_TYPE |
+| LIST(DOUBLE) | DOUBLE_ARRAY_TYPE |
+| Map | MapType, This type of K and V will transform to SeaTunnel type |
+| STRUCT | SeaTunnelRowType |
+
+### Parquet File Type
+
+If you assign file type to `parquet` `orc`, schema option not required, connector can find the schema of upstream data automatically.
+
+| Orc Data type | SeaTunnel Data type |
+|----------------------|----------------------------------------------------------------|
+| INT_8 | BYTE |
+| INT_16 | SHORT |
+| DATE | DATE |
+| TIMESTAMP_MILLIS | TIMESTAMP |
+| INT64 | LONG |
+| INT96 | TIMESTAMP |
+| BINARY | BYTES |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| BOOLEAN | BOOLEAN |
+| FIXED_LEN_BYTE_ARRAY | TIMESTAMP DECIMAL |
+| DECIMAL | DECIMAL |
+| LIST(STRING) | STRING_ARRAY_TYPE |
+| LIST(BOOLEAN) | BOOLEAN_ARRAY_TYPE |
+| LIST(TINYINT) | BYTE_ARRAY_TYPE |
+| LIST(SMALLINT) | SHORT_ARRAY_TYPE |
+| LIST(INT) | INT_ARRAY_TYPE |
+| LIST(BIGINT) | LONG_ARRAY_TYPE |
+| LIST(FLOAT) | FLOAT_ARRAY_TYPE |
+| LIST(DOUBLE) | DOUBLE_ARRAY_TYPE |
+| Map | MapType, This type of K and V will transform to SeaTunnel type |
+| STRUCT | SeaTunnelRowType |
+
+## Options
+
+| name | type | required | default value | Description |
+|---------------------------|---------|----------|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| path | string | yes | - | The Oss path that needs to be read can have sub paths, but the sub paths need to meet certain format requirements. Specific requirements can be referred to "parse_partition_from_path" option |
+| file_format_type | string | yes | - | File type, supported as the following file types: `text` `csv` `parquet` `orc` `json` `excel` |
+| bucket | string | yes | - | The bucket address of oss file system, for example: `oss://seatunnel-test`. |
+| endpoint | string | yes | - | fs oss endpoint |
+| read_columns | list | no | - | The read column list of the data source, user can use it to implement field projection. The file type supported column projection as the following shown: `text` `csv` `parquet` `orc` `json` `excel` . If the user wants to use this feature when reading `text` `json` `csv` files, the "schema" option must be configured. |
+| access_key | string | no | - | |
+| access_secret | string | no | - | |
+| delimiter | string | no | \001 | Field delimiter, used to tell connector how to slice and dice fields when reading text files. Default `\001`, the same as hive's default delimiter. |
+| parse_partition_from_path | boolean | no | true | Control whether parse the partition keys and values from file path. For example if you read a file from path `oss://hadoop-cluster/tmp/seatunnel/parquet/name=tyrantlucifer/age=26`. Every record data from file will be added these two fields: name="tyrantlucifer", age=16 |
+| date_format | string | no | yyyy-MM-dd | Date type format, used to tell connector how to convert string to date, supported as the following formats:`yyyy-MM-dd` `yyyy.MM.dd` `yyyy/MM/dd`. default `yyyy-MM-dd` |
+| datetime_format | string | no | yyyy-MM-dd HH:mm:ss | Datetime type format, used to tell connector how to convert string to datetime, supported as the following formats:`yyyy-MM-dd HH:mm:ss` `yyyy.MM.dd HH:mm:ss` `yyyy/MM/dd HH:mm:ss` `yyyyMMddHHmmss` |
+| time_format | string | no | HH:mm:ss | Time type format, used to tell connector how to convert string to time, supported as the following formats:`HH:mm:ss` `HH:mm:ss.SSS` |
+| skip_header_row_number | long | no | 0 | Skip the first few lines, but only for the txt and csv. For example, set like following:`skip_header_row_number = 2`. Then SeaTunnel will skip the first 2 lines from source files |
+| schema | config | no | - | The schema of upstream data. |
+| sheet_name | string | no | - | Reader the sheet of the workbook,Only used when file_format is excel. |
+| compress_codec | string | no | none | Which compress codec the files used. |
+| file_filter_pattern | string | no | | `*.txt` means you only need read the files end with `.txt` |
+| common-options | config | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc/parquet:
+ automatically recognizes the compression type, no additional settings required.
+
+### file_filter_pattern [string]
+
+Filter pattern, which used for filtering files.
+
+### schema [config]
+
+Only need to be configured when the file_format_type are text, json, excel or csv ( Or other format we can't read the schema from metadata).
+
+#### fields [Config]
+
+The schema of upstream data.
+
+## How to Create a Oss Data Synchronization Jobs
+
+The following example demonstrates how to create a data synchronization job that reads data from Oss and prints it on the local client:
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+# Create a source to connect to Oss
+source {
+ OssFile {
+ path = "/seatunnel/orc"
+ bucket = "oss://tyrantlucifer-image-bed"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxxxxxxx"
+ endpoint = "oss-cn-beijing.aliyuncs.com"
+ file_format_type = "orc"
+ }
+}
+
+# Console printing of the read Oss data
+sink {
+ Console {
+ }
+}
+```
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+# Create a source to connect to Oss
+source {
+ OssFile {
+ path = "/seatunnel/json"
+ bucket = "oss://tyrantlucifer-image-bed"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxxxxxxx"
+ endpoint = "oss-cn-beijing.aliyuncs.com"
+ file_format_type = "json"
+ schema {
+ fields {
+ id = int
+ name = string
+ }
+ }
+ }
+}
+
+# Console printing of the read Oss data
+sink {
+ Console {
+ }
+}
+```
+
+### Multiple Table
+
+No need to config schema file type, eg: `orc`.
+
+```
+env {
+ parallelism = 1
+ spark.app.name = "SeaTunnel"
+ spark.executor.instances = 2
+ spark.executor.cores = 1
+ spark.executor.memory = "1g"
+ spark.master = local
+ job.mode = "BATCH"
+}
+
+source {
+ OssFile {
+ tables_configs = [
+ {
+ schema = {
+ table = "fake01"
+ }
+ bucket = "oss://whale-ops"
+ access_key = "xxxxxxxxxxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxxxx"
+ endpoint = "https://oss-accelerate.aliyuncs.com"
+ path = "/test/seatunnel/read/orc"
+ file_format_type = "orc"
+ },
+ {
+ schema = {
+ table = "fake02"
+ }
+ bucket = "oss://whale-ops"
+ access_key = "xxxxxxxxxxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxxxx"
+ endpoint = "https://oss-accelerate.aliyuncs.com"
+ path = "/test/seatunnel/read/orc"
+ file_format_type = "orc"
+ }
+ ]
+ result_table_name = "fake"
+ }
+}
+
+sink {
+ Assert {
+ rules {
+ table-names = ["fake01", "fake02"]
+ }
+ }
+}
+```
+
+Need config schema file type, eg: `json`
+
+```
+
+env {
+ execution.parallelism = 1
+ spark.app.name = "SeaTunnel"
+ spark.executor.instances = 2
+ spark.executor.cores = 1
+ spark.executor.memory = "1g"
+ spark.master = local
+ job.mode = "BATCH"
+}
+
+source {
+ OssFile {
+ tables_configs = [
+ {
+ bucket = "oss://whale-ops"
+ access_key = "xxxxxxxxxxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxxxx"
+ endpoint = "https://oss-accelerate.aliyuncs.com"
+ path = "/test/seatunnel/read/json"
+ file_format_type = "json"
+ schema = {
+ table = "fake01"
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ c_row = {
+ C_MAP = "map"
+ C_ARRAY = "array"
+ C_STRING = string
+ C_BOOLEAN = boolean
+ C_TINYINT = tinyint
+ C_SMALLINT = smallint
+ C_INT = int
+ C_BIGINT = bigint
+ C_FLOAT = float
+ C_DOUBLE = double
+ C_BYTES = bytes
+ C_DATE = date
+ C_DECIMAL = "decimal(38, 18)"
+ C_TIMESTAMP = timestamp
+ }
+ }
+ }
+ },
+ {
+ bucket = "oss://whale-ops"
+ access_key = "xxxxxxxxxxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxxxx"
+ endpoint = "https://oss-accelerate.aliyuncs.com"
+ path = "/test/seatunnel/read/json"
+ file_format_type = "json"
+ schema = {
+ table = "fake02"
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ c_row = {
+ C_MAP = "map"
+ C_ARRAY = "array"
+ C_STRING = string
+ C_BOOLEAN = boolean
+ C_TINYINT = tinyint
+ C_SMALLINT = smallint
+ C_INT = int
+ C_BIGINT = bigint
+ C_FLOAT = float
+ C_DOUBLE = double
+ C_BYTES = bytes
+ C_DATE = date
+ C_DECIMAL = "decimal(38, 18)"
+ C_TIMESTAMP = timestamp
+ }
+ }
+ }
+ }
+ ]
+ result_table_name = "fake"
+ }
+}
+
+sink {
+ Assert {
+ rules {
+ table-names = ["fake01", "fake02"]
+ }
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add OSS File Source Connector
+
+### 2.3.0-beta 2022-10-20
+
+- [BugFix] Fix the bug of incorrect path in windows environment ([2980](https://github.com/apache/seatunnel/pull/2980))
+- [Improve] Support extract partition from SeaTunnelRow fields ([3085](https://github.com/apache/seatunnel/pull/3085))
+- [Improve] Support parse field from file path ([2985](https://github.com/apache/seatunnel/pull/2985))
+
+### Tips
+
+> 1.[SeaTunnel Deployment Document](../../start-v2/locally/deployment.md).
+
diff --git a/docs/zh/connector-v2/source/OssJindoFile.md b/docs/zh/connector-v2/source/OssJindoFile.md
new file mode 100644
index 00000000000..27b710cfb8a
--- /dev/null
+++ b/docs/zh/connector-v2/source/OssJindoFile.md
@@ -0,0 +1,312 @@
+# OssJindoFile
+
+> OssJindo file source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+Read all the data in a split in a pollNext call. What splits are read will be saved in snapshot.
+
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Description
+
+Read data from aliyun oss file system using jindo api.
+
+:::tip
+
+You need to download [jindosdk-4.6.1.tar.gz](https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/4.6.1/jindosdk-4.6.1.tar.gz)
+and then unzip it, copy jindo-sdk-4.6.1.jar and jindo-core-4.6.1.jar from lib to ${SEATUNNEL_HOME}/lib.
+
+If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+
+If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+We made some trade-offs in order to support more file types, so we used the HDFS protocol for internal access to OSS and this connector need some hadoop dependencies.
+It only supports hadoop version **2.9.X+**.
+
+:::
+
+## Options
+
+| name | type | required | default value |
+|---------------------------|---------|----------|---------------------|
+| path | string | yes | - |
+| file_format_type | string | yes | - |
+| bucket | string | yes | - |
+| access_key | string | yes | - |
+| access_secret | string | yes | - |
+| endpoint | string | yes | - |
+| read_columns | list | no | - |
+| delimiter/field_delimiter | string | no | \001 |
+| parse_partition_from_path | boolean | no | true |
+| date_format | string | no | yyyy-MM-dd |
+| datetime_format | string | no | yyyy-MM-dd HH:mm:ss |
+| time_format | string | no | HH:mm:ss |
+| skip_header_row_number | long | no | 0 |
+| schema | config | no | - |
+| sheet_name | string | no | - |
+| file_filter_pattern | string | no | - |
+| compress_codec | string | no | none |
+| common-options | | no | - |
+
+### path [string]
+
+The source file path.
+
+### file_format_type [string]
+
+File type, supported as the following file types:
+
+`text` `csv` `parquet` `orc` `json` `excel`
+
+If you assign file type to `json`, you should also assign schema option to tell connector how to parse data to the row you want.
+
+For example:
+
+upstream data is the following:
+
+```json
+
+{"code": 200, "data": "get success", "success": true}
+
+```
+
+You can also save multiple pieces of data in one file and split them by newline:
+
+```json lines
+
+{"code": 200, "data": "get success", "success": true}
+{"code": 300, "data": "get failed", "success": false}
+
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+If you assign file type to `parquet` `orc`, schema option not required, connector can find the schema of upstream data automatically.
+
+If you assign file type to `text` `csv`, you can choose to specify the schema information or not.
+
+For example, upstream data is the following:
+
+```text
+
+tyrantlucifer#26#male
+
+```
+
+If you do not assign data schema connector will treat the upstream data as the following:
+
+| content |
+|-----------------------|
+| tyrantlucifer#26#male |
+
+If you assign data schema, you should also assign the option `field_delimiter` too except CSV file type
+
+you should assign schema and delimiter as the following:
+
+```hocon
+
+field_delimiter = "#"
+schema {
+ fields {
+ name = string
+ age = int
+ gender = string
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| name | age | gender |
+|---------------|-----|--------|
+| tyrantlucifer | 26 | male |
+
+### bucket [string]
+
+The bucket address of oss file system, for example: `oss://tyrantlucifer-image-bed`
+
+### access_key [string]
+
+The access key of oss file system.
+
+### access_secret [string]
+
+The access secret of oss file system.
+
+### endpoint [string]
+
+The endpoint of oss file system.
+
+### read_columns [list]
+
+The read column list of the data source, user can use it to implement field projection.
+
+### delimiter/field_delimiter [string]
+
+**delimiter** parameter will deprecate after version 2.3.5, please use **field_delimiter** instead.
+
+Only need to be configured when file_format is text.
+
+Field delimiter, used to tell connector how to slice and dice fields.
+
+default `\001`, the same as hive's default delimiter
+
+### parse_partition_from_path [boolean]
+
+Control whether parse the partition keys and values from file path
+
+For example if you read a file from path `oss://hadoop-cluster/tmp/seatunnel/parquet/name=tyrantlucifer/age=26`
+
+Every record data from file will be added these two fields:
+
+| name | age |
+|---------------|-----|
+| tyrantlucifer | 26 |
+
+Tips: **Do not define partition fields in schema option**
+
+### date_format [string]
+
+Date type format, used to tell connector how to convert string to date, supported as the following formats:
+
+`yyyy-MM-dd` `yyyy.MM.dd` `yyyy/MM/dd`
+
+default `yyyy-MM-dd`
+
+### datetime_format [string]
+
+Datetime type format, used to tell connector how to convert string to datetime, supported as the following formats:
+
+`yyyy-MM-dd HH:mm:ss` `yyyy.MM.dd HH:mm:ss` `yyyy/MM/dd HH:mm:ss` `yyyyMMddHHmmss`
+
+default `yyyy-MM-dd HH:mm:ss`
+
+### time_format [string]
+
+Time type format, used to tell connector how to convert string to time, supported as the following formats:
+
+`HH:mm:ss` `HH:mm:ss.SSS`
+
+default `HH:mm:ss`
+
+### skip_header_row_number [long]
+
+Skip the first few lines, but only for the txt and csv.
+
+For example, set like following:
+
+`skip_header_row_number = 2`
+
+then SeaTunnel will skip the first 2 lines from source files
+
+### schema [config]
+
+Only need to be configured when the file_format_type are text, json, excel or csv ( Or other format we can't read the schema from metadata).
+
+#### fields [Config]
+
+The schema of upstream data.
+
+### sheet_name [string]
+
+Only need to be configured when file_format is excel.
+
+Reader the sheet of the workbook.
+
+### file_filter_pattern [string]
+
+Filter pattern, which used for filtering files.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc/parquet:
+ automatically recognizes the compression type, no additional settings required.
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details.
+
+## Example
+
+```hocon
+
+OssJindoFile {
+ path = "/seatunnel/orc"
+ bucket = "oss://tyrantlucifer-image-bed"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxxxxxxx"
+ endpoint = "oss-cn-beijing.aliyuncs.com"
+ file_format_type = "orc"
+ }
+
+```
+
+```hocon
+
+OssJindoFile {
+ path = "/seatunnel/json"
+ bucket = "oss://tyrantlucifer-image-bed"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ access_secret = "xxxxxxxxxxxxxxxxxxxxxx"
+ endpoint = "oss-cn-beijing.aliyuncs.com"
+ file_format_type = "json"
+ schema {
+ fields {
+ id = int
+ name = string
+ }
+ }
+ }
+
+```
+
+## Changelog
+
+### next version
+
+- Add OSS Jindo File Source Connector
+
diff --git a/docs/zh/connector-v2/source/Paimon.md b/docs/zh/connector-v2/source/Paimon.md
new file mode 100644
index 00000000000..eb83e3bb429
--- /dev/null
+++ b/docs/zh/connector-v2/source/Paimon.md
@@ -0,0 +1,60 @@
+# Paimon
+
+> Paimon source connector
+
+## Description
+
+Read data from Apache Paimon.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|----------------|--------|----------|---------------|
+| warehouse | String | Yes | - |
+| database | String | Yes | - |
+| table | String | Yes | - |
+| hdfs_site_path | String | No | - |
+
+### warehouse [string]
+
+Paimon warehouse path
+
+### database [string]
+
+The database you want to access
+
+### table [string]
+
+The table you want to access
+
+### hdfs_site_path [string]
+
+The file path of `hdfs-site.xml`
+
+## Examples
+
+```hocon
+source {
+ Paimon {
+ warehouse = "/tmp/paimon"
+ database = "default"
+ table = "st_test"
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Paimon Source Connector
+
diff --git a/docs/zh/connector-v2/source/Persistiq.md b/docs/zh/connector-v2/source/Persistiq.md
new file mode 100644
index 00000000000..c308efbb389
--- /dev/null
+++ b/docs/zh/connector-v2/source/Persistiq.md
@@ -0,0 +1,300 @@
+# Persistiq
+
+> Persistiq source connector
+
+## Description
+
+Used to read data from Persistiq.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [schema projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-----------------------------|---------|----------|---------------|
+| url | String | Yes | - |
+| password | String | Yes | - |
+| method | String | No | get |
+| schema | Config | No | - |
+| schema.fields | Config | No | - |
+| format | String | No | json |
+| params | Map | No | - |
+| body | String | No | - |
+| json_field | Config | No | - |
+| content_json | String | No | - |
+| poll_interval_millis | int | No | - |
+| retry | int | No | - |
+| retry_backoff_multiplier_ms | int | No | 100 |
+| retry_backoff_max_ms | int | No | 10000 |
+| enable_multi_lines | boolean | No | false |
+| common-options | config | No | - |
+
+### url [String]
+
+http request url
+
+### password [String]
+
+API key for login, you can get it at Persistiq website
+
+### method [String]
+
+http request method, only supports GET, POST method
+
+### params [Map]
+
+http params
+
+### body [String]
+
+http body
+
+### poll_interval_millis [int]
+
+request http api interval(millis) in stream mode
+
+### retry [int]
+
+The max retry times if request http return to `IOException`
+
+### retry_backoff_multiplier_ms [int]
+
+The retry-backoff times(millis) multiplier if request http failed
+
+### retry_backoff_max_ms [int]
+
+The maximum retry-backoff times(millis) if request http failed
+
+### format [String]
+
+the format of upstream data, now only support `json` `text`, default `json`.
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+{
+ "code": 200,
+ "data": "get success",
+ "success": true
+}
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### schema [Config]
+
+#### fields [Config]
+
+the schema fields of upstream data
+
+### content_json [String]
+
+This parameter can get some json data.If you only need the data in the 'book' section, configure `content_field = "$.store.book.*"`.
+
+If your return data looks something like this.
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can configure `content_field = "$.store.book.*"` and the result returned looks like this:
+
+```json
+[
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+]
+```
+
+Then you can get the desired result with a simpler schema,like
+
+```hocon
+Http {
+ url = "http://example.com/xyz"
+ method = "GET"
+ format = "json"
+ content_field = "$.store.book.*"
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+}
+```
+
+Here is an example:
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_contentjson_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_contentjson_to_assert.conf).
+
+### json_field [Config]
+
+This parameter helps you configure the schema,so this parameter must be used with schema.
+
+If your data looks something like this:
+
+```json
+{
+ "store": {
+ "book": [
+ {
+ "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ {
+ "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ },
+ "expensive": 10
+}
+```
+
+You can get the contents of 'book' by configuring the task as follows:
+
+```hocon
+source {
+ Http {
+ url = "http://example.com/xyz"
+ method = "GET"
+ format = "json"
+ json_field = {
+ category = "$.store.book[*].category"
+ author = "$.store.book[*].author"
+ title = "$.store.book[*].title"
+ price = "$.store.book[*].price"
+ }
+ schema = {
+ fields {
+ category = string
+ author = string
+ title = string
+ price = string
+ }
+ }
+ }
+}
+```
+
+- Test data can be found at this link [mockserver-config.json](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/mockserver-config.json)
+- See this link for task configuration [http_jsonpath_to_assert.conf](../../../../seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/resources/http_jsonpath_to_assert.conf).
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+```hocon
+Persistiq{
+ url = "https://api.persistiq.com/v1/users"
+ password = "Your password"
+ content_field = "$.users.*"
+ schema = {
+ fields {
+ id = string
+ name = string
+ email = string
+ activated = boolean
+ default_mailbox_id = string
+ salesforce_id = string
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Persistiq Source Connector
+
diff --git a/docs/zh/connector-v2/source/Phoenix.md b/docs/zh/connector-v2/source/Phoenix.md
new file mode 100644
index 00000000000..78dafe92517
--- /dev/null
+++ b/docs/zh/connector-v2/source/Phoenix.md
@@ -0,0 +1,68 @@
+# Phoenix
+
+> Phoenix source connector
+
+## Description
+
+Read Phoenix data through [Jdbc connector](Jdbc.md).
+Support Batch mode and Streaming mode. The tested Phoenix version is 4.xx and 5.xx
+On the underlying implementation, through the jdbc driver of Phoenix, execute the upsert statement to write data to HBase.
+Two ways of connecting Phoenix with Java JDBC. One is to connect to zookeeper through JDBC, and the other is to connect to queryserver through JDBC thin client.
+
+> Tips: By default, the (thin) driver jar is used. If you want to use the (thick) driver or other versions of Phoenix (thin) driver, you need to recompile the jdbc connector module
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+
+supports query SQL and can achieve projection effect.
+
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+### driver [string]
+
+if you use phoenix (thick) driver the value is `org.apache.phoenix.jdbc.PhoenixDriver` or you use (thin) driver the value is `org.apache.phoenix.queryserver.client.Driver`
+
+### url [string]
+
+if you use phoenix (thick) driver the value is `jdbc:phoenix:localhost:2182/hbase` or you use (thin) driver the value is `jdbc:phoenix:thin:url=http://localhost:8765;serialization=PROTOBUF`
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+use thick client drive
+
+```
+ Jdbc {
+ driver = org.apache.phoenix.jdbc.PhoenixDriver
+ url = "jdbc:phoenix:localhost:2182/hbase"
+ query = "select age, name from test.source"
+ }
+
+```
+
+use thin client drive
+
+```
+Jdbc {
+ driver = org.apache.phoenix.queryserver.client.Driver
+ url = "jdbc:phoenix:thin:url=http://spark_e2e_phoenix_sink:8765;serialization=PROTOBUF"
+ query = "select age, name from test.source"
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Phoenix Source Connector
+
diff --git a/docs/zh/connector-v2/source/Postgre-CDC.md b/docs/zh/connector-v2/source/Postgre-CDC.md
new file mode 100644
index 00000000000..2613d5ee6b7
--- /dev/null
+++ b/docs/zh/connector-v2/source/Postgre-CDC.md
@@ -0,0 +1,196 @@
+# Postgre CDC
+
+> Postgre CDC source connector
+
+## Support Those Engines
+
+> SeaTunnel Zeta
+> Flink
+
+## Key features
+
+- [ ] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+The Postgre CDC connector allows for reading snapshot data and incremental data from Postgre database. This document
+describes how to set up the Postgre CDC connector to run SQL queries against Postgre databases.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|------------------------------------------------------------|-----------------------|---------------------------------------|--------------------------------------------------------------------------|
+| PostgreSQL | Different dependency version has different driver class. | org.postgresql.Driver | jdbc:postgresql://localhost:5432/test | [Download](https://mvnrepository.com/artifact/org.postgresql/postgresql) |
+| PostgreSQL | If you want to manipulate the GEOMETRY type in PostgreSQL. | org.postgresql.Driver | jdbc:postgresql://localhost:5432/test | [Download](https://mvnrepository.com/artifact/net.postgis/postgis-jdbc) |
+
+## Using Dependency
+
+### Install Jdbc Driver
+
+#### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/org.postgresql/postgresql) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+#### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/org.postgresql/postgresql) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+Please download and put Postgre driver in `${SEATUNNEL_HOME}/lib/` dir. For example: cp postgresql-xxx.jar `$SEATNUNNEL_HOME/lib/`
+
+> Here are the steps to enable CDC (Change Data Capture) in PostgreSQL:
+
+1. Ensure the wal_level is set to logical: Modify the postgresql.conf configuration file by adding "wal_level = logical",
+ restart the PostgreSQL server for the changes to take effect.
+ Alternatively, you can use SQL commands to modify the configuration directly:
+
+```sql
+ALTER SYSTEM SET wal_level TO 'logical';
+SELECT pg_reload_conf();
+```
+
+2. Change the REPLICA policy of the specified table to FULL
+
+```sql
+ALTER TABLE your_table_name REPLICA IDENTITY FULL;
+```
+
+## Data Type Mapping
+
+| PostgreSQL Data type | SeaTunnel Data type |
+|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|
+| BOOL | BOOLEAN |
+| _BOOL | ARRAY<BOOLEAN> |
+| BYTEA | BYTES |
+| _BYTEA | ARRAY<TINYINT> |
+| INT2 SMALLSERIAL INT4 SERIAL | INT |
+| _INT2 _INT4 | ARRAY<INT> |
+| INT8 BIGSERIAL | BIGINT |
+| _INT8 | ARRAY<BIGINT> |
+| FLOAT4 | FLOAT |
+| _FLOAT4 | ARRAY<FLOAT> |
+| FLOAT8 | DOUBLE |
+| _FLOAT8 | ARRAY<DOUBLE> |
+| NUMERIC(Get the designated column's specified column size>0) | DECIMAL(Get the designated column's specified column size,Gets the number of digits in the specified column to the right of the decimal point) |
+| NUMERIC(Get the designated column's specified column size<0) | DECIMAL(38, 18) |
+| BPCHAR CHARACTER VARCHAR TEXT GEOMETRY GEOGRAPHY JSON JSONB | STRING |
+| _BPCHAR _CHARACTER _VARCHAR _TEXT | ARRAY<STRING> |
+| TIMESTAMP | TIMESTAMP |
+| TIME | TIME |
+| DATE | DATE |
+| OTHER DATA TYPES | NOT SUPPORTED YET |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------------------------|----------|----------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| base-url | String | Yes | - | The URL of the JDBC connection. Refer to a case: `jdbc:postgresql://localhost:5432/postgres_cdc?loggerLevel=OFF`. |
+| username | String | Yes | - | Name of the database to use when connecting to the database server. |
+| password | String | Yes | - | Password to use when connecting to the database server. |
+| database-names | List | No | - | Database name of the database to monitor. |
+| table-names | List | Yes | - | Table name of the database to monitor. The table name needs to include the database name, for example: `database_name.table_name` |
+| table-names-config | List | No | - | Table config list. for example: [{"table": "db1.schema1.table1","primaryKeys":["key1"]}] |
+| startup.mode | Enum | No | INITIAL | Optional startup mode for Postgre CDC consumer, valid enumerations are `initial`, `earliest`, `latest` and `specific`. `initial`: Synchronize historical data at startup, and then synchronize incremental data. `earliest`: Startup from the earliest offset possible. `latest`: Startup from the latest offset. `specific`: Startup from user-supplied specific offsets. |
+| snapshot.split.size | Integer | No | 8096 | The split size (number of rows) of table snapshot, captured tables are split into multiple splits when read the snapshot of table. |
+| snapshot.fetch.size | Integer | No | 1024 | The maximum fetch size for per poll when read table snapshot. |
+| slot.name | String | No | - | 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. Default is seatunnel. |
+| decoding.plugin.name | String | No | pgoutput | 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. |
+| server-time-zone | String | No | UTC | The session time zone in database server. If not set, then ZoneId.systemDefault() is used to determine the server time zone. |
+| connect.timeout.ms | Duration | No | 30000 | The maximum time that the connector should wait after trying to connect to the database server before timing out. |
+| connect.max-retries | Integer | No | 3 | The max retry times that the connector should retry to build database server connection. |
+| connection.pool.size | Integer | No | 20 | The jdbc connection pool size. |
+| chunk-key.even-distribution.factor.upper-bound | Double | No | 100 | The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0. |
+| chunk-key.even-distribution.factor.lower-bound | Double | No | 0.05 | The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05. |
+| sample-sharding.threshold | Integer | No | 1000 | This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards. |
+| inverse-sampling.rate | Integer | No | 1000 | The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000. |
+| exactly_once | Boolean | No | false | Enable exactly once semantic. |
+| format | Enum | No | DEFAULT | Optional output format for Postgre CDC, valid enumerations are `DEFAULT`、`COMPATIBLE_DEBEZIUM_JSON`. |
+| debezium | Config | No | - | Pass-through [Debezium's properties](https://github.com/debezium/debezium/blob/1.6/documentation/modules/ROOT/pages/connectors/postgresql.adoc#connector-configuration-properties) to Debezium Embedded Engine which is used to capture data changes from Postgre server. |
+| common-options | | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Task Example
+
+### Simple
+
+> Support multi-table reading
+
+```
+
+
+env {
+ # You can set engine configuration here
+ execution.parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 5000
+ read_limit.bytes_per_second=7000000
+ read_limit.rows_per_second=400
+}
+
+source {
+ Postgres-CDC {
+ result_table_name = "customers_Postgre_cdc"
+ username = "postgres"
+ password = "postgres"
+ database-names = ["postgres_cdc"]
+ schema-names = ["inventory"]
+ table-names = ["postgres_cdc.inventory.postgres_cdc_table_1,postgres_cdc.inventory.postgres_cdc_table_2"]
+ base-url = "jdbc:postgresql://postgres_cdc_e2e:5432/postgres_cdc?loggerLevel=OFF"
+ }
+}
+
+transform {
+
+}
+
+sink {
+ jdbc {
+ source_table_name = "customers_Postgre_cdc"
+ url = "jdbc:postgresql://postgres_cdc_e2e:5432/postgres_cdc?loggerLevel=OFF"
+ driver = "org.postgresql.Driver"
+ user = "postgres"
+ password = "postgres"
+
+ generate_sink_sql = true
+ # You need to configure both database and table
+ database = postgres_cdc
+ chema = "inventory"
+ tablePrefix = "sink_"
+ primary_keys = ["id"]
+ }
+}
+```
+
+### Support custom primary key for table
+
+```
+source {
+ Postgres-CDC {
+ result_table_name = "customers_mysql_cdc"
+ username = "postgres"
+ password = "postgres"
+ database-names = ["postgres_cdc"]
+ schema-names = ["inventory"]
+ table-names = ["postgres_cdc.inventory.full_types_no_primary_key"]
+ base-url = "jdbc:postgresql://postgres_cdc_e2e:5432/postgres_cdc?loggerLevel=OFF"
+ decoding.plugin.name = "decoderbufs"
+ exactly_once = false
+ table-names-config = [
+ {
+ table = "postgres_cdc.inventory.full_types_no_primary_key"
+ primaryKeys = ["id"]
+ }
+ ]
+ }
+}
+```
+
+## Changelog
+
+- Add Postgre CDC Source Connector
+
+### next version
+
diff --git a/docs/zh/connector-v2/source/PostgreSQL.md b/docs/zh/connector-v2/source/PostgreSQL.md
new file mode 100644
index 00000000000..ab5436107e5
--- /dev/null
+++ b/docs/zh/connector-v2/source/PostgreSQL.md
@@ -0,0 +1,322 @@
+# PostgreSQL
+
+> JDBC PostgreSQL Source Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/org.postgresql/postgresql) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/org.postgresql/postgresql) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+> supports query SQL and can achieve projection effect.
+
+## Description
+
+Read external data source data through JDBC.
+
+## Supported DataSource Info
+
+| Datasource | Supported Versions | Driver | Url | Maven |
+|------------|------------------------------------------------------------|-----------------------|---------------------------------------|--------------------------------------------------------------------------|
+| PostgreSQL | Different dependency version has different driver class. | org.postgresql.Driver | jdbc:postgresql://localhost:5432/test | [Download](https://mvnrepository.com/artifact/org.postgresql/postgresql) |
+| PostgreSQL | If you want to manipulate the GEOMETRY type in PostgreSQL. | org.postgresql.Driver | jdbc:postgresql://localhost:5432/test | [Download](https://mvnrepository.com/artifact/net.postgis/postgis-jdbc) |
+
+## Database Dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example PostgreSQL datasource: cp postgresql-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+> If you want to manipulate the GEOMETRY type in PostgreSQL, add postgresql-xxx.jar and postgis-jdbc-xxx.jar to $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| PostgreSQL Data type | SeaTunnel Data type |
+|--------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|
+| BOOL | BOOLEAN |
+| _BOOL | ARRAY<BOOLEAN> |
+| BYTEA | BYTES |
+| _BYTEA | ARRAY<TINYINT> |
+| INT2 SMALLSERIAL INT4 SERIAL | INT |
+| _INT2 _INT4 | ARRAY<INT> |
+| INT8 BIGSERIAL | BIGINT |
+| _INT8 | ARRAY<BIGINT> |
+| FLOAT4 | FLOAT |
+| _FLOAT4 | ARRAY<FLOAT> |
+| FLOAT8 | DOUBLE |
+| _FLOAT8 | ARRAY<DOUBLE> |
+| NUMERIC(Get the designated column's specified column size>0) | DECIMAL(Get the designated column's specified column size,Gets the number of digits in the specified column to the right of the decimal point) |
+| NUMERIC(Get the designated column's specified column size<0) | DECIMAL(38, 18) |
+| BPCHAR CHARACTER VARCHAR TEXT GEOMETRY GEOGRAPHY JSON JSONB UUID | STRING |
+| _BPCHAR _CHARACTER _VARCHAR _TEXT | ARRAY<STRING> |
+| TIMESTAMP | TIMESTAMP |
+| TIME | TIME |
+| DATE | DATE |
+| OTHER DATA TYPES | NOT SUPPORTED YET |
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------|------------|----------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:postgresql://localhost:5432/test |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use PostgreSQL the value is `org.postgresql.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type,Only support numeric type primary key, and only can config one column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. default value is job parallelism |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects,you can configure the row fetch size used in the query toimprove performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+
+| Name | Type | Required | Default | Description |
+|--------------------------------------------|------------|----------|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:mysql://localhost:3306:3306/test |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use MySQL the value is `com.mysql.cj.jdbc.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type,Only support numeric type primary key, and only can config one column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. default value is job parallelism |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects,you can configure the row fetch size used in the query toimprove performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| table_path | Int | No | 0 | The path to the full path of table, you can use this configuration instead of `query`. examples: mysql: "testdb.table1" oracle: "test_schema.table1" sqlserver: "testdb.test_schema.table1" postgresql: "testdb.test_schema.table1" |
+| table_list | Array | No | 0 | The list of tables to be read, you can use this configuration instead of `table_path` example: ```[{ table_path = "testdb.table1"}, {table_path = "testdb.table2", query = "select * id, name from testdb.table2"}]``` |
+| where_condition | String | No | - | Common row filter conditions for all tables/queries, must start with `where`. for example `where id > 100` |
+| split.size | Int | No | 8096 | The split size (number of rows) of table, captured tables are split into multiple splits when read of table. |
+| split.even-distribution.factor.lower-bound | Double | No | 0.05 | The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05. |
+| split.even-distribution.factor.upper-bound | Double | No | 100 | The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0. |
+| split.sample-sharding.threshold | Int | No | 10000 | This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards. |
+| split.inverse-sampling.rate | Int | No | 1000 | The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Parallel Reader
+
+The JDBC Source connector supports parallel reading of data from tables. SeaTunnel will use certain rules to split the data in the table, which will be handed over to readers for reading. The number of readers is determined by the `parallelism` option.
+
+**Split Key Rules:**
+
+1. If `partition_column` is not null, It will be used to calculate split. The column must in **Supported split data type**.
+2. If `partition_column` is null, seatunnel will read the schema from table and get the Primary Key and Unique Index. If there are more than one column in Primary Key and Unique Index, The first column which in the **supported split data type** will be used to split data. For example, the table have Primary Key(nn guid, name varchar), because `guid` id not in **supported split data type**, so the column `name` will be used to split data.
+
+**Supported split data type:**
+* String
+* Number(int, bigint, decimal, ...)
+* Date
+
+### Options Related To Split
+
+#### split.size
+
+How many rows in one split, captured tables are split into multiple splits when read of table.
+
+#### split.even-distribution.factor.lower-bound
+
+> Not recommended for use
+
+The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05.
+
+#### split.even-distribution.factor.upper-bound
+
+> Not recommended for use
+
+The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0.
+
+#### split.sample-sharding.threshold
+
+This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards.
+
+#### split.inverse-sampling.rate
+
+The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000.
+
+#### partition_column [string]
+
+The column name for split data.
+
+#### partition_upper_bound [BigDecimal]
+
+The partition_column max value for scan, if not set SeaTunnel will query database get max value.
+
+#### partition_lower_bound [BigDecimal]
+
+The partition_column min value for scan, if not set SeaTunnel will query database get min value.
+
+#### partition_num [int]
+
+> Not recommended for use, The correct approach is to control the number of split through `split.size`
+
+How many splits do we need to split into, only support positive integer. default value is job parallelism.
+
+## tips
+
+> If the table can not be split(for example, table have no Primary Key or Unique Index, and `partition_column` is not set), it will run in single concurrency.
+>
+> Use `table_path` to replace `query` for single table reading. If you need to read multiple tables, use `table_list`.
+
+## Task Example
+
+### Simple:
+
+> This example queries type_bin 'table' 16 data in your test "database" in single parallel and queries all of its fields. You can also specify which fields to query for final output to the console.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 4
+ job.mode = "BATCH"
+}
+
+source{
+ Jdbc {
+ url = "jdbc:postgresql://localhost:5432/test"
+ driver = "org.postgresql.Driver"
+ user = "root"
+ password = "test"
+ query = "select * from source limit 16"
+ }
+}
+
+transform {
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+### parallel by partition_column
+
+> Read your query table in parallel with the shard field you configured and the shard data You can do this if you want to read the whole table
+
+```
+env {
+ parallelism = 4
+ job.mode = "BATCH"
+}
+source{
+ jdbc{
+ url = "jdbc:postgresql://localhost:5432/test"
+ driver = "org.postgresql.Driver"
+ user = "root"
+ password = "test"
+ query = "select * from source"
+ partition_column= "id"
+ partition_num = 5
+ }
+}
+sink {
+ Console {}
+}
+```
+
+### parallel by Primary Key or Unique Index
+
+> Configuring `table_path` will turn on auto split, you can configure `split.*` to adjust the split strategy
+
+```
+env {
+ parallelism = 4
+ job.mode = "BATCH"
+}
+source {
+ Jdbc {
+ url = "jdbc:postgresql://localhost:5432/test"
+ driver = "org.postgresql.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ table_path = "test.public.AllDataType_1"
+ query = "select * from public.AllDataType_1"
+ split.size = 10000
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
+### Parallel Boundary:
+
+> It is more efficient to specify the data within the upper and lower bounds of the query It is more efficient to read your data source according to the upper and lower boundaries you configured
+
+```
+source{
+ jdbc{
+ url = "jdbc:postgresql://localhost:5432/test"
+ driver = "org.postgresql.Driver"
+ user = "root"
+ password = "test"
+ query = "select * from source"
+ partition_column= "id"
+
+ # The name of the table returned
+ result_table_name = "jdbc"
+ partition_lower_bound = 1
+ partition_upper_bound = 50
+ partition_num = 5
+ }
+}
+```
+
+### Multiple table read:
+
+***Configuring `table_list` will turn on auto split, you can configure `split.*` to adjust the split strategy***
+
+```hocon
+env {
+ job.mode = "BATCH"
+ parallelism = 4
+}
+source {
+ Jdbc {
+ url="jdbc:postgresql://datasource01:5432/demo"
+ user="iDm82k6Q0Tq+wUprWnPsLQ=="
+ driver="org.postgresql.Driver"
+ password="iDm82k6Q0Tq+wUprWnPsLQ=="
+ "table_list"=[
+ {
+ "table_path"="demo.public.AllDataType_1"
+ },
+ {
+ "table_path"="demo.public.alldatatype"
+ }
+ ]
+ #where_condition= "where id > 100"
+ split.size = 10000
+ #split.even-distribution.factor.upper-bound = 100
+ #split.even-distribution.factor.lower-bound = 0.05
+ #split.sample-sharding.threshold = 1000
+ #split.inverse-sampling.rate = 1000
+ }
+}
+
+sink {
+ Console {}
+}
+```
+
diff --git a/docs/zh/connector-v2/source/Pulsar.md b/docs/zh/connector-v2/source/Pulsar.md
new file mode 100644
index 00000000000..e4ddea679ad
--- /dev/null
+++ b/docs/zh/connector-v2/source/Pulsar.md
@@ -0,0 +1,164 @@
+# Apache Pulsar
+
+> Apache Pulsar source connector
+
+## Description
+
+Source connector for Apache Pulsar.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|--------------------------|---------|----------|---------------|
+| topic | String | No | - |
+| topic-pattern | String | No | - |
+| topic-discovery.interval | Long | No | -1 |
+| subscription.name | String | Yes | - |
+| client.service-url | String | Yes | - |
+| admin.service-url | String | Yes | - |
+| auth.plugin-class | String | No | - |
+| auth.params | String | No | - |
+| poll.timeout | Integer | No | 100 |
+| poll.interval | Long | No | 50 |
+| poll.batch.size | Integer | No | 500 |
+| cursor.startup.mode | Enum | No | LATEST |
+| cursor.startup.timestamp | Long | No | - |
+| cursor.reset.mode | Enum | No | LATEST |
+| cursor.stop.mode | Enum | No | NEVER |
+| cursor.stop.timestamp | Long | No | - |
+| schema | config | No | - |
+| common-options | | no | - |
+| format | String | no | json |
+
+### topic [String]
+
+Topic name(s) to read data from when the table is used as source. It also supports topic list for source by separating topic by semicolon like 'topic-1;topic-2'.
+
+**Note, only one of "topic-pattern" and "topic" can be specified for sources.**
+
+### topic-pattern [String]
+
+The regular expression for a pattern of topic names to read from. All topics with names that match the specified regular expression will be subscribed by the consumer when the job starts running.
+
+**Note, only one of "topic-pattern" and "topic" can be specified for sources.**
+
+### topic-discovery.interval [Long]
+
+The interval (in ms) for the Pulsar source to discover the new topic partitions. A non-positive value disables the topic partition discovery.
+
+**Note, This option only works if the 'topic-pattern' option is used.**
+
+### subscription.name [String]
+
+Specify the subscription name for this consumer. This argument is required when constructing the consumer.
+
+### client.service-url [String]
+
+Service URL provider for Pulsar service.
+To connect to Pulsar using client libraries, you need to specify a Pulsar protocol URL.
+You can assign Pulsar protocol URLs to specific clusters and use the Pulsar scheme.
+
+For example, `localhost`: `pulsar://localhost:6650,localhost:6651`.
+
+### admin.service-url [String]
+
+The Pulsar service HTTP URL for the admin endpoint.
+
+For example, `http://my-broker.example.com:8080`, or `https://my-broker.example.com:8443` for TLS.
+
+### auth.plugin-class [String]
+
+Name of the authentication plugin.
+
+### auth.params [String]
+
+Parameters for the authentication plugin.
+
+For example, `key1:val1,key2:val2`
+
+### poll.timeout [Integer]
+
+The maximum time (in ms) to wait when fetching records. A longer time increases throughput but also latency.
+
+### poll.interval [Long]
+
+The interval time(in ms) when fetcing records. A shorter time increases throughput, but also increases CPU load.
+
+### poll.batch.size [Integer]
+
+The maximum number of records to fetch to wait when polling. A longer time increases throughput but also latency.
+
+### cursor.startup.mode [Enum]
+
+Startup mode for Pulsar consumer, valid values are `'EARLIEST'`, `'LATEST'`, `'SUBSCRIPTION'`, `'TIMESTAMP'`.
+
+### cursor.startup.timestamp [Long]
+
+Start from the specified epoch timestamp (in milliseconds).
+
+**Note, This option is required when the "cursor.startup.mode" option used `'TIMESTAMP'`.**
+
+### cursor.reset.mode [Enum]
+
+Cursor reset strategy for Pulsar consumer valid values are `'EARLIEST'`, `'LATEST'`.
+
+**Note, This option only works if the "cursor.startup.mode" option used `'SUBSCRIPTION'`.**
+
+### cursor.stop.mode [String]
+
+Stop mode for Pulsar consumer, valid values are `'NEVER'`, `'LATEST'`and `'TIMESTAMP'`.
+
+**Note, When `'NEVER' `is specified, it is a real-time job, and other mode are off-line jobs.**
+
+### cursor.stop.timestamp [Long]
+
+Stop from the specified epoch timestamp (in milliseconds).
+
+**Note, This option is required when the "cursor.stop.mode" option used `'TIMESTAMP'`.**
+
+### schema [Config]
+
+The structure of the data, including field names and field types.
+reference to [Schema-Feature](../../concept/schema-feature.md)
+
+## format [String]
+
+Data format. The default format is json, reference [formats](../formats).
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details.
+
+## Example
+
+```Jdbc {
+source {
+ Pulsar {
+ topic = "example"
+ subscription.name = "seatunnel"
+ client.service-url = "pulsar://localhost:6650"
+ admin.service-url = "http://my-broker.example.com:8080"
+ result_table_name = "test"
+ }
+}
+```
+
+## Changelog
+
+### 2.3.0-beta 2022-10-20
+
+- Add Pulsar Source Connector
+
+### next version
+
+- [Feature] Add Pulsar canal-format and e2e ([4111](https://github.com/apache/seatunnel/pull/4111))
+
diff --git a/docs/zh/connector-v2/source/Rabbitmq.md b/docs/zh/connector-v2/source/Rabbitmq.md
new file mode 100644
index 00000000000..5c5bc036852
--- /dev/null
+++ b/docs/zh/connector-v2/source/Rabbitmq.md
@@ -0,0 +1,159 @@
+# Rabbitmq
+
+> Rabbitmq source connector
+
+## Description
+
+Used to read data from Rabbitmq.
+
+## Key features
+
+- [ ] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+:::tip
+The source must be non-parallel (parallelism set to 1) in order to achieve exactly-once. This limitation is mainly due to RabbitMQ’s approach to dispatching messages from a single queue to multiple consumers.
+
+## Options
+
+| name | type | required | default value |
+|----------------------------|---------|----------|---------------|
+| host | string | yes | - |
+| port | int | yes | - |
+| virtual_host | string | yes | - |
+| username | string | yes | - |
+| password | string | yes | - |
+| queue_name | string | yes | - |
+| schema | config | yes | - |
+| url | string | no | - |
+| routing_key | string | no | - |
+| exchange | string | no | - |
+| network_recovery_interval | int | no | - |
+| topology_recovery_enabled | boolean | no | - |
+| automatic_recovery_enabled | boolean | no | - |
+| connection_timeout | int | no | - |
+| requested_channel_max | int | no | - |
+| requested_frame_max | int | no | - |
+| requested_heartbeat | int | no | - |
+| prefetch_count | int | no | - |
+| delivery_timeout | long | no | - |
+| common-options | | no | - |
+
+### host [string]
+
+the default host to use for connections
+
+### port [int]
+
+the default port to use for connections
+
+### virtual_host [string]
+
+virtual host – the virtual host to use when connecting to the broker
+
+### username [string]
+
+the AMQP user name to use when connecting to the broker
+
+### password [string]
+
+the password to use when connecting to the broker
+
+### url [string]
+
+convenience method for setting the fields in an AMQP URI: host, port, username, password and virtual host
+
+### queue_name [string]
+
+the queue to publish the message to
+
+### routing_key [string]
+
+the routing key to publish the message to
+
+### exchange [string]
+
+the exchange to publish the message to
+
+### schema [Config]
+
+#### fields [Config]
+
+the schema fields of upstream data.
+
+### network_recovery_interval [int]
+
+how long will automatic recovery wait before attempting to reconnect, in ms
+
+### topology_recovery [string]
+
+if true, enables topology recovery
+
+### automatic_recovery [string]
+
+if true, enables connection recovery
+
+### connection_timeout [int]
+
+connection tcp establishment timeout in milliseconds; zero for infinite
+
+### requested_channel_max [int]
+
+initially requested maximum channel number; zero for unlimited
+**Note: Note the value must be between 0 and 65535 (unsigned short in AMQP 0-9-1).
+
+### requested_frame_max [int]
+
+the requested maximum frame size
+
+### requested_heartbeat [int]
+
+Set the requested heartbeat timeout
+**Note: Note the value must be between 0 and 65535 (unsigned short in AMQP 0-9-1).
+
+### prefetch_count [int]
+
+prefetchCount the max number of messages to receive without acknowledgement
+
+### delivery_timeout [long]
+
+deliveryTimeout maximum wait time, in milliseconds, for the next message delivery
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+simple:
+
+```hocon
+source {
+ RabbitMQ {
+ host = "rabbitmq-e2e"
+ port = 5672
+ virtual_host = "/"
+ username = "guest"
+ password = "guest"
+ queue_name = "test"
+ schema = {
+ fields {
+ id = bigint
+ c_map = "map"
+ c_array = "array"
+ }
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add Rabbitmq source Connector
+
diff --git a/docs/zh/connector-v2/source/Redis.md b/docs/zh/connector-v2/source/Redis.md
new file mode 100644
index 00000000000..3029f8061dd
--- /dev/null
+++ b/docs/zh/connector-v2/source/Redis.md
@@ -0,0 +1,268 @@
+# Redis
+
+> Redis source connector
+
+## Description
+
+Used to read data from Redis.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|---------------------|--------|-----------------------|---------------|
+| host | string | yes | - |
+| port | int | yes | - |
+| keys | string | yes | - |
+| data_type | string | yes | - |
+| user | string | no | - |
+| auth | string | no | - |
+| db_num | int | no | 0 |
+| mode | string | no | single |
+| hash_key_parse_mode | string | no | all |
+| nodes | list | yes when mode=cluster | - |
+| schema | config | yes when format=json | - |
+| format | string | no | json |
+| common-options | | no | - |
+
+### host [string]
+
+redis host
+
+### port [int]
+
+redis port
+
+### hash_key_parse_mode [string]
+
+hash key parse mode, support `all` `kv`, used to tell connector how to parse hash key.
+
+when setting it to `all`, connector will treat the value of hash key as a row and use the schema config to parse it, when setting it to `kv`, connector will treat each kv in hash key as a row and use the schema config to parse it:
+
+for example, if the value of hash key is the following shown:
+
+```text
+{
+ "001": {
+ "name": "tyrantlucifer",
+ "age": 26
+ },
+ "002": {
+ "name": "Zongwen",
+ "age": 26
+ }
+}
+
+```
+
+if hash_key_parse_mode is `all` and schema config as the following shown, it will generate the following data:
+
+```hocon
+
+schema {
+ fields {
+ 001 {
+ name = string
+ age = int
+ }
+ 002 {
+ name = string
+ age = int
+ }
+ }
+}
+
+```
+
+| 001 | 002 |
+|---------------------------------|---------------------------|
+| Row(name=tyrantlucifer, age=26) | Row(name=Zongwen, age=26) |
+
+if hash_key_parse_mode is `kv` and schema config as the following shown, it will generate the following data:
+
+```hocon
+
+schema {
+ fields {
+ hash_key = string
+ name = string
+ age = int
+ }
+}
+
+```
+
+| hash_key | name | age |
+|----------|---------------|-----|
+| 001 | tyrantlucifer | 26 |
+| 002 | Zongwen | 26 |
+
+each kv that in hash key it will be treated as a row and send it to upstream.
+
+**Tips: connector will use the first field information of schema config as the field name of each k that in each kv**
+
+### keys [string]
+
+keys pattern
+
+**Tips:Redis source connector support fuzzy key matching, user needs to ensure that the matched keys are the same type**
+
+### data_type [string]
+
+redis data types, support `key` `hash` `list` `set` `zset`
+
+- key
+
+> The value of each key will be sent downstream as a single row of data.
+> For example, the value of key is `SeaTunnel test message`, the data received downstream is `SeaTunnel test message` and only one message will be received.
+
+- hash
+
+> The hash key-value pairs will be formatted as json to be sent downstream as a single row of data.
+> For example, the value of hash is `name:tyrantlucifer age:26`, the data received downstream is `{"name":"tyrantlucifer", "age":"26"}` and only one message will be received.
+
+- list
+
+> Each element in the list will be sent downstream as a single row of data.
+> For example, the value of list is `[tyrantlucier, CalvinKirs]`, the data received downstream are `tyrantlucifer` and `CalvinKirs` and only two message will be received.
+
+- set
+
+> Each element in the set will be sent downstream as a single row of data
+> For example, the value of set is `[tyrantlucier, CalvinKirs]`, the data received downstream are `tyrantlucifer` and `CalvinKirs` and only two message will be received.
+
+- zset
+
+> Each element in the sorted set will be sent downstream as a single row of data
+> For example, the value of sorted set is `[tyrantlucier, CalvinKirs]`, the data received downstream are `tyrantlucifer` and `CalvinKirs` and only two message will be received.
+
+### user [string]
+
+redis authentication user, you need it when you connect to an encrypted cluster
+
+### auth [string]
+
+redis authentication password, you need it when you connect to an encrypted cluster
+
+### db_num [int]
+
+Redis database index ID. It is connected to db 0 by default
+
+### mode [string]
+
+redis mode, `single` or `cluster`, default is `single`
+
+### nodes [list]
+
+redis nodes information, used in cluster mode, must like as the following format:
+
+["host1:port1", "host2:port2"]
+
+### format [string]
+
+the format of upstream data, now only support `json` `text`, default `json`.
+
+when you assign format is `json`, you should also assign schema option, for example:
+
+upstream data is the following:
+
+```json
+
+{"code": 200, "data": "get success", "success": true}
+
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+when you assign format is `text`, connector will do nothing for upstream data, for example:
+
+upstream data is the following:
+
+```json
+
+{"code": 200, "data": "get success", "success": true}
+
+```
+
+connector will generate data as the following:
+
+| content |
+|----------------------------------------------------------|
+| {"code": 200, "data": "get success", "success": true} |
+
+### schema [config]
+
+#### fields [config]
+
+the schema fields of redis data
+
+### common options
+
+Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details
+
+## Example
+
+simple:
+
+```hocon
+Redis {
+ host = localhost
+ port = 6379
+ keys = "key_test*"
+ data_type = key
+ format = text
+}
+```
+
+```hocon
+Redis {
+ host = localhost
+ port = 6379
+ keys = "key_test*"
+ data_type = key
+ format = json
+ schema {
+ fields {
+ name = string
+ age = int
+ }
+ }
+}
+```
+
+## Changelog
+
+### 2.2.0-beta 2022-09-26
+
+- Add Redis Source Connector
+
+### next version
+
+- [Improve] Support redis cluster mode connection and user authentication [3188](https://github.com/apache/seatunnel/pull/3188)
+
diff --git a/docs/zh/connector-v2/source/RocketMQ.md b/docs/zh/connector-v2/source/RocketMQ.md
new file mode 100644
index 00000000000..d496a259bdb
--- /dev/null
+++ b/docs/zh/connector-v2/source/RocketMQ.md
@@ -0,0 +1,219 @@
+# RocketMQ
+
+> RocketMQ source connector
+
+## Support Apache RocketMQ Version
+
+- 4.9.0 (Or a newer version, for reference)
+
+## Support These Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Source connector for Apache RocketMQ.
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------|---------|----------|----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| topics | String | yes | - | `RocketMQ topic` name. If there are multiple `topics`, use `,` to split, for example: `"tpc1,tpc2"`. |
+| name.srv.addr | String | yes | - | `RocketMQ` name server cluster address. |
+| acl.enabled | Boolean | no | false | If true, access control is enabled, and access key and secret key need to be configured. |
+| access.key | String | no | | |
+| secret.key | String | no | | When ACL_ENABLED is true, secret key cannot be empty. |
+| batch.size | int | no | 100 | `RocketMQ` consumer pull batch size |
+| consumer.group | String | no | SeaTunnel-Consumer-Group | `RocketMQ consumer group id`, used to distinguish different consumer groups. |
+| commit.on.checkpoint | Boolean | no | true | If true the consumer's offset will be periodically committed in the background. |
+| schema | | no | - | The structure of the data, including field names and field types. |
+| format | String | no | json | Data format. The default format is json. Optional text format. The default field separator is ",".If you customize the delimiter, add the "field.delimiter" option. |
+| field.delimiter | String | no | , | Customize the field delimiter for data format |
+| start.mode | String | no | CONSUME_FROM_GROUP_OFFSETS | The initial consumption pattern of consumers,there are several types: [CONSUME_FROM_LAST_OFFSET],[CONSUME_FROM_FIRST_OFFSET],[CONSUME_FROM_GROUP_OFFSETS],[CONSUME_FROM_TIMESTAMP],[CONSUME_FROM_SPECIFIC_OFFSETS] |
+| start.mode.offsets | | no | | |
+| start.mode.timestamp | Long | no | | The time required for consumption mode to be "CONSUME_FROM_TIMESTAMP". |
+| partition.discovery.interval.millis | long | no | -1 | The interval for dynamically discovering topics and partitions. |
+| common-options | config | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+### start.mode.offsets
+
+The offset required for consumption mode to be "CONSUME_FROM_SPECIFIC_OFFSETS".
+
+for example:
+
+```hocon
+start.mode.offsets = {
+ topic1-0 = 70
+ topic1-1 = 10
+ topic1-2 = 10
+}
+```
+
+## Task Example
+
+### Simple:
+
+> Consumer reads Rocketmq data and prints it to the console type
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ Rocketmq {
+ name.srv.addr = "rocketmq-e2e:9876"
+ topics = "test_topic_json"
+ result_table_name = "rocketmq_table"
+ schema = {
+ fields {
+ id = bigint
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(2, 1)"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform
+}
+
+sink {
+ Console {
+ }
+}
+```
+
+### Specified format consumption Simple:
+
+> When I consume the topic data in json format parsing and pulling the number of bars each time is 400, the consumption starts from the original location
+
+```hocon
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ Rocketmq {
+ name.srv.addr = "localhost:9876"
+ topics = "test_topic"
+ result_table_name = "rocketmq_table"
+ start.mode = "CONSUME_FROM_FIRST_OFFSET"
+ batch.size = "400"
+ consumer.group = "test_topic_group"
+ format = "json"
+ format = json
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform
+}
+sink {
+ Console {
+ }
+}
+```
+
+### Specified timestamp Simple:
+
+> This is to specify a time to consume, and I dynamically sense the existence of a new partition every 1000 milliseconds to pull the consumption
+
+```hocon
+env {
+ parallelism = 1
+ spark.app.name = "SeaTunnel"
+ spark.executor.instances = 2
+ spark.executor.cores = 1
+ spark.executor.memory = "1g"
+ spark.master = local
+ job.mode = "BATCH"
+}
+
+source {
+ Rocketmq {
+ name.srv.addr = "localhost:9876"
+ topics = "test_topic"
+ partition.discovery.interval.millis = "1000"
+ start.mode.timestamp="1694508382000"
+ consumer.group="test_topic_group"
+ format="json"
+ format = json
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_decimal = "decimal(30, 8)"
+ c_bytes = bytes
+ c_date = date
+ c_timestamp = timestamp
+ }
+ }
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform
+}
+
+sink {
+ Console {
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/source/S3File.md b/docs/zh/connector-v2/source/S3File.md
new file mode 100644
index 00000000000..7ad6f5735cc
--- /dev/null
+++ b/docs/zh/connector-v2/source/S3File.md
@@ -0,0 +1,343 @@
+# S3File
+
+> S3 File Source Connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+
+Read all the data in a split in a pollNext call. What splits are read will be saved in snapshot.
+
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] parquet
+ - [x] orc
+ - [x] json
+ - [x] excel
+
+## Description
+
+Read data from aws s3 file system.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions |
+|------------|--------------------|
+| S3 | current |
+
+## Dependency
+
+> If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+>
+> If you use SeaTunnel Zeta, It automatically integrated the hadoop jar when you download and install SeaTunnel Zeta. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+> To use this connector you need put hadoop-aws-3.1.4.jar and aws-java-sdk-bundle-1.11.271.jar in ${SEATUNNEL_HOME}/lib dir.
+
+## Data Type Mapping
+
+Data type mapping is related to the type of file being read, We supported as the following file types:
+
+`text` `csv` `parquet` `orc` `json` `excel`
+
+### JSON File Type
+
+If you assign file type to `json`, you should also assign schema option to tell connector how to parse data to the row you want.
+
+For example:
+
+upstream data is the following:
+
+```json
+
+{"code": 200, "data": "get success", "success": true}
+
+```
+
+You can also save multiple pieces of data in one file and split them by newline:
+
+```json lines
+
+{"code": 200, "data": "get success", "success": true}
+{"code": 300, "data": "get failed", "success": false}
+
+```
+
+you should assign schema as the following:
+
+```hocon
+
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+
+### Text Or CSV File Type
+
+If you assign file type to `text` `csv`, you can choose to specify the schema information or not.
+
+For example, upstream data is the following:
+
+```text
+
+tyrantlucifer#26#male
+
+```
+
+If you do not assign data schema connector will treat the upstream data as the following:
+
+| content |
+|-----------------------|
+| tyrantlucifer#26#male |
+
+If you assign data schema, you should also assign the option `field_delimiter` too except CSV file type
+
+you should assign schema and delimiter as the following:
+
+```hocon
+
+field_delimiter = "#"
+schema {
+ fields {
+ name = string
+ age = int
+ gender = string
+ }
+}
+
+```
+
+connector will generate data as the following:
+
+| name | age | gender |
+|---------------|-----|--------|
+| tyrantlucifer | 26 | male |
+
+### Orc File Type
+
+If you assign file type to `parquet` `orc`, schema option not required, connector can find the schema of upstream data automatically.
+
+| Orc Data type | SeaTunnel Data type |
+|----------------------------------|----------------------------------------------------------------|
+| BOOLEAN | BOOLEAN |
+| INT | INT |
+| BYTE | BYTE |
+| SHORT | SHORT |
+| LONG | LONG |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| BINARY | BINARY |
+| STRING VARCHAR CHAR | STRING |
+| DATE | LOCAL_DATE_TYPE |
+| TIMESTAMP | LOCAL_DATE_TIME_TYPE |
+| DECIMAL | DECIMAL |
+| LIST(STRING) | STRING_ARRAY_TYPE |
+| LIST(BOOLEAN) | BOOLEAN_ARRAY_TYPE |
+| LIST(TINYINT) | BYTE_ARRAY_TYPE |
+| LIST(SMALLINT) | SHORT_ARRAY_TYPE |
+| LIST(INT) | INT_ARRAY_TYPE |
+| LIST(BIGINT) | LONG_ARRAY_TYPE |
+| LIST(FLOAT) | FLOAT_ARRAY_TYPE |
+| LIST(DOUBLE) | DOUBLE_ARRAY_TYPE |
+| Map | MapType, This type of K and V will transform to SeaTunnel type |
+| STRUCT | SeaTunnelRowType |
+
+### Parquet File Type
+
+If you assign file type to `parquet` `orc`, schema option not required, connector can find the schema of upstream data automatically.
+
+| Orc Data type | SeaTunnel Data type |
+|----------------------|----------------------------------------------------------------|
+| INT_8 | BYTE |
+| INT_16 | SHORT |
+| DATE | DATE |
+| TIMESTAMP_MILLIS | TIMESTAMP |
+| INT64 | LONG |
+| INT96 | TIMESTAMP |
+| BINARY | BYTES |
+| FLOAT | FLOAT |
+| DOUBLE | DOUBLE |
+| BOOLEAN | BOOLEAN |
+| FIXED_LEN_BYTE_ARRAY | TIMESTAMP DECIMAL |
+| DECIMAL | DECIMAL |
+| LIST(STRING) | STRING_ARRAY_TYPE |
+| LIST(BOOLEAN) | BOOLEAN_ARRAY_TYPE |
+| LIST(TINYINT) | BYTE_ARRAY_TYPE |
+| LIST(SMALLINT) | SHORT_ARRAY_TYPE |
+| LIST(INT) | INT_ARRAY_TYPE |
+| LIST(BIGINT) | LONG_ARRAY_TYPE |
+| LIST(FLOAT) | FLOAT_ARRAY_TYPE |
+| LIST(DOUBLE) | DOUBLE_ARRAY_TYPE |
+| Map | MapType, This type of K and V will transform to SeaTunnel type |
+| STRUCT | SeaTunnelRowType |
+
+## Options
+
+| name | type | required | default value | Description |
+|---------------------------------|---------|----------|-------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| path | string | yes | - | The s3 path that needs to be read can have sub paths, but the sub paths need to meet certain format requirements. Specific requirements can be referred to "parse_partition_from_path" option |
+| file_format_type | string | yes | - | File type, supported as the following file types: `text` `csv` `parquet` `orc` `json` `excel` |
+| bucket | string | yes | - | The bucket address of s3 file system, for example: `s3n://seatunnel-test`, if you use `s3a` protocol, this parameter should be `s3a://seatunnel-test`. |
+| fs.s3a.endpoint | string | yes | - | fs s3a endpoint |
+| fs.s3a.aws.credentials.provider | string | yes | com.amazonaws.auth.InstanceProfileCredentialsProvider | The way to authenticate s3a. We only support `org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider` and `com.amazonaws.auth.InstanceProfileCredentialsProvider` now. More information about the credential provider you can see [Hadoop AWS Document](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Simple_name.2Fsecret_credentials_with_SimpleAWSCredentialsProvider.2A) |
+| read_columns | list | no | - | The read column list of the data source, user can use it to implement field projection. The file type supported column projection as the following shown: `text` `csv` `parquet` `orc` `json` `excel` . If the user wants to use this feature when reading `text` `json` `csv` files, the "schema" option must be configured. |
+| access_key | string | no | - | Only used when `fs.s3a.aws.credentials.provider = org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider ` |
+| access_secret | string | no | - | Only used when `fs.s3a.aws.credentials.provider = org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider ` |
+| hadoop_s3_properties | map | no | - | If you need to add other option, you could add it here and refer to this [link](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html) |
+| delimiter/field_delimiter | string | no | \001 | Field delimiter, used to tell connector how to slice and dice fields when reading text files. Default `\001`, the same as hive's default delimiter. |
+| parse_partition_from_path | boolean | no | true | Control whether parse the partition keys and values from file path. For example if you read a file from path `s3n://hadoop-cluster/tmp/seatunnel/parquet/name=tyrantlucifer/age=26`. Every record data from file will be added these two fields: name="tyrantlucifer", age=16 |
+| date_format | string | no | yyyy-MM-dd | Date type format, used to tell connector how to convert string to date, supported as the following formats:`yyyy-MM-dd` `yyyy.MM.dd` `yyyy/MM/dd`. default `yyyy-MM-dd` |
+| datetime_format | string | no | yyyy-MM-dd HH:mm:ss | Datetime type format, used to tell connector how to convert string to datetime, supported as the following formats:`yyyy-MM-dd HH:mm:ss` `yyyy.MM.dd HH:mm:ss` `yyyy/MM/dd HH:mm:ss` `yyyyMMddHHmmss` |
+| time_format | string | no | HH:mm:ss | Time type format, used to tell connector how to convert string to time, supported as the following formats:`HH:mm:ss` `HH:mm:ss.SSS` |
+| skip_header_row_number | long | no | 0 | Skip the first few lines, but only for the txt and csv. For example, set like following:`skip_header_row_number = 2`. Then SeaTunnel will skip the first 2 lines from source files |
+| schema | config | no | - | The schema of upstream data. |
+| sheet_name | string | no | - | Reader the sheet of the workbook,Only used when file_format is excel. |
+| compress_codec | string | no | none |
+| common-options | | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+### delimiter/field_delimiter [string]
+
+**delimiter** parameter will deprecate after version 2.3.5, please use **field_delimiter** instead.
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc/parquet:
+ automatically recognizes the compression type, no additional settings required.
+
+## Example
+
+1. In this example, We read data from s3 path `s3a://seatunnel-test/seatunnel/text` and the file type is orc in this path.
+ We use `org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider` to authentication so `access_key` and `secret_key` is required.
+ All columns in the file will be read and send to sink.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ S3File {
+ path = "/seatunnel/text"
+ fs.s3a.endpoint="s3.cn-north-1.amazonaws.com.cn"
+ fs.s3a.aws.credentials.provider = "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"
+ access_key = "xxxxxxxxxxxxxxxxx"
+ secret_key = "xxxxxxxxxxxxxxxxx"
+ bucket = "s3a://seatunnel-test"
+ file_format_type = "orc"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ Console {}
+}
+```
+
+2. Use `InstanceProfileCredentialsProvider` to authentication
+ The file type in S3 is json, so need config schema option.
+
+```hocon
+
+ S3File {
+ path = "/seatunnel/json"
+ bucket = "s3a://seatunnel-test"
+ fs.s3a.endpoint="s3.cn-north-1.amazonaws.com.cn"
+ fs.s3a.aws.credentials.provider="com.amazonaws.auth.InstanceProfileCredentialsProvider"
+ file_format_type = "json"
+ schema {
+ fields {
+ id = int
+ name = string
+ }
+ }
+ }
+
+```
+
+3. Use `InstanceProfileCredentialsProvider` to authentication
+ The file type in S3 is json and has five fields (`id`, `name`, `age`, `sex`, `type`), so need config schema option.
+ In this job, we only need send `id` and `name` column to mysql.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+source {
+ S3File {
+ path = "/seatunnel/json"
+ bucket = "s3a://seatunnel-test"
+ fs.s3a.endpoint="s3.cn-north-1.amazonaws.com.cn"
+ fs.s3a.aws.credentials.provider="com.amazonaws.auth.InstanceProfileCredentialsProvider"
+ file_format_type = "json"
+ read_columns = ["id", "name"]
+ schema {
+ fields {
+ id = int
+ name = string
+ age = int
+ sex = int
+ type = string
+ }
+ }
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/category/transform-v2
+}
+
+sink {
+ Console {}
+}
+```
+
+## Changelog
+
+### 2.3.0-beta 2022-10-20
+
+- Add S3File Source Connector
+
+### Next version
+
+- [Feature] Support S3A protocol ([3632](https://github.com/apache/seatunnel/pull/3632))
+ - Allow user to add additional hadoop-s3 parameters
+ - Allow the use of the s3a protocol
+ - Decouple hadoop-aws dependencies
+- [Feature]Set S3 AK to optional ([3688](https://github.com/apache/seatunnel/pull/))
+
diff --git a/docs/zh/connector-v2/source/SftpFile.md b/docs/zh/connector-v2/source/SftpFile.md
new file mode 100644
index 00000000000..4f6e9af44bc
--- /dev/null
+++ b/docs/zh/connector-v2/source/SftpFile.md
@@ -0,0 +1,240 @@
+# SftpFile
+
+> Sftp file source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+- [x] file format type
+ - [x] text
+ - [x] csv
+ - [x] json
+ - [x] excel
+
+## Description
+
+Read data from sftp file server.
+
+## Supported DataSource Info
+
+In order to use the SftpFile connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Dependency |
+|------------|--------------------|-----------------------------------------------------------------------------------------|
+| SftpFile | universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/connector-file-sftp) |
+
+:::tip
+
+If you use spark/flink, In order to use this connector, You must ensure your spark/flink cluster already integrated hadoop. The tested hadoop version is 2.x.
+
+If you use SeaTunnel Engine, It automatically integrated the hadoop jar when you download and install SeaTunnel Engine. You can check the jar package under ${SEATUNNEL_HOME}/lib to confirm this.
+
+We made some trade-offs in order to support more file types, so we used the HDFS protocol for internal access to Sftp and this connector need some hadoop dependencies.
+It only supports hadoop version **2.9.X+**.
+
+:::
+
+## Data Type Mapping
+
+The File does not have a specific type list, and we can indicate which SeaTunnel data type the corresponding data needs to be converted to by specifying the Schema in the config.
+
+| SeaTunnel Data type |
+|---------------------|
+| STRING |
+| SHORT |
+| INT |
+| BIGINT |
+| BOOLEAN |
+| DOUBLE |
+| DECIMAL |
+| FLOAT |
+| DATE |
+| TIME |
+| TIMESTAMP |
+| BYTES |
+| ARRAY |
+| MAP |
+
+## Source Options
+
+| Name | Type | Required | default value | Description |
+|---------------------------|---------|----------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| host | String | Yes | - | The target sftp host is required |
+| port | Int | Yes | - | The target sftp port is required |
+| user | String | Yes | - | The target sftp username is required |
+| password | String | Yes | - | The target sftp password is required |
+| path | String | Yes | - | The source file path. |
+| file_format_type | String | Yes | - | Please check #file_format_type below |
+| file_filter_pattern | String | No | - | Filter pattern, which used for filtering files. |
+| delimiter/field_delimiter | String | No | \001 | **delimiter** parameter will deprecate after version 2.3.5, please use **field_delimiter** instead. Field delimiter, used to tell connector how to slice and dice fields when reading text files. Default `\001`, the same as hive's default delimiter |
+| parse_partition_from_path | Boolean | No | true | Control whether parse the partition keys and values from file path For example if you read a file from path `oss://hadoop-cluster/tmp/seatunnel/parquet/name=tyrantlucifer/age=26` Every record data from file will be added these two fields: name age tyrantlucifer 26 Tips: **Do not define partition fields in schema option** |
+| date_format | String | No | yyyy-MM-dd | Date type format, used to tell connector how to convert string to date, supported as the following formats: `yyyy-MM-dd` `yyyy.MM.dd` `yyyy/MM/dd` default `yyyy-MM-dd` |
+| datetime_format | String | No | yyyy-MM-dd HH:mm:ss | Datetime type format, used to tell connector how to convert string to datetime, supported as the following formats: `yyyy-MM-dd HH:mm:ss` `yyyy.MM.dd HH:mm:ss` `yyyy/MM/dd HH:mm:ss` `yyyyMMddHHmmss` default `yyyy-MM-dd HH:mm:ss` |
+| time_format | String | No | HH:mm:ss | Time type format, used to tell connector how to convert string to time, supported as the following formats: `HH:mm:ss` `HH:mm:ss.SSS` default `HH:mm:ss` |
+| skip_header_row_number | Long | No | 0 | Skip the first few lines, but only for the txt and csv. For example, set like following: `skip_header_row_number = 2` then SeaTunnel will skip the first 2 lines from source files |
+| read_columns | list | no | - | The read column list of the data source, user can use it to implement field projection. |
+| sheet_name | String | No | - | Reader the sheet of the workbook,Only used when file_format is excel. |
+| schema | Config | No | - | Please check #schema below |
+| compress_codec | String | No | None | The compress codec of files and the details that supported as the following shown: - txt: `lzo` `None` - json: `lzo` `None` - csv: `lzo` `None` - orc: `lzo` `snappy` `lz4` `zlib` `None` - parquet: `lzo` `snappy` `lz4` `gzip` `brotli` `zstd` `None` Tips: excel type does Not support any compression format |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+### file_format_type [string]
+
+File type, supported as the following file types:
+`text` `csv` `parquet` `orc` `json` `excel`
+If you assign file type to `json`, you should also assign schema option to tell connector how to parse data to the row you want.
+For example:
+upstream data is the following:
+
+```json
+{"code": 200, "data": "get success", "success": true}
+```
+
+You can also save multiple pieces of data in one file and split them by newline:
+
+```json lines
+{"code": 200, "data": "get success", "success": true}
+{"code": 300, "data": "get failed", "success": false}
+```
+
+you should assign schema as the following:
+
+```hocon
+schema {
+ fields {
+ code = int
+ data = string
+ success = boolean
+ }
+}
+```
+
+connector will generate data as the following:
+| code | data | success |
+|------|-------------|---------|
+| 200 | get success | true |
+If you assign file type to `parquet` `orc`, schema option not required, connector can find the schema of upstream data automatically.
+If you assign file type to `text` `csv`, you can choose to specify the schema information or not.
+For example, upstream data is the following:
+
+```text
+tyrantlucifer#26#male
+```
+
+If you do not assign data schema connector will treat the upstream data as the following:
+| content |
+|-----------------------|
+| tyrantlucifer#26#male |
+If you assign data schema, you should also assign the option `field_delimiter` too except CSV file type
+you should assign schema and delimiter as the following:
+
+```hocon
+field_delimiter = "#"
+schema {
+ fields {
+ name = string
+ age = int
+ gender = string
+ }
+}
+```
+
+connector will generate data as the following:
+| name | age | gender |
+|---------------|-----|--------|
+| tyrantlucifer | 26 | male |
+
+### compress_codec [string]
+
+The compress codec of files and the details that supported as the following shown:
+
+- txt: `lzo` `none`
+- json: `lzo` `none`
+- csv: `lzo` `none`
+- orc/parquet:
+ automatically recognizes the compression type, no additional settings required.
+
+### schema [config]
+
+#### fields [Config]
+
+The schema of upstream data.
+
+## How to Create a Sftp Data Synchronization Jobs
+
+The following example demonstrates how to create a data synchronization job that reads data from sftp and prints it on the local client:
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+# Create a source to connect to sftp
+source {
+ SftpFile {
+ host = "sftp"
+ port = 22
+ user = seatunnel
+ password = pass
+ path = "tmp/seatunnel/read/json"
+ file_format_type = "json"
+ result_table_name = "sftp"
+ schema = {
+ fields {
+ c_map = "map"
+ c_array = "array"
+ c_string = string
+ c_boolean = boolean
+ c_tinyint = tinyint
+ c_smallint = smallint
+ c_int = int
+ c_bigint = bigint
+ c_float = float
+ c_double = double
+ c_bytes = bytes
+ c_date = date
+ c_decimal = "decimal(38, 18)"
+ c_timestamp = timestamp
+ c_row = {
+ C_MAP = "map"
+ C_ARRAY = "array"
+ C_STRING = string
+ C_BOOLEAN = boolean
+ C_TINYINT = tinyint
+ C_SMALLINT = smallint
+ C_INT = int
+ C_BIGINT = bigint
+ C_FLOAT = float
+ C_DOUBLE = double
+ C_BYTES = bytes
+ C_DATE = date
+ C_DECIMAL = "decimal(38, 18)"
+ C_TIMESTAMP = timestamp
+ }
+ }
+ }
+ }
+}
+
+# Console printing of the read sftp data
+sink {
+ Console {
+ parallelism = 1
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/source/Snowflake.md b/docs/zh/connector-v2/source/Snowflake.md
new file mode 100644
index 00000000000..706ded3c3a1
--- /dev/null
+++ b/docs/zh/connector-v2/source/Snowflake.md
@@ -0,0 +1,153 @@
+# Snowflake
+
+> JDBC Snowflake Source Connector
+>
+> ## Support those engines
+>
+> Spark
+> Flink
+> SeaTunnel Zeta
+>
+ ## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+> supports query SQL and can achieve projection effect.
+>
+ ## Description
+
+Read external data source data through JDBC.
+
+## Supported DataSource list
+
+| datasource | supported versions | driver | url | maven |
+|------------|----------------------------------------------------------|-------------------------------------------|--------------------------------------------------------|-----------------------------------------------------------------------------|
+| snowflake | Different dependency version has different driver class. | net.snowflake.client.jdbc.SnowflakeDriver | jdbc:snowflake://.snowflakecomputing.com | [Download](https://mvnrepository.com/artifact/net.snowflake/snowflake-jdbc) |
+
+## Database dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example Snowflake datasource: cp snowflake-connector-java-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+>
+ ## Data Type Mapping
+
+| Snowflake Data type | SeaTunnel Data type |
+|-----------------------------------------------------------------------------|---------------------|
+| BOOLEAN | BOOLEAN |
+| TINYINT SMALLINT BYTEINT | SHORT_TYPE |
+| INT INTEGER | INT |
+| BIGINT | LONG |
+| DECIMAL NUMERIC NUMBER | DECIMAL(x,y) |
+| DECIMAL(x,y)(Get the designated column's specified column size.>38) | DECIMAL(38,18) |
+| REAL FLOAT4 | FLOAT |
+| DOUBLE DOUBLE PRECISION FLOAT8 FLOAT | DOUBLE |
+| CHAR CHARACTER VARCHAR STRING TEXT VARIANT OBJECT | STRING |
+| DATE | DATE |
+| TIME | TIME |
+| DATETIME TIMESTAMP TIMESTAMP_LTZ TIMESTAMP_NTZ TIMESTAMP_TZ | TIMESTAMP |
+| BINARY VARBINARY | BYTES |
+| GEOGRAPHY (WKB or EWKB) GEOMETRY (WKB or EWKB) | BYTES |
+| GEOGRAPHY (GeoJSON, WKT or EWKT) GEOMETRY (GeoJSON, WKB or EWKB) | STRING |
+
+## Options
+
+| name | type | required | default | description |
+|------------------------------|------------|----------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:snowflake://.snowflakecomputing.com |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use Snowflake the value is `net.snowflake.client.jdbc.SnowflakeDriver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type,Only support numeric type primary key, and only can config one column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. default value is job parallelism |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects,you can configure the row fetch size used in the query toimprove performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+>
+> JDBC Driver Connection Parameters are supported in JDBC connection string. E.g, you can add `?GEOGRAPHY_OUTPUT_FORMAT='EWKT'` to specify the Geospatial Data Types. For more information about configurable parameters, and geospatial data types please visit Snowflake official [document](https://docs.snowflake.com/en/sql-reference/data-types-geospatial)
+
+## Task Example
+
+### simple:
+
+> This example queries type_bin 'table' 16 data in your test "database" in single parallel and queries all of its fields. You can also specify which fields to query for final output to the console.
+>
+> ```
+> # Defining the runtime environment
+> env {
+> parallelism = 2
+> job.mode = "BATCH"
+> }
+> source{
+> Jdbc {
+> url = "jdbc:snowflake://.snowflakecomputing.com"
+> driver = "net.snowflake.client.jdbc.SnowflakeDriver"
+> connection_check_timeout_sec = 100
+> user = "root"
+> password = "123456"
+> query = "select * from type_bin limit 16"
+> }
+> }
+> transform {
+> # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+> # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+> }
+> sink {
+> Console {}
+> }
+> ```
+
+### parallel:
+
+> Read your query table in parallel with the shard field you configured and the shard data You can do this if you want to read the whole table
+>
+> ```
+> Jdbc {
+> url = "jdbc:snowflake://.snowflakecomputing.com"
+> driver = "net.snowflake.client.jdbc.SnowflakeDriver"
+> connection_check_timeout_sec = 100
+> user = "root"
+> password = "123456"
+> # Define query logic as required
+> query = "select * from type_bin"
+> # Parallel sharding reads fields
+> partition_column = "id"
+> # Number of fragments
+> partition_num = 10
+> }
+> ```
+
+### parallel boundary:
+
+> It is more efficient to specify the data within the upper and lower bounds of the query It is more efficient to read your data source according to the upper and lower boundaries you configured
+>
+> ```
+> Jdbc {
+> url = "jdbc:snowflake://.snowflakecomputing.com"
+> driver = "net.snowflake.client.jdbc.SnowflakeDriver"
+> connection_check_timeout_sec = 100
+> user = "root"
+> password = "123456"
+> # Define query logic as required
+> query = "select * from type_bin"
+> partition_column = "id"
+> # Read start boundary
+> partition_lower_bound = 1
+> # Read end boundary
+> partition_upper_bound = 500
+> partition_num = 10
+> }
+> ```
+
diff --git a/docs/zh/connector-v2/source/Socket.md b/docs/zh/connector-v2/source/Socket.md
new file mode 100644
index 00000000000..7d8eb3bb7f3
--- /dev/null
+++ b/docs/zh/connector-v2/source/Socket.md
@@ -0,0 +1,108 @@
+# Socket
+
+> Socket source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [ ] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Used to read data from Socket.
+
+## Data Type Mapping
+
+The File does not have a specific type list, and we can indicate which SeaTunnel data type the corresponding data needs to be converted to by specifying the Schema in the config.
+
+| SeaTunnel Data type |
+|---------------------|
+| STRING |
+| SHORT |
+| INT |
+| BIGINT |
+| BOOLEAN |
+| DOUBLE |
+| DECIMAL |
+| FLOAT |
+| DATE |
+| TIME |
+| TIMESTAMP |
+| BYTES |
+| ARRAY |
+| MAP |
+
+## Options
+
+| Name | Type | Required | Default | Description |
+|----------------|---------|----------|---------|----------------------------------------------------------------------------------------------------------|
+| host | String | Yes | _ | socket server host |
+| port | Integer | Yes | _ | socket server port |
+| common-options | | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+## How to Create a Socket Data Synchronization Jobs
+
+* Configuring the SeaTunnel config file
+
+The following example demonstrates how to create a data synchronization job that reads data from Socket and prints it on the local client:
+
+```bash
+# Set the basic configuration of the task to be performed
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+
+# Create a source to connect to socket
+source {
+ Socket {
+ host = "localhost"
+ port = 9999
+ }
+}
+
+# Console printing of the read socket data
+sink {
+ Console {
+ parallelism = 1
+ }
+}
+```
+
+* Start a port listening
+
+```shell
+nc -l 9999
+```
+
+* Start a SeaTunnel task
+
+* Socket Source send test data
+
+```text
+~ nc -l 9999
+test
+hello
+flink
+spark
+```
+
+* Console Sink print data
+
+```text
+[test]
+[hello]
+[flink]
+[spark]
+```
+
diff --git a/docs/zh/connector-v2/source/SqlServer-CDC.md b/docs/zh/connector-v2/source/SqlServer-CDC.md
new file mode 100644
index 00000000000..d5439598728
--- /dev/null
+++ b/docs/zh/connector-v2/source/SqlServer-CDC.md
@@ -0,0 +1,228 @@
+# SQL Server CDC
+
+> Sql Server CDC source connector
+
+## Support SQL Server Version
+
+- server:2019 (Or later version for information only)
+
+## Support Those Engines
+
+> SeaTunnel Zeta
+> Flink
+
+## Key Features
+
+- [ ] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+The Sql Server CDC connector allows for reading snapshot data and incremental data from SqlServer database. This document
+describes how to setup the Sql Server CDC connector to run SQL queries against SqlServer databases.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|---------------------------------------------------------------|----------------------------------------------|---------------------------------------------------------------|-----------------------------------------------------------------------|
+| SqlServer | server:2019 (Or later version for information only) | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://localhost:1433;databaseName=column_type_test | https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc |
+
+## Using Dependency
+
+### Install Jdbc Driver
+
+#### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+#### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Data Type Mapping
+
+| SQLserver Data Type | SeaTunnel Data Type |
+|---------------------------------------------------------------------------------------------------|----------------------------------------------------|
+| CHAR VARCHAR NCHAR NVARCHAR STRUCT CLOB LONGVARCHAR LONGNVARCHAR | STRING |
+| BLOB | BYTES |
+| INTEGER | INT |
+| SMALLINT TINYINT | SMALLINT |
+| BIGINT | BIGINT |
+| FLOAT REAL | FLOAT |
+| DOUBLE | DOUBLE |
+| NUMERIC DECIMAL(column.length(), column.scale().orElse(0)) | DECIMAL(column.length(), column.scale().orElse(0)) |
+| TIMESTAMP | TIMESTAMP |
+| DATE | DATE |
+| TIME | TIME |
+| BOOLEAN BIT | BOOLEAN |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------------------------|----------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| username | String | Yes | - | Name of the database to use when connecting to the database server. |
+| password | String | Yes | - | Password to use when connecting to the database server. |
+| database-names | List | Yes | - | Database name of the database to monitor. |
+| table-names | List | Yes | - | Table name is a combination of schema name and table name (databaseName.schemaName.tableName). |
+| table-names-config | List | No | - | Table config list. for example: [{"table": "db1.schema1.table1","primaryKeys":["key1"]}] |
+| base-url | String | Yes | - | URL has to be with database, like "jdbc:sqlserver://localhost:1433;databaseName=test". |
+| startup.mode | Enum | No | INITIAL | Optional startup mode for SqlServer CDC consumer, valid enumerations are "initial", "earliest", "latest" and "specific". |
+| startup.timestamp | Long | No | - | Start from the specified epoch timestamp (in milliseconds). **Note, This option is required when** the **"startup.mode" option used `'timestamp'`.** |
+| startup.specific-offset.file | String | No | - | Start from the specified binlog file name. **Note, This option is required when the "startup.mode" option used `'specific'`.** |
+| startup.specific-offset.pos | Long | No | - | Start from the specified binlog file position. **Note, This option is required when the "startup.mode" option used `'specific'`.** |
+| stop.mode | Enum | No | NEVER | Optional stop mode for SqlServer CDC consumer, valid enumerations are "never". |
+| stop.timestamp | Long | No | - | Stop from the specified epoch timestamp (in milliseconds). **Note, This option is required when the "stop.mode" option used `'timestamp'`.** |
+| stop.specific-offset.file | String | No | - | Stop from the specified binlog file name. **Note, This option is required when the "stop.mode" option used `'specific'`.** |
+| stop.specific-offset.pos | Long | No | - | Stop from the specified binlog file position. **Note, This option is required when the "stop.mode" option used `'specific'`.** |
+| incremental.parallelism | Integer | No | 1 | The number of parallel readers in the incremental phase. |
+| snapshot.split.size | Integer | No | 8096 | The split size (number of rows) of table snapshot, captured tables are split into multiple splits when read the snapshotof table. |
+| snapshot.fetch.size | Integer | No | 1024 | The maximum fetch size for per poll when read table snapshot. |
+| server-time-zone | String | No | UTC | The session time zone in database server. |
+| connect.timeout | Duration | No | 30s | The maximum time that the connector should wait after trying to connect to the database server before timing out. |
+| connect.max-retries | Integer | No | 3 | The max retry times that the connector should retry to build database server connection. |
+| connection.pool.size | Integer | No | 20 | The connection pool size. |
+| chunk-key.even-distribution.factor.upper-bound | Double | No | 100 | The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0. |
+| chunk-key.even-distribution.factor.lower-bound | Double | No | 0.05 | The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05. |
+| sample-sharding.threshold | int | No | 1000 | This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards. |
+| inverse-sampling.rate | int | No | 1000 | The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000. |
+| exactly_once | Boolean | No | false | Enable exactly once semantic. |
+| debezium.* | config | No | - | Pass-through Debezium's properties to Debezium Embedded Engine which is used to capture data changes from SqlServer server. See more about the [Debezium's SqlServer Connector properties](https://github.com/debezium/debezium/blob/1.6/documentation/modules/ROOT/pages/connectors/sqlserver.adoc#connector-properties) |
+| format | Enum | No | DEFAULT | Optional output format for SqlServer CDC, valid enumerations are "DEFAULT"、"COMPATIBLE_DEBEZIUM_JSON". |
+| common-options | | no | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details. |
+
+### Enable Sql Server CDC
+
+1. Check whether the CDC Agent is enabled
+
+> EXEC xp_servicecontrol N'querystate', N'SQLServerAGENT';
+> If the result is running, prove that it is enabled. Otherwise, you need to manually enable it
+
+2. Enable the CDC Agent
+
+> /opt/mssql/bin/mssql-conf setup
+
+3. The result is as follows
+
+> 1) Evaluation (free, no production use rights, 180-day limit)
+> 2) Developer (free, no production use rights)
+> 3) Express (free)
+> 4) Web (PAID)
+> 5) Standard (PAID)
+> 6) Enterprise (PAID)
+> 7) Enterprise Core (PAID)
+> 8) I bought a license through a retail sales channel and have a product key to enter.
+
+4. Set the CDC at the library level
+ Set the library level below to enable CDC. At this level, all tables under the libraries of the enabled CDC automatically enable CDC
+
+> USE TestDB; -- Replace with the actual database name
+> EXEC sys.sp_cdc_enable_db;
+> SELECT name, is_tracked_by_cdc FROM sys.tables WHERE name = 'table'; -- table Replace with the name of the table you want to check
+
+## Task Example
+
+### initiali read Simple
+
+> This is a stream mode cdc initializes read table data will be read incrementally after successful read The following sql DDL is for reference only
+
+```
+env {
+ # You can set engine configuration here
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 5000
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ SqlServer-CDC {
+ result_table_name = "customers"
+ username = "sa"
+ password = "Y.sa123456"
+ startup.mode="initial"
+ database-names = ["column_type_test"]
+ table-names = ["column_type_test.dbo.full_types"]
+ base-url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ }
+}
+
+transform {
+}
+
+sink {
+ console {
+ source_table_name = "customers"
+ }
+```
+
+### increment read Simple
+
+> This is an incremental read that reads the changed data for printing
+
+```
+env {
+ # You can set engine configuration here
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 5000
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ SqlServer-CDC {
+ # Set up accurate one read
+ exactly_once=true
+ result_table_name = "customers"
+ username = "sa"
+ password = "Y.sa123456"
+ startup.mode="latest"
+ database-names = ["column_type_test"]
+ table-names = ["column_type_test.dbo.full_types"]
+ base-url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ }
+}
+
+transform {
+}
+
+sink {
+ console {
+ source_table_name = "customers"
+ }
+```
+
+### Support custom primary key for table
+
+```
+env {
+ parallelism = 1
+ job.mode = "STREAMING"
+ checkpoint.interval = 5000
+}
+
+source {
+ SqlServer-CDC {
+ base-url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ username = "sa"
+ password = "Y.sa123456"
+ database-names = ["column_type_test"]
+
+ table-names = ["column_type_test.dbo.simple_types", "column_type_test.dbo.full_types"]
+ table-names-config = [
+ {
+ table = "column_type_test.dbo.full_types"
+ primaryKeys = ["id"]
+ }
+ ]
+ }
+}
+
+sink {
+ console {
+ }
+```
+
diff --git a/docs/zh/connector-v2/source/SqlServer.md b/docs/zh/connector-v2/source/SqlServer.md
new file mode 100644
index 00000000000..df73612396e
--- /dev/null
+++ b/docs/zh/connector-v2/source/SqlServer.md
@@ -0,0 +1,266 @@
+# SQL Server
+
+> JDBC SQL Server Source Connector
+
+## Support SQL Server Version
+
+- server:2008 (Or later version for information only)
+
+## Support Those Engines
+
+> Spark
+> Flink
+> Seatunnel Zeta
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+> supports query SQL and can achieve projection effect.
+
+## Description
+
+Read external data source data through JDBC.
+
+## Supported DataSource Info
+
+| datasource | supported versions | driver | url | maven |
+|------------|-------------------------|----------------------------------------------|---------------------------------|-----------------------------------------------------------------------------------|
+| SQL Server | support version >= 2008 | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://localhost:1433 | [Download](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc) |
+
+## Database dependency
+
+> Please download the support list corresponding to 'Maven' and copy it to the '$SEATNUNNEL_HOME/plugins/jdbc/lib/' working directory
+> For example SQL Server datasource: cp mssql-jdbc-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
+
+## Data Type Mapping
+
+| SQLserver Data type | Seatunnel Data type |
+|-----------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
+| BIT | BOOLEAN |
+| TINYINT SMALLINT | SHORT |
+| INTEGER | INT |
+| BIGINT | LONG |
+| DECIMAL NUMERIC MONEY SMALLMONEY | DECIMAL((Get the designated column's specified column size)+1, (Gets the designated column's number of digits to right of the decimal point.))) |
+| REAL | FLOAT |
+| FLOAT | DOUBLE |
+| CHAR NCHAR VARCHAR NTEXT NVARCHAR TEXT | STRING |
+| DATE | LOCAL_DATE |
+| TIME | LOCAL_TIME |
+| DATETIME DATETIME2 SMALLDATETIME DATETIMEOFFSET | LOCAL_DATE_TIME |
+| TIMESTAMP BINARY VARBINARY IMAGE UNKNOWN | Not supported yet |
+
+## Source Options
+
+| name | type | required | default | Description |
+|--------------------------------------------|--------|----------|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:sqlserver://127.0.0.1:1434;database=TestDB |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use SQLserver the value is `com.microsoft.sqlserver.jdbc.SQLServerDriver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type. |
+| partition_lower_bound | Long | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | Long | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. default value is job parallelism |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects,you can configure the row fetch size used in the query toimprove performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| table_path | Int | No | 0 | The path to the full path of table, you can use this configuration instead of `query`. examples: mysql: "testdb.table1" oracle: "test_schema.table1" sqlserver: "testdb.test_schema.table1" postgresql: "testdb.test_schema.table1" |
+| table_list | Array | No | 0 | The list of tables to be read, you can use this configuration instead of `table_path` example: ```[{ table_path = "testdb.table1"}, {table_path = "testdb.table2", query = "select * id, name from testdb.table2"}]``` |
+| where_condition | String | No | - | Common row filter conditions for all tables/queries, must start with `where`. for example `where id > 100` |
+| split.size | Int | No | 8096 | The split size (number of rows) of table, captured tables are split into multiple splits when read of table. |
+| split.even-distribution.factor.lower-bound | Double | No | 0.05 | The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05. |
+| split.even-distribution.factor.upper-bound | Double | No | 100 | The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0. |
+| split.sample-sharding.threshold | Int | No | 10000 | This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards. |
+| split.inverse-sampling.rate | Int | No | 1000 | The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Parallel Reader
+
+The JDBC Source connector supports parallel reading of data from tables. SeaTunnel will use certain rules to split the data in the table, which will be handed over to readers for reading. The number of readers is determined by the `parallelism` option.
+
+**Split Key Rules:**
+
+1. If `partition_column` is not null, It will be used to calculate split. The column must in **Supported split data type**.
+2. If `partition_column` is null, seatunnel will read the schema from table and get the Primary Key and Unique Index. If there are more than one column in Primary Key and Unique Index, The first column which in the **supported split data type** will be used to split data. For example, the table have Primary Key(nn guid, name varchar), because `guid` id not in **supported split data type**, so the column `name` will be used to split data.
+
+**Supported split data type:**
+* String
+* Number(int, bigint, decimal, ...)
+* Date
+
+### Options Related To Split
+
+#### split.size
+
+How many rows in one split, captured tables are split into multiple splits when read of table.
+
+#### split.even-distribution.factor.lower-bound
+
+> Not recommended for use
+
+The lower bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be greater than or equal to this lower bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is less, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 0.05.
+
+#### split.even-distribution.factor.upper-bound
+
+> Not recommended for use
+
+The upper bound of the chunk key distribution factor. This factor is used to determine whether the table data is evenly distributed. If the distribution factor is calculated to be less than or equal to this upper bound (i.e., (MAX(id) - MIN(id) + 1) / row count), the table chunks would be optimized for even distribution. Otherwise, if the distribution factor is greater, the table will be considered as unevenly distributed and the sampling-based sharding strategy will be used if the estimated shard count exceeds the value specified by `sample-sharding.threshold`. The default value is 100.0.
+
+#### split.sample-sharding.threshold
+
+This configuration specifies the threshold of estimated shard count to trigger the sample sharding strategy. When the distribution factor is outside the bounds specified by `chunk-key.even-distribution.factor.upper-bound` and `chunk-key.even-distribution.factor.lower-bound`, and the estimated shard count (calculated as approximate row count / chunk size) exceeds this threshold, the sample sharding strategy will be used. This can help to handle large datasets more efficiently. The default value is 1000 shards.
+
+#### split.inverse-sampling.rate
+
+The inverse of the sampling rate used in the sample sharding strategy. For example, if this value is set to 1000, it means a 1/1000 sampling rate is applied during the sampling process. This option provides flexibility in controlling the granularity of the sampling, thus affecting the final number of shards. It's especially useful when dealing with very large datasets where a lower sampling rate is preferred. The default value is 1000.
+
+#### partition_column [string]
+
+The column name for split data.
+
+#### partition_upper_bound [BigDecimal]
+
+The partition_column max value for scan, if not set SeaTunnel will query database get max value.
+
+#### partition_lower_bound [BigDecimal]
+
+The partition_column min value for scan, if not set SeaTunnel will query database get min value.
+
+#### partition_num [int]
+
+> Not recommended for use, The correct approach is to control the number of split through `split.size`
+
+How many splits do we need to split into, only support positive integer. default value is job parallelism.
+
+## tips
+
+> If the table can not be split(for example, table have no Primary Key or Unique Index, and `partition_column` is not set), it will run in single concurrency.
+>
+> Use `table_path` to replace `query` for single table reading. If you need to read multiple tables, use `table_list`.
+
+## Task Example
+
+### Simple:
+
+> Simple single task to read the data table
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 1
+ job.mode = "BATCH"
+}
+source{
+ Jdbc {
+ driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ user = SA
+ password = "Y.sa123456"
+ query = "select * from full_types_jdbc"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+### Parallel:
+
+> Read your query table in parallel with the shard field you configured and the shard data You can do this if you want to read the whole table
+
+```
+env {
+ parallelism = 10
+ job.mode = "BATCH"
+}
+
+source {
+ Jdbc {
+ driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ user = SA
+ password = "Y.sa123456"
+ # Define query logic as required
+ query = "select * from full_types_jdbc"
+ # Parallel sharding reads fields
+ partition_column = "id"
+ # Number of fragments
+ partition_num = 10
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Console {}
+}
+
+```
+
+### Fragmented Parallel Read Simple:
+
+> It is a shard that reads data in parallel fast
+
+```
+env {
+ # You can set engine configuration here
+ parallelism = 10
+}
+
+source {
+ # This is a example source plugin **only for test and demonstrate the feature source plugin**
+ Jdbc {
+ driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
+ url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
+ user = SA
+ password = "Y.sa123456"
+ query = "select * from column_type_test.dbo.full_types_jdbc"
+ # Parallel sharding reads fields
+ partition_column = "id"
+ # Number of fragments
+ partition_num = 10
+
+ }
+ # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
+ # please go to https://seatunnel.apache.org/docs/connector-v2/source/Jdbc
+}
+
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Console {}
+ # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
+ # please go to https://seatunnel.apache.org/docs/connector-v2/sink/Jdbc
+}
+```
+
diff --git a/docs/zh/connector-v2/source/StarRocks.md b/docs/zh/connector-v2/source/StarRocks.md
new file mode 100644
index 00000000000..ef00d4d7d54
--- /dev/null
+++ b/docs/zh/connector-v2/source/StarRocks.md
@@ -0,0 +1,176 @@
+# StarRocks
+
+> StarRocks source connector
+
+## Description
+
+Read external data source data through StarRocks.
+The internal implementation of StarRocks source connector is obtains the query plan from the frontend (FE),
+delivers the query plan as a parameter to BE nodes, and then obtains data results from BE nodes.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [ ] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [schema projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-------------------------|--------|----------|-------------------|
+| node_urls | list | yes | - |
+| username | string | yes | - |
+| password | string | yes | - |
+| database | string | yes | - |
+| table | string | yes | - |
+| scan_filter | string | no | - |
+| schema | config | yes | - |
+| request_tablet_size | int | no | Integer.MAX_VALUE |
+| scan_connect_timeout_ms | int | no | 30000 |
+| scan_query_timeout_sec | int | no | 3600 |
+| scan_keep_alive_min | int | no | 10 |
+| scan_batch_rows | int | no | 1024 |
+| scan_mem_limit | long | no | 2147483648 |
+| max_retries | int | no | 3 |
+
+### node_urls [list]
+
+`StarRocks` cluster address, the format is `["fe_ip:fe_http_port", ...]`
+
+### username [string]
+
+`StarRocks` user username
+
+### password [string]
+
+`StarRocks` user password
+
+### database [string]
+
+The name of StarRocks database
+
+### table [string]
+
+The name of StarRocks table
+
+### scan_filter [string]
+
+Filter expression of the query, which is transparently transmitted to StarRocks. StarRocks uses this expression to complete source-side data filtering.
+
+e.g.
+
+```
+"tinyint_1 = 100"
+```
+
+### schema [config]
+
+#### fields [Config]
+
+The schema of the starRocks that you want to generate
+
+e.g.
+
+```
+schema {
+ fields {
+ name = string
+ age = int
+ }
+ }
+```
+
+### request_tablet_size [int]
+
+The number of StarRocks Tablets corresponding to an Partition. The smaller this value is set, the more partitions will be generated. This will increase the parallelism on the engine side, but at the same time will cause greater pressure on StarRocks.
+
+The following is an example to explain how to use request_tablet_size to controls the generation of partitions
+
+```
+the tablet distribution of StarRocks table in cluster as follower
+
+be_node_1 tablet[1, 2, 3, 4, 5]
+be_node_2 tablet[6, 7, 8, 9, 10]
+be_node_3 tablet[11, 12, 13, 14, 15]
+
+1.If not set request_tablet_size, there will no limit on the number of tablets in a single partition. The partitions will be generated as follows
+
+partition[0] read data of tablet[1, 2, 3, 4, 5] from be_node_1
+partition[1] read data of tablet[6, 7, 8, 9, 10] from be_node_2
+partition[2] read data of tablet[11, 12, 13, 14, 15] from be_node_3
+
+2.if set request_tablet_size=3, the limit on the number of tablets in a single partition is 3. The partitions will be generated as follows
+
+partition[0] read data of tablet[1, 2, 3] from be_node_1
+partition[1] read data of tablet[4, 5] from be_node_1
+partition[2] read data of tablet[6, 7, 8] from be_node_2
+partition[3] read data of tablet[9, 10] from be_node_2
+partition[4] read data of tablet[11, 12, 13] from be_node_3
+partition[5] read data of tablet[14, 15] from be_node_3
+```
+
+### scan_connect_timeout_ms [int]
+
+requests connection timeout sent to StarRocks
+
+### scan_query_timeout_sec [int]
+
+Query the timeout time of StarRocks, the default value is 1 hour, -1 means no timeout limit
+
+### scan_keep_alive_min [int]
+
+The keep-alive duration of the query task, in minutes. The default value is 10. we recommend that you set this parameter to a value greater than or equal to 5.
+
+### scan_batch_rows [int]
+
+The maximum number of data rows to read from BE at a time. Increasing this value reduces the number of connections established between engine and StarRocks and therefore mitigates overhead caused by network latency.
+
+### scan_mem_limit [long]
+
+The maximum memory space allowed for a single query in the BE node, in bytes. The default value is 2147483648 (2 GB).
+
+### max_retries [int]
+
+number of retry requests sent to StarRocks
+
+## Example
+
+```
+source {
+ StarRocks {
+ nodeUrls = ["starrocks_e2e:8030"]
+ username = root
+ password = ""
+ database = "test"
+ table = "e2e_table_source"
+ scan_batch_rows = 10
+ max_retries = 3
+ fields {
+ BIGINT_COL = BIGINT
+ LARGEINT_COL = STRING
+ SMALLINT_COL = SMALLINT
+ TINYINT_COL = TINYINT
+ BOOLEAN_COL = BOOLEAN
+ DECIMAL_COL = "DECIMAL(20, 1)"
+ DOUBLE_COL = DOUBLE
+ FLOAT_COL = FLOAT
+ INT_COL = INT
+ CHAR_COL = STRING
+ VARCHAR_11_COL = STRING
+ STRING_COL = STRING
+ DATETIME_COL = TIMESTAMP
+ DATE_COL = DATE
+ }
+ }
+}
+```
+
+## Changelog
+
+### next version
+
+- Add StarRocks Source Connector
+
diff --git a/docs/zh/connector-v2/source/TDengine.md b/docs/zh/connector-v2/source/TDengine.md
new file mode 100644
index 00000000000..a24744d5c17
--- /dev/null
+++ b/docs/zh/connector-v2/source/TDengine.md
@@ -0,0 +1,85 @@
+# TDengine
+
+> TDengine source connector
+
+## Description
+
+Read external data source data through TDengine.
+
+## Key features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+
+supports query SQL and can achieve projection effect.
+
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Options
+
+| name | type | required | default value |
+|-------------|--------|----------|---------------|
+| url | string | yes | - |
+| username | string | yes | - |
+| password | string | yes | - |
+| database | string | yes | |
+| stable | string | yes | - |
+| lower_bound | long | yes | - |
+| upper_bound | long | yes | - |
+
+### url [string]
+
+the url of the TDengine when you select the TDengine
+
+e.g.
+
+```
+jdbc:TAOS-RS://localhost:6041/
+```
+
+### username [string]
+
+the username of the TDengine when you select
+
+### password [string]
+
+the password of the TDengine when you select
+
+### database [string]
+
+the database of the TDengine when you select
+
+### stable [string]
+
+the stable of the TDengine when you select
+
+### lower_bound [long]
+
+the lower_bound of the migration period
+
+### upper_bound [long]
+
+the upper_bound of the migration period
+
+## Example
+
+### source
+
+```hocon
+source {
+ TDengine {
+ url : "jdbc:TAOS-RS://localhost:6041/"
+ username : "root"
+ password : "taosdata"
+ database : "power"
+ stable : "meters"
+ lower_bound : "2018-10-03 14:38:05.000"
+ upper_bound : "2018-10-03 14:38:16.800"
+ result_table_name = "tdengine_result"
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/source/Vertica.md b/docs/zh/connector-v2/source/Vertica.md
new file mode 100644
index 00000000000..1d8a83faa10
--- /dev/null
+++ b/docs/zh/connector-v2/source/Vertica.md
@@ -0,0 +1,162 @@
+# Vertica
+
+> JDBC Vertica Source Connector
+
+## Description
+
+Read external data source data through JDBC.
+
+## Support Those Engines
+
+> Spark
+> Flink
+> SeaTunnel Zeta
+
+## Using Dependency
+
+### For Spark/Flink Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://www.vertica.com/download/vertica/client-drivers/) has been placed in directory `${SEATUNNEL_HOME}/plugins/`.
+
+### For SeaTunnel Zeta Engine
+
+> 1. You need to ensure that the [jdbc driver jar package](https://www.vertica.com/download/vertica/client-drivers/) has been placed in directory `${SEATUNNEL_HOME}/lib/`.
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [ ] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [x] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [x] [support user-defined split](../../concept/connector-v2-features.md)
+
+> supports query SQL and can achieve projection effect.
+
+## Supported DataSource Info
+
+| Datasource | Supported versions | Driver | Url | Maven |
+|------------|----------------------------------------------------------|-------------------------|---------------------------------------|----------------------------------------------------------------------|
+| Vertica | Different dependency version has different driver class. | com.vertica.jdbc.Driver | jdbc:vertica://localhost:5433/vertica | [Download](https://www.vertica.com/download/vertica/client-drivers/) |
+
+## Data Type Mapping
+
+| Vertical Data Type | SeaTunnel Data Type |
+|-----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| BIT | BOOLEAN |
+| TINYINT TINYINT UNSIGNED SMALLINT SMALLINT UNSIGNED MEDIUMINT MEDIUMINT UNSIGNED INT INTEGER YEAR | INT |
+| INT UNSIGNED INTEGER UNSIGNED BIGINT | LONG |
+| BIGINT UNSIGNED | DECIMAL(20,0) |
+| DECIMAL(x,y)(Get the designated column's specified column size.<38) | DECIMAL(x,y) |
+| DECIMAL(x,y)(Get the designated column's specified column size.>38) | DECIMAL(38,18) |
+| DECIMAL UNSIGNED | DECIMAL((Get the designated column's specified column size)+1, (Gets the designated column's number of digits to right of the decimal point.))) |
+| FLOAT FLOAT UNSIGNED | FLOAT |
+| DOUBLE DOUBLE UNSIGNED | DOUBLE |
+| CHAR VARCHAR TINYTEXT MEDIUMTEXT TEXT LONGTEXT JSON | STRING |
+| DATE | DATE |
+| TIME | TIME |
+| DATETIME TIMESTAMP | TIMESTAMP |
+| TINYBLOB MEDIUMBLOB BLOB LONGBLOB BINARY VARBINAR BIT(n) | BYTES |
+| GEOMETRY UNKNOWN | Not supported yet |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|------------------------------|------------|----------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| url | String | Yes | - | The URL of the JDBC connection. Refer to a case: jdbc:vertica://localhost:5433/vertica |
+| driver | String | Yes | - | The jdbc class name used to connect to the remote data source, if you use Vertica the value is `com.vertica.jdbc.Driver`. |
+| user | String | No | - | Connection instance user name |
+| password | String | No | - | Connection instance password |
+| query | String | Yes | - | Query statement |
+| connection_check_timeout_sec | Int | No | 30 | The time in seconds to wait for the database operation used to validate the connection to complete |
+| partition_column | String | No | - | The column name for parallelism's partition, only support numeric type,Only support numeric type primary key, and only can config one column. |
+| partition_lower_bound | BigDecimal | No | - | The partition_column min value for scan, if not set SeaTunnel will query database get min value. |
+| partition_upper_bound | BigDecimal | No | - | The partition_column max value for scan, if not set SeaTunnel will query database get max value. |
+| partition_num | Int | No | job parallelism | The number of partition count, only support positive integer. default value is job parallelism |
+| fetch_size | Int | No | 0 | For queries that return a large number of objects,you can configure the row fetch size used in the query toimprove performance by reducing the number database hits required to satisfy the selection criteria. Zero means use jdbc default value. |
+| properties | Map | No | - | Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the specific implementation of the driver. For example, in MySQL, properties take precedence over the URL. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+### Tips
+
+> If partition_column is not set, it will run in single concurrency, and if partition_column is set, it will be executed in parallel according to the concurrency of tasks.
+
+## Task Example
+
+### Simple:
+
+> This example queries type_bin 'table' 16 data in your test "database" in single parallel and queries all of its fields. You can also specify which fields to query for final output to the console.
+
+```
+# Defining the runtime environment
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+source{
+ Jdbc {
+ url = "jdbc:vertica://localhost:5433/vertica"
+ driver = "com.vertica.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ query = "select * from type_bin limit 16"
+ }
+}
+
+transform {
+ # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
+ # please go to https://seatunnel.apache.org/docs/transform-v2/sql
+}
+
+sink {
+ Console {}
+}
+```
+
+### Parallel:
+
+> Read your query table in parallel with the shard field you configured and the shard data You can do this if you want to read the whole table
+
+```
+source {
+ Jdbc {
+ url = "jdbc:vertica://localhost:5433/vertica"
+ driver = "com.vertica.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ # Define query logic as required
+ query = "select * from type_bin"
+ # Parallel sharding reads fields
+ partition_column = "id"
+ # Number of fragments
+ partition_num = 10
+ }
+}
+```
+
+### Parallel Boundary:
+
+> It is more efficient to specify the data within the upper and lower bounds of the query It is more efficient to read your data source according to the upper and lower boundaries you configured
+
+```
+source {
+ Jdbc {
+ url = "jdbc:vertica://localhost:5433/vertica"
+ driver = "com.vertica.jdbc.Driver"
+ connection_check_timeout_sec = 100
+ user = "root"
+ password = "123456"
+ # Define query logic as required
+ query = "select * from type_bin"
+ partition_column = "id"
+ # Read start boundary
+ partition_lower_bound = 1
+ # Read end boundary
+ partition_upper_bound = 500
+ partition_num = 10
+ }
+}
+```
+
diff --git a/docs/zh/connector-v2/source/common-options.md b/docs/zh/connector-v2/source/common-options.md
new file mode 100644
index 00000000000..a9e607b28eb
--- /dev/null
+++ b/docs/zh/connector-v2/source/common-options.md
@@ -0,0 +1,33 @@
+# Source Common Options
+
+> Common parameters of source connectors
+
+| name | type | required | default value |
+|-------------------|--------|----------|---------------|
+| result_table_name | string | no | - |
+| parallelism | int | no | - |
+
+### result_table_name [string]
+
+When `result_table_name` is not specified, the data processed by this plugin will not be registered as a data set `(dataStream/dataset)` that can be directly accessed by other plugins, or called a temporary table `(table)` ;
+
+When `result_table_name` is specified, the data processed by this plugin will be registered as a data set `(dataStream/dataset)` that can be directly accessed by other plugins, or called a temporary table `(table)` . The data set `(dataStream/dataset)` registered here can be directly accessed by other plugins by specifying `source_table_name` .
+
+### parallelism [int]
+
+When `parallelism` is not specified, the `parallelism` in env is used by default.
+
+When parallelism is specified, it will override the parallelism in env.
+
+## Example
+
+```bash
+source {
+ FakeSourceStream {
+ result_table_name = "fake"
+ }
+}
+```
+
+> The result of the data source `FakeSourceStream` will be registered as a temporary table named `fake` . This temporary table can be used by any `Transform` or `Sink` plugin by specifying `source_table_name` .
+
diff --git a/docs/zh/connector-v2/source/kafka.md b/docs/zh/connector-v2/source/kafka.md
new file mode 100644
index 00000000000..ebee2bb3d54
--- /dev/null
+++ b/docs/zh/connector-v2/source/kafka.md
@@ -0,0 +1,161 @@
+# Kafka
+
+> Kafka source connector
+
+## Support Those Engines
+
+> Spark
+> Flink
+> Seatunnel Zeta
+
+## Key Features
+
+- [x] [batch](../../concept/connector-v2-features.md)
+- [x] [stream](../../concept/connector-v2-features.md)
+- [x] [exactly-once](../../concept/connector-v2-features.md)
+- [ ] [column projection](../../concept/connector-v2-features.md)
+- [x] [parallelism](../../concept/connector-v2-features.md)
+- [ ] [support user-defined split](../../concept/connector-v2-features.md)
+
+## Description
+
+Source connector for Apache Kafka.
+
+## Supported DataSource Info
+
+In order to use the Kafka connector, the following dependencies are required.
+They can be downloaded via install-plugin.sh or from the Maven central repository.
+
+| Datasource | Supported Versions | Maven |
+|------------|--------------------|-------------------------------------------------------------------------------------------------------------|
+| Kafka | Universal | [Download](https://mvnrepository.com/artifact/org.apache.seatunnel/seatunnel-connectors-v2/connector-kafka) |
+
+## Source Options
+
+| Name | Type | Required | Default | Description |
+|-------------------------------------|-----------------------------------------------------------------------------|----------|--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| topic | String | Yes | - | Topic name(s) to read data from when the table is used as source. It also supports topic list for source by separating topic by comma like 'topic-1,topic-2'. |
+| bootstrap.servers | String | Yes | - | Comma separated list of Kafka brokers. |
+| pattern | Boolean | No | false | If `pattern` is set to `true`,the regular expression for a pattern of topic names to read from. All topics in clients with names that match the specified regular expression will be subscribed by the consumer. |
+| consumer.group | String | No | SeaTunnel-Consumer-Group | `Kafka consumer group id`, used to distinguish different consumer groups. |
+| commit_on_checkpoint | Boolean | No | true | If true the consumer's offset will be periodically committed in the background. |
+| kafka.config | Map | No | - | In addition to the above necessary parameters that must be specified by the `Kafka consumer` client, users can also specify multiple `consumer` client non-mandatory parameters, covering [all consumer parameters specified in the official Kafka document](https://kafka.apache.org/documentation.html#consumerconfigs). |
+| schema | Config | No | - | The structure of the data, including field names and field types. |
+| format | String | No | json | Data format. The default format is json. Optional text format, canal-json, debezium-json and avro.If you use json or text format. The default field separator is ", ". If you customize the delimiter, add the "field_delimiter" option.If you use canal format, please refer to [canal-json](../formats/canal-json.md) for details.If you use debezium format, please refer to [debezium-json](../formats/debezium-json.md) for details. |
+| format_error_handle_way | String | No | fail | The processing method of data format error. The default value is fail, and the optional value is (fail, skip). When fail is selected, data format error will block and an exception will be thrown. When skip is selected, data format error will skip this line data. |
+| field_delimiter | String | No | , | Customize the field delimiter for data format. |
+| start_mode | StartMode[earliest],[group_offsets],[latest],[specific_offsets],[timestamp] | No | group_offsets | The initial consumption pattern of consumers. |
+| start_mode.offsets | Config | No | - | The offset required for consumption mode to be specific_offsets. |
+| start_mode.timestamp | Long | No | - | The time required for consumption mode to be "timestamp". |
+| partition-discovery.interval-millis | Long | No | -1 | The interval for dynamically discovering topics and partitions. |
+| common-options | | No | - | Source plugin common parameters, please refer to [Source Common Options](common-options.md) for details |
+
+## Task Example
+
+### Simple
+
+> This example reads the data of kafka's topic_1, topic_2, topic_3 and prints it to the client.And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in Install SeaTunnel to install and deploy SeaTunnel. And if you have not yet installed and deployed SeaTunnel, you need to follow the instructions in [Install SeaTunnel](../../start-v2/locally/deployment.md) to install and deploy SeaTunnel. And then follow the instructions in [Quick Start With SeaTunnel Engine](../../start-v2/locally/quick-start-seatunnel-engine.md) to run this job.
+
+```hocon
+# Defining the runtime environment
+env {
+ parallelism = 2
+ job.mode = "BATCH"
+}
+source {
+ Kafka {
+ schema = {
+ fields {
+ name = "string"
+ age = "int"
+ }
+ }
+ format = text
+ field_delimiter = "#"
+ topic = "topic_1,topic_2,topic_3"
+ bootstrap.servers = "localhost:9092"
+ kafka.config = {
+ client.id = client_1
+ max.poll.records = 500
+ auto.offset.reset = "earliest"
+ enable.auto.commit = "false"
+ }
+ }
+}
+sink {
+ Console {}
+}
+```
+
+### Regex Topic
+
+```hocon
+source {
+ Kafka {
+ topic = ".*seatunnel*."
+ pattern = "true"
+ bootstrap.servers = "localhost:9092"
+ consumer.group = "seatunnel_group"
+ }
+}
+```
+
+### AWS MSK SASL/SCRAM
+
+Replace the following `${username}` and `${password}` with the configuration values in AWS MSK.
+
+```hocon
+source {
+ Kafka {
+ topic = "seatunnel"
+ bootstrap.servers = "xx.amazonaws.com.cn:9096,xxx.amazonaws.com.cn:9096,xxxx.amazonaws.com.cn:9096"
+ consumer.group = "seatunnel_group"
+ kafka.config = {
+ security.protocol=SASL_SSL
+ sasl.mechanism=SCRAM-SHA-512
+ sasl.jaas.config="org.apache.kafka.common.security.scram.ScramLoginModule required username=\"username\" password=\"password\";"
+ #security.protocol=SASL_SSL
+ #sasl.mechanism=AWS_MSK_IAM
+ #sasl.jaas.config="software.amazon.msk.auth.iam.IAMLoginModule required;"
+ #sasl.client.callback.handler.class="software.amazon.msk.auth.iam.IAMClientCallbackHandler"
+ }
+ }
+}
+```
+
+### AWS MSK IAM
+
+Download `aws-msk-iam-auth-1.1.5.jar` from https://github.com/aws/aws-msk-iam-auth/releases and put it in `$SEATUNNEL_HOME/plugin/kafka/lib` dir.
+
+Please ensure the IAM policy have `"kafka-cluster:Connect",`. Like this:
+
+```hocon
+"Effect": "Allow",
+"Action": [
+ "kafka-cluster:Connect",
+ "kafka-cluster:AlterCluster",
+ "kafka-cluster:DescribeCluster"
+],
+```
+
+Source Config
+
+```hocon
+source {
+ Kafka {
+ topic = "seatunnel"
+ bootstrap.servers = "xx.amazonaws.com.cn:9098,xxx.amazonaws.com.cn:9098,xxxx.amazonaws.com.cn:9098"
+ consumer.group = "seatunnel_group"
+ kafka.config = {
+ #security.protocol=SASL_SSL
+ #sasl.mechanism=SCRAM-SHA-512
+ #sasl.jaas.config="org.apache.kafka.common.security.scram.ScramLoginModule required username=\"username\" password=\"password\";"
+ security.protocol=SASL_SSL
+ sasl.mechanism=AWS_MSK_IAM
+ sasl.jaas.config="software.amazon.msk.auth.iam.IAMLoginModule required;"
+ sasl.client.callback.handler.class="software.amazon.msk.auth.iam.IAMClientCallbackHandler"
+ }
+ }
+}
+```
+
diff --git a/docs/zh/contribution/coding-guide.md b/docs/zh/contribution/coding-guide.md
new file mode 100644
index 00000000000..b6032948728
--- /dev/null
+++ b/docs/zh/contribution/coding-guide.md
@@ -0,0 +1,116 @@
+# Coding guide
+
+This guide documents an overview of the current Apache SeaTunnel modules and best practices on how to submit a high quality pull request to Apache SeaTunnel.
+
+## Modules Overview
+
+| Module Name | Introduction |
+|----------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| seatunnel-api | SeaTunnel connector V2 API module |
+| seatunnel-apis | SeaTunnel connector V1 API module |
+| seatunnel-common | SeaTunnel common module |
+| seatunnel-connectors | SeaTunnel connector V1 module, currently connector V1 is in a stable state, the community will continue to maintain it, but there will be no major feature updates |
+| seatunnel-connectors-v2 | SeaTunnel connector V2 module, currently connector V2 is under development and the community will focus on it |
+| seatunnel-core/seatunnel-spark | SeaTunnel core starter module of connector V1 on spark engine |
+| seatunnel-core/seatunnel-flink | SeaTunnel core starter module of connector V1 on flink engine |
+| seatunnel-core/seatunnel-flink-sql | SeaTunnel core starter module of connector V1 on flink-sql engine |
+| seatunnel-core/seatunnel-spark-starter | SeaTunnel core starter module of connector V2 on Spark engine |
+| seatunnel-core/seatunnel-flink-starter | SeaTunnel core starter module of connector V2 on Flink engine |
+| seatunnel-core/seatunnel-starter | SeaTunnel core starter module of connector V2 on SeaTunnel engine |
+| seatunnel-e2e | SeaTunnel end-to-end test module |
+| seatunnel-examples | SeaTunnel local examples module, developer can use it to do unit test and integration test |
+| seatunnel-engine | SeaTunnel engine module, seatunnel-engine is a new computational engine developed by the SeaTunnel Community that focuses on data synchronization. |
+| seatunnel-formats | SeaTunnel formats module, used to offer the ability of formatting data |
+| seatunnel-plugin-discovery | SeaTunnel plugin discovery module, used to offer the ability of loading SPI plugins from classpath |
+| seatunnel-transforms-v2 | SeaTunnel transform V2 module, currently transform V2 is under development and the community will focus on it |
+| seatunnel-translation | SeaTunnel translation module, used to adapt Connector V2 and other computing engines such as Spark Flink etc... |
+
+## How to submit a high quality pull request
+
+1. Create entity classes using annotations in the `lombok` plugin (`@Data` `@Getter` `@Setter` `@NonNull` etc...) to reduce the amount of code. It's a good practice to prioritize the use of lombok plugins in your coding process.
+
+2. If you need to use log4j to print logs in a class, preferably use the annotation `@Slf4j` in the `lombok` plugin.
+
+3. SeaTunnel uses issue to track logical issues, including bugs and improvements, and uses Github's pull requests to manage the review and merge of specific code changes. So making a clear issue or pull request helps the community better understand the developer's intent, the best practice of creating issue or pull request as the following shown:
+
+ > [purpose] [module name] [sub-module name] Description
+
+ 1. Pull request purpose includes: `Hotfix`, `Feature`, `Improve`, `Docs`, `WIP`.Note that if your pull request's purpose is `WIP`, then you need to use github's draft pull request
+ 2. Issue purpose includes: `Feature`, `Bug`, `Docs`, `Discuss`
+ 3. Module name: the current pull request or issue involves the name of the module, for example: `Core`, `Connector-V2`, `Connector-V1`, etc.
+ 4. Sub-module name: the current pull request or issue involves the name of the sub-module, for example:`File` `Redis` `Hbase` etc.
+ 5. Description: highly summarize what the current pull request and issue to do, as far as possible to do the name to know the meaning
+
+ Tips:**For more details, you can refer to [issue guide](https://seatunnel.apache.org/community/contribution_guide/contribute#issue) and [pull request guide](https://seatunnel.apache.org/community/contribution_guide/contribute#pull-request)**
+
+4. Code segments are never repeated. If a code segment is used multiple times, define it multiple times is not a good option, make it a public segment for other modules to use is a best practice.
+
+5. When throwing an exception, throw the exception along with a hint message and the exception should be smaller in scope.Throwing overly broad exceptions promotes complex error handling code that is more likely to contain security vulnerabilities.For example, if your connector encounters an `IOException` while reading data, a reasonable approach would be to the following:
+
+ ```java
+ try {
+ // read logic
+ } catch (IOException e) {
+ throw SeaTunnelORCFormatException("This orc file is corrupted, please check it", e);
+ }
+ ```
+
+6. The Apache project has very strict licensing requirements, so every file in an Apache project should contain a license statement. Check that each new file you add contains the `Apache License Header` before submitting pull request:
+
+ ```java
+ /*
+ * 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.
+ */
+ ```
+
+7. Apache SeaTunnel uses `Spotless` for code style and formatting checks. You could run the following command and `Spotless` will automatically fix the code style and formatting errors for you:
+
+ ```shell
+ ./mvnw spotless:apply
+ ```
+
+8. Before you submit your pull request, make sure the project will compile properly after adding your code, you can use the following commands to package the whole project:
+
+ ```shell
+ # multi threads compile
+ ./mvnw -T 1C clean package
+ ```
+
+ ```shell
+ # single thread compile
+ ./mvnw clean package
+ ```
+
+9. Before submitting pull request, do a full unit test and integration test locally can better verify the functionality of your code, best practice is to use the `seatunnel-examples` module's ability to self-test to ensure that the multi-engine is running properly and the results are correct.
+
+10. If you submit a pull request with a feature that requires updated documentation, always remember to update the documentation.
+
+12. Submit the pull request of connector type can write e2e test to ensure the robustness and robustness of the code, e2e test should include the full data type, and e2e test as little as possible to initialize the docker image, write the test cases of sink and source together to reduce the loss of resources, while using asynchronous features to ensure the stability of the test. A good example can be found at: [MongodbIT.java](https://github.com/apache/seatunnel/blob/dev/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-mongodb-e2e/src/test/java/org/apache/seatunnel/e2e/connector/v2/mongodb/MongodbIT.java)
+
+12. The priority of property permission in the class is set to `private`, and mutability is set to `final`, which can be changed reasonably if special circumstances are encountered.
+
+13. The properties in the class and method parameters prefer to use the base type(int boolean double float...), not recommended to use the wrapper type(Integer Boolean Double Float...), if encounter special circumstances reasonable change.
+
+14. When developing a sink connector you need to be aware that the sink will be serialized, and if some properties cannot be serialized, encapsulate the properties into classes and use the singleton pattern.
+
+15. If there are multiple `if` process judgments in the code flow, try to simplify the flow to multiple ifs instead of if-else-if.
+
+16. Pull request has the characteristic of single responsibility, not allowed to include irrelevant code of the feature in pull request, once this situation deal with their own branch before submitting pull request, otherwise the Apache SeaTunnel community will actively close pull request
+
+17. Contributors should be responsible for their own pull request. If your pull request contains new features or modifies old features, add test cases or e2e tests to prove the reasonableness and functional integrity of your pull request is a good practice.
+
+18. If you think which part of the community's current code is unreasonable (especially the core `core` module and the `api` module), the function needs to be updated or modified, the first thing to do is to propose a `discuss issue` or `email` with the community to discuss the need to modify this part of the function, if the community agrees to submit pull request again, do not submit the issue and pull request directly without discussion, so the community will directly consider this pull request is useless, and will be closed down.
+
diff --git a/docs/zh/contribution/contribute-plugin.md b/docs/zh/contribution/contribute-plugin.md
new file mode 100644
index 00000000000..17275e35f0b
--- /dev/null
+++ b/docs/zh/contribution/contribute-plugin.md
@@ -0,0 +1,5 @@
+# Contribute Connector-v2 Plugins
+
+If you want to contribute Connector-V2, please click the Connector-V2 Contribution Guide below for reference. It can help you enter development more quickly.
+
+[Connector-v2 Contribution Guide](https://github.com/apache/seatunnel/blob/dev/seatunnel-connectors-v2/README.md)
diff --git a/docs/zh/contribution/contribute-transform-v2-guide.md b/docs/zh/contribution/contribute-transform-v2-guide.md
new file mode 100644
index 00000000000..1ec2493a1b3
--- /dev/null
+++ b/docs/zh/contribution/contribute-transform-v2-guide.md
@@ -0,0 +1,329 @@
+# Contribute Transform Guide
+
+This document describes how to understand, develop and contribute a transform.
+
+We also provide the [transform e2e test](../../../seatunnel-e2e/seatunnel-transforms-v2-e2e)
+to verify the data input and output by the transform.
+
+## Concepts
+
+Using SeaTunnel you can read or write data through the connector, but if you need to
+process your data after reading or before writing, then need to use transform.
+
+Use transform to make simple edits to your data rows or fields, such as split field,
+change field values, add or remove field.
+
+### DataType transform
+
+Transform receives datatype input from upstream(source or transform) and outputs new datatype to
+downstream(sink or transform), this process is datatype transform.
+
+Example 1:Remove fields
+
+```shell
+| A | B | C |
+|-----------|-----------|-----------|
+| STRING | INT | BOOLEAN |
+
+| A | B |
+|-----------|-----------|
+| STRING | INT |
+```
+
+Example 2:Sort fields
+
+```shell
+| B | C | A |
+|-----------|-----------|-----------|
+| INT | BOOLEAN | STRING |
+
+| A | B | C |
+|-----------|-----------|-----------|
+| STRING | INT | BOOLEAN |
+```
+
+Example 3:Update fields datatype
+
+```shell
+| A | B | C |
+|-----------|-----------|-----------|
+| STRING | INT | BOOLEAN |
+
+
+| A | B | C |
+|-----------|-----------|-----------|
+| STRING | STRING | STRING |
+```
+
+Example 4:Add new fields
+
+```shell
+| A | B | C |
+|-----------|-----------|-----------|
+| STRING | INT | BOOLEAN |
+
+
+| A | B | C | D |
+|-----------|-----------|-----------|-----------|
+| STRING | INT | BOOLEAN | DOUBLE |
+```
+
+### Data transform
+
+After datatype transformed, Transform will receives data-row input from upstream(source or transform),
+edit into data-row with [new datatype](#DataType transform) and outputs to downstream (sink or transform).
+This process is data transform.
+
+### Translation
+
+Transform is decoupled from the execution engine, any transform implement can run into all engines
+without change the code & config, which requires the translation layer to adapt transform and execution engine.
+
+Example:Translation datatype & data
+
+```shell
+Original:
+
+| A | B | C |
+|-----------|-----------|-----------|
+| STRING | INT | BOOLEAN |
+
+Datatype translation:
+
+| A | B | C |
+|-------------------|-------------------|-------------------|
+| ENGINE | ENGINE | ENGINE |
+
+Data translation:
+
+| A | B | C |
+|-------------------|-------------------|-------------------|
+| ENGINE<"test"> | ENGINE<1> | ENGINE |
+```
+
+## Core APIs
+
+### SeaTunnelTransform
+
+`SeaTunnelTransform` provides all major and primary APIs, you can subclass it to do whatever transform.
+
+1. Receive datatype input from upstream.
+
+```java
+/**
+ * Set the data type info of input data.
+ *
+ * @param inputDataType The data type info of upstream input.
+ */
+ void setTypeInfo(SeaTunnelDataType inputDataType);
+```
+
+2. Outputs new datatype to downstream.
+
+```java
+/**
+ * Get the data type of the records produced by this transform.
+ *
+ * @return Produced data type.
+ */
+SeaTunnelDataType getProducedType();
+```
+
+3. Edit input data and outputs new data to downstream.
+
+```java
+/**
+ * Transform input data to {@link this#getProducedType()} types data.
+ *
+ * @param row the data need be transform.
+ * @return transformed data.
+ */
+T map(T row);
+```
+
+### SingleFieldOutputTransform
+
+`SingleFieldOutputTransform` abstract single field change operator
+
+1. Define output field
+
+```java
+/**
+ * Outputs new field
+ *
+ * @return
+ */
+protected abstract String getOutputFieldName();
+```
+
+2. Define output field datatype
+
+```java
+/**
+ * Outputs new field datatype
+ *
+ * @return
+ */
+protected abstract SeaTunnelDataType getOutputFieldDataType();
+```
+
+3. Define output field value
+
+```java
+/**
+ * Outputs new field value
+ *
+ * @param inputRow The inputRow of upstream input.
+ * @return
+ */
+protected abstract Object getOutputFieldValue(SeaTunnelRowAccessor inputRow);
+```
+
+### MultipleFieldOutputTransform
+
+`MultipleFieldOutputTransform` abstract multiple fields change operator
+
+1. Define output fields
+
+```java
+/**
+ * Outputs new fields
+ *
+ * @return
+ */
+protected abstract String[] getOutputFieldNames();
+```
+
+2. Define output fields datatype
+
+```java
+/**
+ * Outputs new fields datatype
+ *
+ * @return
+ */
+protected abstract SeaTunnelDataType[] getOutputFieldDataTypes();
+```
+
+3. Define output field values
+
+```java
+/**
+ * Outputs new fields value
+ *
+ * @param inputRow The inputRow of upstream input.
+ * @return
+ */
+protected abstract Object[] getOutputFieldValues(SeaTunnelRowAccessor inputRow);
+```
+
+### AbstractSeaTunnelTransform
+
+`AbstractSeaTunnelTransform` abstract datatype & fields change operator
+
+1. Transform input row type and outputs new row type
+
+```java
+/**
+ * Outputs transformed row type.
+ *
+ * @param inputRowType upstream input row type
+ * @return
+ */
+protected abstract SeaTunnelRowType transformRowType(SeaTunnelRowType inputRowType);
+```
+
+2. Transform input row data and outputs new row data
+
+```java
+/**
+ * Outputs transformed row data.
+ *
+ * @param inputRow upstream input row data
+ * @return
+ */
+protected abstract SeaTunnelRow transformRow(SeaTunnelRow inputRow);
+```
+
+## Develop a Transform
+
+It must implement one of the following APIs:
+- SeaTunnelTransform
+- AbstractSeaTunnelTransform
+- SingleFieldOutputTransform
+- MultipleFieldOutputTransform
+
+Add implement subclass into module `seatunnel-transforms-v2`.
+
+### Example: copy field to new field
+
+```java
+@AutoService(SeaTunnelTransform.class)
+public class CopyFieldTransform extends SingleFieldOutputTransform {
+
+ private String srcField;
+ private int srcFieldIndex;
+ private SeaTunnelDataType srcFieldDataType;
+ private String destField;
+
+ @Override
+ public String getPluginName() {
+ return "Copy";
+ }
+
+ @Override
+ protected void setConfig(Config pluginConfig) {
+ this.srcField = pluginConfig.getString("src_field");
+ this.destField = pluginConfig.getString("dest_fields");
+ }
+
+ @Override
+ protected void setInputRowType(SeaTunnelRowType inputRowType) {
+ srcFieldIndex = inputRowType.indexOf(srcField);
+ srcFieldDataType = inputRowType.getFieldType(srcFieldIndex);
+ }
+
+ @Override
+ protected String getOutputFieldName() {
+ return destField;
+ }
+
+ @Override
+ protected SeaTunnelDataType getOutputFieldDataType() {
+ return srcFieldDataType;
+ }
+
+ @Override
+ protected Object getOutputFieldValue(SeaTunnelRowAccessor inputRow) {
+ return inputRow.getField(srcFieldIndex);
+ }
+}
+```
+
+1. The `getPluginName` method is used to identify the transform name.
+2. The @AutoService is used to generate the `META-INF/services/org.apache.seatunnel.api.transform.SeaTunnelTransform`
+ file automatically.
+3. The `setConfig` method is used to inject user configs.
+
+## Transform Test Tool
+
+Once you add a new plugin, it is recommended to add e2e tests for it.
+We have a `seatunnel-e2e/seatunnel-transforms-v2-e2e` module to help you to do this.
+
+For example, if you want to add an e2e test for `CopyFieldTransform`, you can create a new test in
+`seatunnel-e2e/seatunnel-transforms-v2-e2e` module and extend the `TestSuiteBase` class in the test.
+
+```java
+public class TestCopyFieldTransformIT extends TestSuiteBase {
+
+ @TestTemplate
+ public void testCopyFieldTransform(TestContainer container) {
+ Container.ExecResult execResult = container.executeJob("/copy_transform.conf");
+ Assertions.assertEquals(0, execResult.getExitCode());
+ }
+}
+```
+
+Once your testcase implements the `TestSuiteBase` interface and use `@TestTemplate` annotation startup,
+it will running job to all engines, and you just need to execute the executeJob method with your SeaTunnel configuration file,
+it will submit the SeaTunnel job.
diff --git a/docs/zh/contribution/new-license.md b/docs/zh/contribution/new-license.md
new file mode 100644
index 00000000000..7eed078ce44
--- /dev/null
+++ b/docs/zh/contribution/new-license.md
@@ -0,0 +1,53 @@
+# How To Add New License
+
+### ASF 3RD PARTY LICENSE POLICY
+
+You have to pay attention to the following open-source software protocols which Apache projects support when you intend to add a new feature to the SeaTunnel (or other Apache projects), which functions refers to other open-source software references.
+
+[ASF 3RD PARTY LICENSE POLICY](https://apache.org/legal/resolved.html)
+
+If the 3rd party software is not present at the above policy, we could't that accept your code.
+
+### How to Legally Use 3rd Party Open-source Software in the SeaTunnel
+
+Moreover, when we intend to refer a new software ( not limited to 3rd party jar, text, CSS, js, pics, icons, audios etc and modifications based on 3rd party files) to our project, we need to use them legally in addition to the permission of ASF. Refer to the following article:
+
+* [COMMUNITY-LED DEVELOPMENT "THE APACHE WAY"](https://apache.org/dev/licensing-howto.html)
+
+For example, we should contain the NOTICE file (most of open-source project has NOTICE file, generally under root directory) of ZooKeeper in our project when we are using ZooKeeper. As the Apache explains, "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work.
+
+We are not going to dive into every 3rd party open-source license policy in here, you may look up them if interested.
+
+### SeaTunnel-License Check Rules
+
+In general, we would have our License-check scripts to our project. SeaTunnel-License-Check is provided by [SkyWalking](https://github.com/apache/skywalking) which differ a bit from other open-source projects. All in all, we are trying to make sure avoiding the license issues at the first time.
+
+We need to follow the following steps when we need to add new jars or external resources:
+
+* Add the name and the version of the jar file in the known-dependencies.txt
+* Add relevant maven repository address under 'seatunnel-dist/release-docs/LICENSE' directory
+* Append relevant NOTICE files under 'seatunnel-dist/release-docs/NOTICE' directory and make sure they are no different to the original repository
+* Add relevant source code protocols under 'seatunnel-dist/release-docs/licenses' directory and the file name should be named as license+filename.txt. Eg: license-zk.txt
+* check dependency license fail
+
+```
+--- /dev/fd/63 2020-12-03 03:08:57.191579482 +0000
++++ /dev/fd/62 2020-12-03 03:08:57.191579482 +0000
+@@ -1,0 +2 @@
++HikariCP-java6-2.3.13.jar
+@@ -16,0 +18 @@
++c3p0-0.9.5.2.jar
+@@ -149,0 +152 @@
++mchange-commons-java-0.2.11.jar
+
+- commons-lang-2.1.3.jar
+Error: Process completed with exit code 1.
+```
+
+Generally speaking, the work of adding a jar is often not so easy to end, because it often depends on various other jars, and we also need to add corresponding licenses for these jars. In this case, we will get the error message of check dependency license fail in check. As above, we are missing the license declaration of `HikariCP-java6-2.3.13`, `c3p0`, etc. (`+` means new, `-` means need to delete ), follow the steps to add jar to add
+
+### References
+
+* [COMMUNITY-LED DEVELOPMENT "THE APACHE WAY"](https://apache.org/dev/licensing-howto.html)
+* [ASF 3RD PARTY LICENSE POLICY](https://apache.org/legal/resolved.html)
+
diff --git a/docs/zh/contribution/setup.md b/docs/zh/contribution/setup.md
new file mode 100644
index 00000000000..d99ae746a9d
--- /dev/null
+++ b/docs/zh/contribution/setup.md
@@ -0,0 +1,119 @@
+# Set Up Develop Environment
+
+In this section, we are going to show you how to set up your development environment for SeaTunnel, and then run a simple
+example in your JetBrains IntelliJ IDEA.
+
+> You can develop or test SeaTunnel code in any development environment that you like, but here we use
+> [JetBrains IDEA](https://www.jetbrains.com/idea/) as an example to teach you to step by step environment.
+
+## Prepare
+
+Before we start talking about how to set up the environment, we need to do some preparation work. Make sure you already
+have installed the following software:
+
+* [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) installed.
+* [Java](https://www.java.com/en/download/) ( JDK8/JDK11 are supported by now) installed and `JAVA_HOME` set.
+* [Scala](https://www.scala-lang.org/download/2.11.12.html) (only scala 2.11.12 supported by now) installed.
+* [JetBrains IDEA](https://www.jetbrains.com/idea/) installed.
+
+## Set Up
+
+### Clone the Source Code
+
+First of all, you need to clone the SeaTunnel source code from [GitHub](https://github.com/apache/seatunnel).
+
+```shell
+git clone git@github.com:apache/seatunnel.git
+```
+
+### Install Subproject Locally
+
+After cloning the source code, you should run the `./mvnw` command to install the subproject to the maven local repository.
+Otherwise, your code could not start in JetBrains IntelliJ IDEA correctly.
+
+```shell
+./mvnw install -Dmaven.test.skip
+```
+
+### Building seaTunnel from source
+
+After you install the maven, you can use the follow command to compile and package.
+
+```
+mvn clean package -pl seatunnel-dist -am -Dmaven.test.skip=true
+```
+
+### Building sub module
+
+If you want to build submodules separately,you can use the follow command to compile and package.
+
+```ssh
+# This is an example of building the redis connector separately
+
+ mvn clean package -pl seatunnel-connectors-v2/connector-redis -am -DskipTests -T 1C
+```
+
+### Install JetBrains IDEA Scala Plugin
+
+Now, you can open your JetBrains IntelliJ IDEA and explore the source code, but allow building Scala code in IDEA,
+you should also install JetBrains IntelliJ IDEA's [Scala plugin](https://plugins.jetbrains.com/plugin/1347-scala).
+See [install plugins for IDEA](https://www.jetbrains.com/help/idea/managing-plugins.html#install-plugins) if you want to.
+
+### Install JetBrains IDEA Lombok Plugin
+
+Before running the following example, you should also install JetBrains IntelliJ IDEA's [Lombok plugin](https://plugins.jetbrains.com/plugin/6317-lombok).
+See [install plugins for IDEA](https://www.jetbrains.com/help/idea/managing-plugins.html#install-plugins) if you want to.
+
+### Code Style
+
+Apache SeaTunnel uses `Spotless` for code style and formatting checks. You could run the following command and `Spotless` will automatically fix the code style and formatting errors for you:
+
+```shell
+./mvnw spotless:apply
+```
+
+You could copy the `pre-commit hook` file `/tools/spotless_check/pre-commit.sh` to your `.git/hooks/` directory so that every time you commit your code with `git commit`, `Spotless` will automatically fix things for you.
+
+## Run Simple Example
+
+After all the above things are done, you just finish the environment setup and can run an example we provide to you out
+of box. All examples are in module `seatunnel-examples`, you could pick one you are interested in, [running or debugging
+it in IDEA](https://www.jetbrains.com/help/idea/run-debug-configuration.html) as you wish.
+
+Here we use `seatunnel-examples/seatunnel-flink-connector-v2-example/src/main/java/org/apache/seatunnel/example/flink/v2/SeaTunnelApiExample.java`
+as an example, when you run it successfully you could see the output as below:
+
+```log
++I[Ricky Huo, 71]
++I[Gary, 12]
++I[Ricky Huo, 93]
+...
+...
++I[Ricky Huo, 83]
+```
+
+## What's More
+
+All our examples use simple source and sink to make it less dependent and easy to run. You can change the example configuration
+in `resources/examples`. You could change your configuration as below, if you want to use PostgreSQL as the source and
+sink to console.
+
+```conf
+env {
+ parallelism = 1
+}
+
+source {
+ JdbcSource {
+ driver = org.postgresql.Driver
+ url = "jdbc:postgresql://host:port/database"
+ username = postgres
+ query = "select * from test"
+ }
+}
+
+sink {
+ ConsoleSink {}
+}
+```
+
diff --git a/docs/zh/faq.md b/docs/zh/faq.md
new file mode 100644
index 00000000000..7ff275f381c
--- /dev/null
+++ b/docs/zh/faq.md
@@ -0,0 +1,353 @@
+# FAQs
+
+## Why should I install a computing engine like Spark or Flink?
+
+SeaTunnel now uses computing engines such as Spark and Flink to complete resource scheduling and node communication, so we can focus on the ease of use of data synchronization and the development of high-performance components. But this is only temporary.
+
+## I have a question, and I cannot solve it by myself
+
+I have encountered a problem when using SeaTunnel and I cannot solve it by myself. What should I do? First, search in [Issue list](https://github.com/apache/seatunnel/issues) or [mailing list](https://lists.apache.org/list.html?dev@seatunnel.apache.org) to see if someone has already asked the same question and got an answer. If you cannot find an answer to your question, you can contact community members for help in [these ways](https://github.com/apache/seatunnel#contact-us).
+
+## How do I declare a variable?
+
+Do you want to know how to declare a variable in SeaTunnel's configuration, and then dynamically replace the value of the variable at runtime?
+
+Since `v1.2.4`, SeaTunnel supports variable substitution in the configuration. This feature is often used for timing or non-timing offline processing to replace variables such as time and date. The usage is as follows:
+
+Configure the variable name in the configuration. Here is an example of sql transform (actually, anywhere in the configuration file the value in `'key = value'` can use the variable substitution):
+
+```
+...
+transform {
+ sql {
+ query = "select * from user_view where city ='"${city}"' and dt = '"${date}"'"
+ }
+}
+...
+```
+
+Taking Spark Local mode as an example, the startup command is as follows:
+
+```bash
+./bin/start-seatunnel-spark.sh \
+-c ./config/your_app.conf \
+-e client \
+-m local[2] \
+-i city=shanghai \
+-i date=20190319
+```
+
+You can use the parameter `-i` or `--variable` followed by `key=value` to specify the value of the variable, where the key needs to be same as the variable name in the configuration.
+
+## How do I write a configuration item in multi-line text in the configuration file?
+
+When a configured text is very long and you want to wrap it, you can use three double quotes to indicate its start and end:
+
+```
+var = """
+ whatever you want
+"""
+```
+
+## How do I implement variable substitution for multi-line text?
+
+It is a little troublesome to do variable substitution in multi-line text, because the variable cannot be included in three double quotation marks:
+
+```
+var = """
+your string 1
+"""${you_var}""" your string 2"""
+```
+
+Refer to: [lightbend/config#456](https://github.com/lightbend/config/issues/456).
+
+## Is SeaTunnel supportted in Azkaban, Oozie, DolphinScheduler?
+
+Of course! See the screenshot below:
+
+![workflow.png](images/workflow.png)
+
+![azkaban.png](images/azkaban.png)
+
+## Does SeaTunnel have a case for configuring multiple sources, such as configuring elasticsearch and hdfs in source at the same time?
+
+```
+env {
+ ...
+}
+
+source {
+ hdfs { ... }
+ elasticsearch { ... }
+ jdbc {...}
+}
+
+transform {
+ ...
+}
+
+sink {
+ elasticsearch { ... }
+}
+```
+
+## Are there any HBase plugins?
+
+There is an hbase input plugin. You can download it from here: https://github.com/garyelephant/waterdrop-input-hbase .
+
+## How can I use SeaTunnel to write data to Hive?
+
+```
+env {
+ spark.sql.catalogImplementation = "hive"
+ spark.hadoop.hive.exec.dynamic.partition = "true"
+ spark.hadoop.hive.exec.dynamic.partition.mode = "nonstrict"
+}
+
+source {
+ sql = "insert into ..."
+}
+
+sink {
+ // The data has been written to hive through the sql source. This is just a placeholder, it does not actually work.
+ stdout {
+ limit = 1
+ }
+}
+```
+
+In addition, SeaTunnel has implemented a `Hive` output plugin after version `1.5.7` in `1.x` branch; in `2.x` branch. The Hive plugin for the Spark engine has been supported from version `2.0.5`: https://github.com/apache/seatunnel/issues/910.
+
+## How does SeaTunnel write multiple instances of ClickHouse to achieve load balancing?
+
+1. Write distributed tables directly (not recommended)
+
+2. Add a proxy or domain name (DNS) in front of multiple instances of ClickHouse:
+
+ ```
+ {
+ output {
+ clickhouse {
+ host = "ck-proxy.xx.xx:8123"
+ # Local table
+ table = "table_name"
+ }
+ }
+ }
+ ```
+3. Configure multiple instances in the configuration:
+
+ ```
+ {
+ output {
+ clickhouse {
+ host = "ck1:8123,ck2:8123,ck3:8123"
+ # Local table
+ table = "table_name"
+ }
+ }
+ }
+ ```
+4. Use cluster mode:
+
+ ```
+ {
+ output {
+ clickhouse {
+ # Configure only one host
+ host = "ck1:8123"
+ cluster = "clickhouse_cluster_name"
+ # Local table
+ table = "table_name"
+ }
+ }
+ }
+ ```
+
+## How can I solve OOM when SeaTunnel consumes Kafka?
+
+In most cases, OOM is caused by not having a rate limit for consumption. The solution is as follows:
+
+For the current limit of Spark consumption of Kafka:
+
+1. Suppose the number of partitions of Kafka `Topic 1` you consume with KafkaStream = N.
+
+2. Assuming that the production speed of the message producer (Producer) of `Topic 1` is K messages/second, the speed of write messages to the partition must be uniform.
+
+3. Suppose that, after testing, it is found that the processing capacity of Spark Executor per core per second is M.
+
+The following conclusions can be drawn:
+
+1. If you want to make Spark's consumption of `Topic 1` keep up with its production speed, then you need `spark.executor.cores` * `spark.executor.instances` >= K / M
+
+2. When a data delay occurs, if you want the consumption speed not to be too fast, resulting in spark executor OOM, then you need to configure `spark.streaming.kafka.maxRatePerPartition` <= (`spark.executor.cores` * `spark.executor.instances`) * M / N
+
+3. In general, both M and N are determined, and the conclusion can be drawn from 2: The size of `spark.streaming.kafka.maxRatePerPartition` is positively correlated with the size of `spark.executor.cores` * `spark.executor.instances`, and it can be increased while increasing the resource `maxRatePerPartition` to speed up consumption.
+
+![kafka](images/kafka.png)
+
+## How can I solve the Error `Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE`?
+
+The reason is that the version of httpclient.jar that comes with the CDH version of Spark is lower, and The httpclient version that ClickHouse JDBC is based on is 4.5.2, and the package versions conflict. The solution is to replace the jar package that comes with CDH with the httpclient-4.5.2 version.
+
+## The default JDK of my Spark cluster is JDK7. After I install JDK8, how can I specify that SeaTunnel starts with JDK8?
+
+In SeaTunnel's config file, specify the following configuration:
+
+```shell
+spark {
+ ...
+ spark.executorEnv.JAVA_HOME="/your/java_8_home/directory"
+ spark.yarn.appMasterEnv.JAVA_HOME="/your/java_8_home/directory"
+ ...
+}
+```
+
+## How do I specify a different JDK version for SeaTunnel on Yarn?
+
+For example, if you want to set the JDK version to JDK8, there are two cases:
+
+- The Yarn cluster has deployed JDK8, but the default JDK is not JDK8. Add two configurations to the SeaTunnel config file:
+
+ ```
+ env {
+ ...
+ spark.executorEnv.JAVA_HOME="/your/java_8_home/directory"
+ spark.yarn.appMasterEnv.JAVA_HOME="/your/java_8_home/directory"
+ ...
+ }
+ ```
+- Yarn cluster does not deploy JDK8. At this time, start SeaTunnel attached with JDK8. For detailed operations, see:
+ https://www.cnblogs.com/jasondan/p/spark-specific-jdk-version.html
+
+## What should I do if OOM always appears when running SeaTunnel in Spark local[*] mode?
+
+If you run in local mode, you need to modify the `start-seatunnel.sh` startup script. After `spark-submit`, add a parameter `--driver-memory 4g` . Under normal circumstances, local mode is not used in the production environment. Therefore, this parameter generally does not need to be set during On Yarn. See: [Application Properties](https://spark.apache.org/docs/latest/configuration.html#application-properties) for details.
+
+## Where can I place self-written plugins or third-party jdbc.jars to be loaded by SeaTunnel?
+
+Place the Jar package under the specified structure of the plugins directory:
+
+```bash
+cd SeaTunnel
+mkdir -p plugins/my_plugins/lib
+cp third-part.jar plugins/my_plugins/lib
+```
+
+`my_plugins` can be any string.
+
+## How do I configure logging-related parameters in SeaTunnel-v1(Spark)?
+
+There are three ways to configure logging-related parameters (such as Log Level):
+
+- [Not recommended] Change the default `$SPARK_HOME/conf/log4j.properties`.
+ - This will affect all programs submitted via `$SPARK_HOME/bin/spark-submit`.
+- [Not recommended] Modify logging related parameters directly in the Spark code of SeaTunnel.
+ - This is equivalent to writing dead, and each change needs to be recompiled.
+- [Recommended] Use the following methods to change the logging configuration in the SeaTunnel configuration file (The change only takes effect if SeaTunnel >= 1.5.5 ):
+
+ ```
+ env {
+ spark.driver.extraJavaOptions = "-Dlog4j.configuration=file:/log4j.properties"
+ spark.executor.extraJavaOptions = "-Dlog4j.configuration=file:/log4j.properties"
+ }
+ source {
+ ...
+ }
+ transform {
+ ...
+ }
+ sink {
+ ...
+ }
+ ```
+
+The contents of the log4j configuration file for reference are as follows:
+
+```
+$ cat log4j.properties
+log4j.rootLogger=ERROR, console
+
+# set the log level for these components
+log4j.logger.org=ERROR
+log4j.logger.org.apache.spark=ERROR
+log4j.logger.org.spark-project=ERROR
+log4j.logger.org.apache.hadoop=ERROR
+log4j.logger.io.netty=ERROR
+log4j.logger.org.apache.zookeeper=ERROR
+
+# add a ConsoleAppender to the logger stdout to write to the console
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+# use a simple message format
+log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
+```
+
+## How do I configure logging related parameters in SeaTunnel-v2(Spark, Flink)?
+
+Currently, they cannot be set directly. you need to modify the SeaTunnel startup script. The relevant parameters are specified in the task submission command. For specific parameters, please refer to the official documents:
+
+- Spark official documentation: http://spark.apache.org/docs/latest/configuration.html#configuring-logging
+- Flink official documentation: https://ci.apache.org/projects/flink/flink-docs-stable/monitoring/logging.html
+
+Reference:
+
+https://stackoverflow.com/questions/27781187/how-to-stop-info-messages-displaying-on-spark-console
+
+http://spark.apache.org/docs/latest/configuration.html#configuring-logging
+
+https://medium.com/@iacomini.riccardo/spark-logging-configuration-in-yarn-faf5ba5fdb01
+
+## How do I configure logging related parameters of SeaTunnel-E2E Test?
+
+The log4j configuration file of `seatunnel-e2e` existed in `seatunnel-e2e/seatunnel-e2e-common/src/test/resources/log4j2.properties`. You can modify logging related parameters directly in the configuration file.
+
+For example, if you want to output more detailed logs of E2E Test, just downgrade `rootLogger.level` in the configuration file.
+
+## Error when writing to ClickHouse: ClassCastException
+
+In SeaTunnel, the data type will not be actively converted. After the Input reads the data, the corresponding
+Schema. When writing ClickHouse, the field type needs to be strictly matched, and the mismatch needs to be resolved.
+
+Data conversion can be achieved through the following two plug-ins:
+
+1. Filter Convert plugin
+2. Filter Sql plugin
+
+Detailed data type conversion reference: [ClickHouse Data Type Check List](https://interestinglab.github.io/seatunnel-docs/#/en/configuration/output-plugins/Clickhouse?id=clickhouse-data-type-check-list)
+
+Refer to issue:[#488](https://github.com/apache/seatunnel/issues/488) [#382](https://github.com/apache/seatunnel/issues/382).
+
+## How does SeaTunnel access kerberos-authenticated HDFS, YARN, Hive and other resources?
+
+Please refer to: [#590](https://github.com/apache/seatunnel/issues/590).
+
+## How do I troubleshoot NoClassDefFoundError, ClassNotFoundException and other issues?
+
+There is a high probability that there are multiple different versions of the corresponding Jar package class loaded in the Java classpath, because of the conflict of the load order, not because the Jar is really missing. Modify this SeaTunnel startup command, adding the following parameters to the spark-submit submission section, and debug in detail through the output log.
+
+```
+spark-submit --verbose
+ ...
+ --conf 'spark.driver.extraJavaOptions=-verbose:class'
+ --conf 'spark.executor.extraJavaOptions=-verbose:class'
+ ...
+```
+
+## How do I use SeaTunnel to synchronize data across HDFS clusters?
+
+Just configure hdfs-site.xml properly. Refer to: https://www.cnblogs.com/suanec/p/7828139.html.
+
+## I want to learn the source code of SeaTunnel. Where should I start?
+
+SeaTunnel has a completely abstract and structured code implementation, and many people have chosen SeaTunnel As a way to learn Spark. You can learn the source code from the main program entry: SeaTunnel.java
+
+## When SeaTunnel developers develop their own plugins, do they need to understand the SeaTunnel code? Should these plugins be integrated into the SeaTunnel project?
+
+The plugin developed by the developer has nothing to do with the SeaTunnel project and does not need to include your plugin code.
+
+The plugin can be completely independent from SeaTunnel project, so you can write it using Java, Scala, Maven, sbt, Gradle, or whatever you want. This is also the way we recommend developers to develop plugins.
+
+## When I import a project, the compiler has the exception "class not found `org.apache.seatunnel.shade.com.typesafe.config.Config`"
+
+Run `mvn install` first. In the `seatunnel-config/seatunnel-config-base` subproject, the package `com.typesafe.config` has been relocated to `org.apache.seatunnel.shade.com.typesafe.config` and installed to the maven local repository in the subproject `seatunnel-config/seatunnel-config-shade`.
diff --git a/docs/zh/images/architecture_diagram.png b/docs/zh/images/architecture_diagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce722546948f108857a760e795d83628edd147ec
GIT binary patch
literal 77929
zcmeFZWmH_t5(bJTNRZ&}?!jFGK>|U7yAJNbU4n$*PH=a3*WgaD0fM``%iHAMbMCqK
z*;?=STWc@a3^TjBtE;N3tG;i7(%O0pUXb@AHMB;>mJqW-_Ff|^f<
z4#Zi%R@!9@UeRhQ4orugYx7TbOb<{$=a#m0ek0-aC+tkmGaM#OY
zdh@45z`7a&ONQ4S)fy>01$S|{;4G=3F@Let>V6-=yH`LUQ~X#>$YSu*%aB>425#B=
z*;AggQs8zP38NRqTgb!fQxxt+xdGRaLP%951!rwPRvq8~$!`#!`5-}72&+q8pBQgO#YbRVl7^}zCt16QkrV8!9uq7M
zrD0_3;n_}s&i@6kK2>M6pz?SPNL%ZGM)@hj_4@-UKA*E42<;mkutWuGM%xtfGJvOc
z3PafePv#6y75ycd@!B`t`w16Y*MkL%StoRAN{KC>2dGbF{zO$Trx3RUAWwYGovKCA|
zUTG*%WBnWN4HiSkR}{f-#9lX$vs(5@SWH@Q$s>WuHf`#M#c`$3RnB!474nCvt!v-u
zVf%9UM
zh^gFmYm4Y|{4AZuy}OaZYp7~%9*u)3QoAR$vpOL>_FDxXrLeA!nvYf7jpXaIjNpK$@4Q=nz^6
zFh_&inCg$hP)#M)u2F#Q1$@uWzNC2F?e39K4>W}1vWbHqy52C8P*T29%=`2itTHg^
zb$?h-XHSo-64ae}6m!-7c!iHFc%v5=757+8onq^E$Co~q|DhtqEhR1v^P0hw1fGHo
zvaq9nXb8XU%jTfjz_719wXZ39Mr0VL{*@dQDjIP2mLxgGCm6=M`H<7&@p2YNz>Qs2
z;8Ka>EQ!NHiR#h^8o9%wyfyDBd3IlUv#*L+r45@tA(l!Sd{Xc^J2o=zv1+|HOw`zz
z3X4(0|M_8Ch^}}j1V)nN3EuRJIsS{b3(!^~7>ZoLJn$c60R?;sJn)4XCL`JG03u@n
zTAJ^0AxKeln1|;GghYwCDx)_KUhSW?
ztJ2}%59Vv}e>W2sT`||2{i5nxqDwwkw}R^}a6mh%P7>jyJJQRikOxeG0oo5{Em4>v
zeK|_;vqZ#5P`kF=!RP@Z;X`9zNHNEbsY(lO-SX^O=IJdC5U$7bWYYL?$M~P2YOM1+
zwIOfV7GD33=Mqow>DCQQN!87k2_zm9yp=3P4-zF*9}Kr?wLtv-YhF)I*7>Gp5IWPP
zC(TDi#h>As$c2kRMCS-6#rx?N6}QL4@xx8lJa@DSM}Vc0cK7H4#r42RuG%975T6680@
zyI~@pD(B~XdClLTsc3;1K;g)rZ-oT4iU7V|az_bJ6#QxPwO7+H>!al+WO}&R5$0FB
zE3gUINBu=;6oaigXnCg%F`1!y5Z{_IDVP>IMa~s=A&5pBquu5;DvE=VPyv
zKat!IZNEFaF@A}Q-FQF7_9`lRaz4|HnInJ`8@_#|B7KqVz?*ML2*_5ym2jBEHlo=*
zci#WR`H^u%?b2q^%@R*M6la3McXf908#AvCyiIdWCDj2UaeA+ZdRbF$@e<>QHYUV_dLM5<@J1a8GzoyZO7BsR+
zSUmCKQA-bYqOK~6{Yl5f;fX1Llg0cxPN@}pNjQIgMoq*WT>B=%2{lf|l^e-{>k=B6
z9T|ptgM)}a_+s#{k=G(Wegr}Q?eEc#ngKu>tjv$umYT^B4rB(~mQKea!0#{3B2
zIopVyf=vEmT9Dx?Y50%O7eN#IDb+?Vf_jzp@$vo$vK-Fi%8BG4bp7-?Co&BFDiIOy
zk02_hwTzEIvdamdI!db<1PF5Uz%0xCm!MorFFpkI^B;W%9}vK5@)0A6{}QxL9-id!
zB4}(or7{5SV)vKH&d*@M-YoMHj*S7@cfT!rn0}1V9@r@`FIt)o}e%fBOuu|vynf7&uAY;kORxX
zotI17bCpDG!*%0qN!^uJgf$2eO>*_%)v+T8Z)1FLrqb`3Hg|f;w2-CNgU6y&)xNvoSy4h~p--=6F6UEo6yP0*BQ(c^hRX9C4?xtpDzp
zBX?c-*U}v>C5IhY0fGF^rvtur*axp04ML6mw5gGh6)R7i2X$C+W9e_Dz;a5@E|TMu
z=`G1Z=>xkI5;R_Nq>nlbnpFRtr|HvR;hg96167aAR*<3m(k*+eGf%0`l=|`S@JVte
z;T}?IGWV<66BG8YX%kQ_%&6nCx|U?Fc0sGu0}WIx=;7bZ!{dhQFytJUUqx)8^n3-Qgl!B-a
z__(syRv?RP1bT2e*F)o;MFzJbDzCE&^{@4vx?QlV&hQ5wR){*HAZ?08<0@<|pI;kE
zJYnVvFbC6Mi5R8cJ`vKyET4Bm<69-Q-EmNkN`*JGOp#_ed6)Q?@L#Xc7vBlYxO(k+
zZ45UcK80e@@Lo4kZKquw@|~E}iHh}kAuT0e9to{jIKlBlA6r(n_gdR}-o0C4R32Na
zu~`zCaAht?pt;v(4SLo>ylI`Y2bX9tt4*D^Z}$}JxOnu}^}peA-Ex&}q2H(jBEao!
z>c730#HqNxV%UfrO_B+))J}MHx#!QdRqWw}%VhSQrWi=B2yMo&w4}xP##uRI%j--&
zBI*P^&5<&?T~}u_)`kc3drCS?Uf=_%X85F_YLLH-e@W>LSA!gGeR@XBcP!LU
zg$cCK$dLzAhC#m6#g!0Imf@{i^d@qFs?d_<5aXD!uC$?L|Fn3d*)@?kD@K8{tjDdi
zDo5PO*(Zrs2>RnY>{w^P+`BYM|B@Chdqx868R^PDZb=%zW<%v$0pvh|Vc|$0N$z0K
z)cd6hlk9h6DxND*EAq1r#;fJ$-5co6<3cTa-b1h4Y`)?4dM0)-p?7(`ST;DYQIs52
zN)OshyC~1=s=LN^dHq|IbV0IUW~4u_)EnDu-?(5nK`1|ajmfAF@>Jo=0UW5r3p2@t
znyxA3^_U$OBqtvQxu$CWUVs(D9EY7Azd?Hy$AjUh70rNl1|b
zSH}`br%Vm@?=^kzo(emLZqjY-KTA3BmNL!tYKN%HTGqF>k=R2CS>5GA+YCy>tYgNv
zz!?g)6uTEJ+RMBtfv^2E?B*QnrXqD~C)_`Se+@p2db~oCdOH*%D8M28D4Roa?w7CZ3`A-
zsU&U70Tx{wkCHMJ(}`XgUci$^Ig26nlxH&=`<|R>;|^AP4c%Oc42HA7y{!6SF6DowjBq
zZSK%^dj?kdu0?)#+qOvq?C)Z%sX`$SzqQU+bj`^EhTMb5LMTQ8PY7U%gvvE_qp>t;
zlY%+aRpp0-plO}m(9JOjTHKS1_E+In7WhQo*D9cq$Dr@9sN-n(m+}0scOQVjpdl7K
z_z8Udl*MYdCZRi2c5l3WO=dC^C)E&3uZpXI|X)#
zlr6wcZydKexe4Rz*##ETgHeN}b>Jlk1D{a*4
zGC|$-htP>>kh`;dbueqK?@{P?3nzx3jqZy(x#kf10M6IpW@M5d8@-q=rz2fZTkO_E
zo~1@9!VcO@l~uU6p0+W)uitwW`QZE;On{p%^h)2?fki#hFObzN>CuqCwCV&V9@s(l$q=KL6F>6A<=>
z`(KB}aYYM%0CGO^uD)K1x7tv_bfD=jb30O}=flH2hA;->lyrfz!BG(8n%vN5@Ki?}
z$2L_hmn?D)ym(Ia5kH+%B5V5?7kDw3TQyr!u#=>y6m7huJ-C2xC@wtB%8wWejv}h_n
zN0-Kl6>jHD6majr>~O+TSTGv`nYuai(YBnyn30XjLgLkBvZU_4cx_}{sNBb83p(sk
zZ_5u`Ssn+CE=g#WU%sh%u1mu=B`s6hbfix+ttEbQCdE(8AV8o{FPdUZhkQbyToaSe
zd#DkCPf2Q@=+Kvrz8v=27C#_*szVd}Vl>(=ZDg6N#J-=3U$K2wUv%9iZ9LNm@|z!{
zCF@!^q5%@BtoebE;FQ_GF3&wrQh2a&d3uC_E2)CxNetY1idpxRG&T<+&EdZKV8TS3
z0UhW*LZM5U4&{T=Af;eT0*jaGg87S;3`vJJ<@TIC#2u7;o9NhlIH)uyO}-or+q>3E
z9hrKRym#Xq4CmH;L{{V)RUNaoSs)s3F*27cNn1h;*Htar_EH}UiK?@XAFLX(5!i2C
zkawHfEZDJ4!IM?~)lgsDo*>;C`Xwi8BXNKFnfPrLnI(Qm?cG-A^TIQ%`&IO+=w`Uac?8!%wj$Mf6>*IcfXapld)-UgR79B@tBY4H>DSVV>X
zcWIR#ha9a6bD|&~?DZ~6$J2J+BR6b=Qv8o)U5oTg`vJofj{O{|NbNW0%D8)N(yBky
zQR8`Rw6dx;*Je8?b1R}tkvPfe!H>q}X`iS2+KfV#oFrA`rOYY2iAQ|}Gw%dvL}q4-
z@V^)%_NBGAy&gFhojI_mxQ>1j8>2f>zkzy~I{VI1YbMu+MJs~ifvZ~9rBE^#F_n?KD
z!UWT4OdbJdm1|Bciyy?BSx5XdAki?}B{`^5pjOJ+_9(g^o#GQ0P~uj6bPJt^Zmp1+~X;WYn;FGYhkAm+JSLF
z*-`!x&}?8``!-I|T6y>MmYFj#D$ZStcvJtF^4D~hB8=gPqMZ?O9_WT$_m#tlidjOr
z$YHy*u0SKJj@M02Q;ph{qm+{*>$NYv=Lma_=e<*mhzc@YEJa4gki_K1m;<^Vg*(@gU^IhirX;zK9QGo`@tpG$MWELAIW$$
z#nbA8+IU77GV80j+kI2cOOFP*7HN2J$}V=+%|Y;V`d0;JCNHfjT{FAt0h6MyJszb^
zs`t{YF=Sp8P8-zKdaBrKc4Vuikz!LEU_v#lHp$ZL|QQ%iRsM%NuN)y
zEcGlssMeLtQyQE#^X(;F`BM@5>7m-EPSluYF&e@M4de0PkOhCKK
z-qoHR4KDa)p$XE+DRbSKT|UC6hfc@n#|T8^hX%w#8jm#)q{W;U2}WfXM~gPf`Ipa=
zH@nk+A9KNYI)I)gQ%lWr10&W7n{$&F7mMm_yu(G6|6&`=kVgx;4oC$}=3K~273F%!
z4Z?&33g))0(%vtDAhjH}48JGCL4)5kUU#WZJ8M-hH|ZQk#EE)Qu#vfg#HPOC6g5kz
zcrfJpj~dApa#m%;GK3vu#z5%uIp#GZJgtMsc~7@x7K&S!(}j*YeTXb
zBv%~3@E};*KEIF$JLskZbsugMRi~epB&`==DT)j3?M+Bv8lV7)`2^d<;*<=A4-zTT
zGCQa9tHcFtwb&KTkCjLXKI+s4slfzW%bCdo*$kPDPFNM-Ufm8GUzncr&B>YbCOO-J
zVoTGrZ)#5W6vqme8RgqO3rF9Q(tBUk?&MUtDC9<6UWFAMv>XwsU*cjz96>rmT*VIF
zXr4FCqo=o7t0=&$Uq+v_J}bg94?F~@%KVAk^$qkxQ4vK~3B0C-sHF7D1m?sCh1Z3j
zis$=Uyu#gdiV;wfTkl>46SPpeABVtVXMy*zGjhhJ<213^WsKA}DHC8sP9v$Ow>>v*
zb7WZs_o_6WRldus#Nl|m7HISjat-{6)uhZN6yX+aaBr@NH|6VmZ6hozlw677KZpZ<
z&+26<1NE6w&xn*>kM-$3MdN2blr$r+9C5j9cAT`)`G*$c4Pkn4w$wn*!Ka@k48kp?
z$cpNmJaH;j^i^=kAcTDcb@i0~wU4sQabhV9EzH>B-F|7L3g_9vusy~Vpr~~T2G;L=vd)(Ys=Fi0pG(Pr*-(j
z+cZHp++Mnxx3u9GmbG%9KNK<;=YEivvnz}i`khvEHT99U;UKuA#Q{{}f_(N{iZad8
ziBb(}871yh@mxM@O|CngT$jK@i$-qGr1Xkr~%k+cvQtl0kONFeqv11t4sxLV5
z85e4_%I@EJ=ZZI6ZsRMY4}Um#on`P|NJz~XF;iP|I<8gz^mSum@DwrHgcPFVP0d0^
zE20PGe$YZj`*JV`p{v5TGa7G>lKV4dnEnTA)f!)+aMZ8t5V`Wjvd@bBz%GjJOA}PK
zTgFMldmlWwEKe??QU}c~!siSDeQgC9lVz$VFixzQKyC$K$GpiJ3Tpe8^jaAy8cgA
zU6HThuZ-JOQ$=X0`-=jsQl(kV_LL?tOaug^0v$CscPo|Or0WIM4tfH`w9vOzkW6Gc
zu{fnc%>*6Uu1=ll({(!O9}6=;I~x!QwoKFB>UO!pMeetr6>$gVH+*?s<%1pZgif-T
z)B+m;K_13p$f*ch<_-^fyl`u2F3gN&Jg;aW8s<h{O=7Gi7k=fMwi&UlJlpJWhdT8vD}rf|dMJA{x^9!bQapr6Q-ne8jNkf&>Qy5k{Fc>#Y=e6u>4yZq}=-`={W!KIV<24pdAD
zb;S&511u>nN~SquU-}yt9>ozNNqldD78EP_$cZ(xxD<@W?%;AT>OWMM1XYmF8@{?@
z9+lw3uFxI|S}tKJi(o6@c%a@*WbBI6{=ySgY
zH5Lu1biG)TAs48fr`68?t5%w3BQ3EmpH7IMu_`m`@-W>Wb-}m#C4c?rFw`*0#r|lw
z286^MdrArmQ93S9+J!Rz>sCTej9hHJn1|;yEv+1jL`Xv7CWKS$>^|w5CmIm`iRmdf
z;>?3uhJ}lt2w(v7qkt9%2a2MuhSDz({TA6-k*s2outHe4gqx{>5C#2$85Uc2GWKJ8JT)
z-M>eOdYPP=(gI)KqTNJ6cun|@pqZ9IwJazt1p0w&1U10)@1XETp=`N*>LW(z>+j9E2
z`rJ(rX8fc*NgsyN0@NlwZkt-BpZ&VTw+zPJ0?B1qJ)<|CWeL`n$|s%V8X|wlL0FByX{Vm)p}xq4)jVHt)3-;tC=JA3GB9oI^{Bj?ZyXZv$S3aN*Uo?{rf5
zt1=M`jO|rBh`w7wocPoTp+(n*kFZR?9$X~rSIv=d5DDEO9)^DS!9oY;ud$dGgKg>Q
zW}jNwk%aCYTlVIC`X->87D9S7HdA;-y1AOdg{*j)&Tpf#!KWT1JeVZvtXR~0yhQTB
zyo7w2`uc^?&UM2<9$!Dr9K8n{rI@T`=l?{jGCXB+K%8LLS|fU5d
z%OpF`!&!4o@sP(YZ=|3(jT`K0t|+9OmcFLcU_6i*Ebj_SN2pG(x05qNr640l5$8}7
z6FM++LaQCqb$mWWZ5q&j6=1n`&+`%!N*vdGMP_*0zW-D}088$u7hAnV1a(7?{ZU1z
zt8|E`ao>oVL5dgxpQ*OINGm!>MSkRbGcOM~y#zR683_wQoE*q>o;S8t)F}0LzERQq
zQ1W@unvlZ-3>~RQTEjtsY%9X^oQ8>G+VAe>YvJt;`3ERN{e-mr+Z!#T-0
z$HDDEuCyz|mvllTg@_MS7{)JzT;h=s4_QO5s1n*PI3mvYLYq_N$4ZX$@Qk0tKcM0X
z`jIJ=m;+o7m2ijeX6k~hRr-a
z@EWw&kqU8l?@L~VaAIZX4oWuHOb-Dz4q~4)yo$Nj{oelfKk!
zZ*1Mep1qpO^!@Ty^|xI@k;VGWJ6@YWA{QUg%f(>{={O@^x{?uEu}N2U#RO7k=)?G&
zHX)_M%$s{Dn|q`X?%>Tu66t29B+dYsnLJ&KQM&(owS)UTi=T;E`I#QzNEWs_GI4L`
zinhDe6?~l?k@8{uOZZT>IpcibV^5^MP*=Z2p|?v6f`v#~hh<7|^j5AiZ=YNf_digT
zg$<9has?a=Wkt+1aUUYFC`^)1Q{4*idHJdwKh&1Bb750{beM4XOIYibszsSax$s{@bt
zAINa~gv~0Y#-N$^?gXP$5Al#Zwbm<}NJ;TOE!-_?MMsD}=Ps#42`~FrI5kwOq2%oP70do3znWrs~;cs
zn~e8Mc+>8;zP}n&XIhAXoy)bvkVD~5zM$qxdtpZl5;ZaI!2?7aYP^St|KrGBEA`6yj`RJwZ7`cQgAvEns~oT?y1pO!GgNamI4t&;wFui
zT+^V(5hkf7rAvFlq=8JIwje%MSI8kJpUx{=PCV4A&N{2%*5X+I$)BN^X{D668k(P+2m{-=QzwAi%KUDF2}i?Mk8yL?G}}JxBmhUdft>7Q}K9-
z@USojf9RLJ%R;2|d`e5yLo-#uEq)5qjF9R6hI)2vyFPnjVf_=Eu-w0%kp3ar0CT_H
zrd3@LtN5PxHX{H)UCrkN_FHT;EIQjoQvo*@z`z7kX~8`kr<oZ%
z$fw*35$GTRj@YPa-|9V&JPG7azjx?5P$zY#S4&?NFc6oy1``bwHsybONl9Kc1%e?7
z-|iHcYv$}g)E7foL5bAS0`~mLP&
zO6;W#B7qf9(lr=C=eA9+J=CfZxnAP87NyVfgb(E?RIP6P8SF2O$G0dG4g@*-+-RIF
z`MYX63`#-tg+nnxvkof=rVT2x+)mqt>y1G(!=X**O0QMha+R+u@|#4iJcOs`#+)$=
ze#M9#S{zlXmGAB-srb$mA}{8cxxn#0?b7|Eag^I6TJshamCh%`wzxIdg;;<);aY|1t`oVuWveIjsUl}K-&1+=427>r
zbwW0lP4`14+!*d0FDq}mL&*L@{F7PKg3z2;gSuq_0}8Aw7!=jV)qOcDZKS`0oj#q(
z7NQ*TrxzIIUI=24J=@=VH^oy1m4dxf>87pgIHx!bS^Az@Z=<=iVwC}D&*ztMQy@KS
zpJ7pyNS(Rdk;EA-v9@TNcAr8yv~@D}KIEJzY87Q8&Q3Xhf1TSQ69a#vX}QIXI`a1~
zVG<|^;C@4EuDeht58U(wVSWrkRXIIy!8rspwONX>^*
z9;ANCg*?9X^~F2!uA1dA+Mn@cbj<0N6{R_N*pA+THm{;cp-jzXrl;tt+b}Bz%PF!mJ{SfHgtn
z!Ctsu4*4G5mkeSIf{zm(lpC5b26x}+EfH|1j#4F;t5rhPZ-@8Qu~BuUgUbf)T}3V7
za=bY(9}o9W%T1^QtvYTKw0x0Z5#Os{XX;;f22N1wJsXlIjoriMwF|z|ZgPOPcn9Eh
zx{Lw5PCC#9h-xmNA-1xNgROkpb;$6%G@*gMmn!zRv|~B~cJ1}Dj*+B5eWw*Vo?Nw(
z;-%T5bxc*#vQkozMZyWE?VO_F4>`HCJH!Hzw~YhlN}^B2gJZMu#W
zI$sToh=U{d3H}~mT}YQyUxbS0>iXD9rBMRH_$etJ;H&jzB&sLfSb4r*?1@Px)FvOSoW1h%w9bwfpYzdJ8$U
z9DM40X2G|xP7I<4^$b!<$Ln3pdE6{q{yZ8U9iMJS);Sdx{u*xFldOO5$w-8k9^ngJ
zT>s2&wzM%2b2@y^EWGc8w}|N@q-a&UiU|ut@Wi@t@PKE<`rvXkATeHNb<+l}(1*7E
z2g;6}N5fZ@|LyqT_sGp<=;J`K{vpDz=VJ+%W;cMZtyYIP4cWe|WUotaYCceB+jd@3
z8NejeE=E%_^PODNLwna_IHCBfQXE?Fa(|C4wh(WsZGN3&Mb-q8>RZnd|K(-mXi{MQ
zN*~{-2m?xf&0K2G9)hIM$v2rkVbg}pz3MbE-%!g84~-(0M?5TG|Hy1|2NfSE_^HAQ
z*6zBf2$t^7p7^}Z0Tb>-r9~Xmg2I9u8+OFTg0dSBgZ4V=4uVchJjFjcRn3JQ{Xl+r
z>(Y!`a=KcloDMxG;oeGM#g4?ss&FE`f}}W7xv9iikD@I#SV38VQdee0CTXPuf>~mC
zW#PUe2rf=u>+W1au(UEAD+c9qz|J=w%zc2wr_(n)iulm~{nc5W_vu>C&8>-R;Q)Oa
zoaDeR0G}mLqN*$Vtyym!05W;5cVgrX{M>{mM}Rhf71Zrprrm5XPI7CR!7?jB?CH;_
zS=Vu#z$|<69TuwD=}`RoC}_d2UGA5otWF(VVm5l%AWKKI+1_YxN5rno2$q1hw#U*_;1*GF
z@LLF(fgqu-OBf>g%`;!J{?qI17LaR|Av^ozUXE8n+}o%^fYGFx}sNTnIyJ{
zl`O3pDkqho#QhEJUL*TryA`4cal|sP4!Tt~_lJb5BYUXouF*}|DP@g@SSLX@v!0*2
z7aXFWdd=Yd!EXDLW$ZWc`X>L)cM*O-PyA2S=8MLIru3VS9Zf(Zv~-_OBaPw(1^06z
zh3XFpM!4(kID44If&VELHCj2$4S9&_*fq?&O?rVBKPr
zy$+ay;ZS;ZjBqw^hf4y$>0T~9M&JW8XV|5+FU^GgyYP5w$QP8SEo;8ypEpFx18+wk
zOilSj@B))I+#Y8~drQh^@blZfb;IiGuD|AsRsrF=o$gJ<+3OI-D2K^}LKLEh#yuilbK@eM6P!fEKZUFss
zoAkv~=;1*Q47>5CopZ?Sx0p{C-R~nW0)YIQgM)*KP8_A>G{P6U%O83QyNu7+*yFXw
z*>Z&Ev)4{j+rX|v+sG%&U+t7j@1ewBK-hj{_kXMQ@0)jFKyA&efamT1iHzlg3JfDG
zqhIiEkNNxN6S-be;)+BH`5heCR{L~kGvhK3cp<-fwJY0zSPkW(#ge>zxQ7#mG$EFqF6N7yx>+Ci1do4{(Ex(j&Uj;deJsF0QHz;5+kyjoEC$_~_pSS|$$S%qI-4X<7vV$}5RLg;
zRCK5hT9wui^^aNdl(LT&t_Wbb$DdoDN%Ry>Bs#x1{pF&7Ug2N7G;`5x6!b}B2mlJN
z%Z8&NK*sn9VZ^vF|1|;#cnWgB??4xB{`Q<^jB=#-ndx)<2r!=zo@mrYnf}9!BguRT
zBe8rVKSE!ms@pFPd=?=Eqy`zF9sh@M=L-VDMslc5gzYF*=_W0R`~p2$!q?|xC-JKx
zFy%j_VgOS8zvT18u)IjM2>noM_n%F;WgB*xFEKoL^`Z5|r
z$)unl1Ewv5g1FZA3nNq+W*Sq5zYcip`2X$WfCp6IK@#%Lo~hVt5X@QhYAj(?0x_Hj
zmfy@T04@>r0jul1;y<)x4AT%Ff$KJeY}u=k21KCMsJXyo)Q4c1$ZGPxhx>1m8Oskh
z7DHh2$)8Y-G8>crFP;U2&cLNA=;X@y{K#5M7mB)7V;FA(^o@hR%|Wu`g(1{y`zcRn
zSZzpCx*rRwC&rPR%c9~onigZtz08YmWw(U7qAnwQ@aN+ZP1YBU|Z56uD?m2xVU&*jq|G|hYR6zAFTksFs4nkB1tN+)}
zQbP{a-M)L6K{F(+=IVxT5u}BFT$uNjBiotJS&8Tn;rxfG=Dh5L7}lIl(SXqaY56fM
zmFMU1kD`NN0mDm()VBLAN&vBd&Q=#jI~n5vRjohoABKqm#J!lVkzU!!7sD*6w3fbG
z0$ve>f%_{cNRs%zxJ)G5ND@MTCDP<@e-fq>YJ?~$K8uLczjnbtKkY<;C9u}gClsXt
z(Sl0ROYeb}MQzrsDcfHff`Ffr>yRhagu{@VSzRpY+#)}9Azi75P8;QAEuZw!f-cF5
z1YrIop`VWZL}nZ|2qOOznzF<@Xh`>QkxLdgy0i1+SNFr83cy3*-Q@qhq&mdYr9j6=
zx1YDJ^lLfz{rImc3)h9MCuogbrW*~XuPRkX>x>hcK{(7gTl*Q_ySZo*zt$aMg2-y?;n|?!1j-uF?+Cg%OwXuaxL1E)EM$7$
zBDE0?8a_z0YdMD+cj|wotjHP+DTmjJSby>PAMC@+umE;+gl8U1KCAO0_1$}v>=*HB4
z511md0|rrjNDd-ztX%l0q6&s84o8tbB{gtp^b_RKH%md|l1&-ZH%(>xsF@WFf5VW;
z$NvdKR(=E4o}GR^ogThE_P_2}qB*>*-xHji840$d?h{RE0|CtNWffY;SR6^lUNzzY
zU`={bP5y?8I*xD$r5d5vSHCr*8dr2~*fcU)&S?v{L2n<*W>D3LTJuy8o_0R#jr~Kj
z+%MT)UxLiYPpOwZEw2UKzZ?>I*{so(K2bHJebp)?DmP@N&~NNzi!#`p>I>k9m5-th
zoy1F_QyzA~G`n0?RW{l|>(?BTkNPYCLLR|e7S`o%xhnlzxE^mHd#%C=KC6BV??k#N
z(`3?bpR?9ONN-1krRA*a`drcY(E2q!;ru}UY=)s(zA=fB`&uiH|P!(y@a
zD_o!am%--gxlQ3UNavB2XGSlmK;CzBI!vN|%Q@uD>jCPDPCL)mEJL$K8(({x1oTjr!0&L<`AB@xhda7R7kZfs9d_+?u$437VcWE(j
zkmIfMhMtvhopT>>=un*~h_vF|B)~}5saS^Z;b9Bx1^}ln3xt?lLNN5NycdNne!hL=
zK^#v#Tw=c6&tssUlg9t|Rz?Db2MzBj=Ac%N5~QbDrHJB9(qUld0TgxSCEf0XR%|6xmW~v$tzU~13G0gD4*b@~j*Fg`($k>5N8gVtvR>7m
z-bbG854ve@02GoYa+xdmt~Psgf`!@cg}Zk^WGk%AeW&tN%2yUQbB0lc`az~bgcAV2
z?a(q|b~FhnA6hU9+!gJ8GFKE)Igck@ZyzJy+1IevfRQGW^vzQkVhmn@j6)+r8~hW>A)4U%1rp6F_jsVKYVy
z7rZm=mf-~sS}a!c>@}tnSp#k9ZhN#P8nsgJ`%S9W*47_HoHhsJ8V>6gPOcVgvW)SWs!6ewIs=O1gL#hplsn03wvKzG?6(V&!UFGvWBer7JwjZaCHDq6!dIbr3#`0v9Yn)jc{cZ@q7abWbKEi1oKe
zQzKcIr;Am)t?TJ0+WV-Gy_mvw@%<@wM^}7Q}85xnHKgYERJ)DSo
zoR4t1oc3S?Us3RFFZ3Wyz+GNm-X~KuXe}p3b{-|7#^zH$lUjvv9Bhc^P&}iep|%s)
zNGfsYay>$5t+J0u@%o!y>t0duNiV+5%4r{QA5i6a=X9Xh73Ijt%YiyGdimLUUty8v*qw}1zq$$q`MPca%S
zFDAJM0pK%|%|1%goi`Nf_7YhDnewDgPzxTs))`PseJm*x-2*3`PPVHZWmDMryCp`j4cp&emJ+A5W`-*KW^`18{^NuiwQjs
zC*-r;j8k2Eyk72eUiJ*yFK;JG(E1WQ_%!IX`h4I1toXRSv9SVpM;~brfnPg7xHb&E1YOTwm$KP
z(+b>IGe0oit95G4OG4Rw6dtr}zuTi{&}qQ|iXQKSkO^(~OY7+}=?tt#Q+N`29nEVG
zqt)XMis9a)`jatOaVDchkWtN+YUaa~!huUl7;2X}Z9j4p?`GTS76czJ6yucRq<>a|K8y8R&s9Lm3Et+=MImcNTLFA0Pm!ywWSd^T
z;}+=r>a*tc=t3;W->vS>lwUTFSy}1iR$_-shF33V*DaP+v|eL}k@>p4&{U=S-R>gh
zk2`V!P7gpQ$(2C>AE>K#*-zr!eBoukqm@bC9vftifML>>m=ARASG#4s(&CpP#KB}v
z01WOQ2NDJyk57DfB=X#RNC~MwpcYXfv+f}`*1eE4L4gN%_k1gs95D53*~J2rAZeT@HpoEl>OA=dTva40G04f8}+M#LW|R(M%=47
zRvpxO_v<6Eg*q$c83q3X+WZs+>5}h}ac5ezpNTlkWAE+*%krc`#QLSgZ%6r#OO8Z-
z)`rsOj_P`x2K*nCy>(QT!5cLSNK1F8bVy5gNrQ91^fWV45f3xcA+b*sNZs898{>>;=rdTO6fgYft
zyd$p?(V_?PgPiM>+?0xVxAfzq0ru`QqRzmz{n|Y}y64+ev|C0ZT<~a7M&QQu>uc