[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-apache-seatunnel-skill":3,"mdc--4zw9hj-key":49,"related-repo-apache-seatunnel-skill":9779,"related-org-apache-seatunnel-skill":9788},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":44,"sourceUrl":47,"mdContent":48},"seatunnel-skill","synchronize data with Apache SeaTunnel","Apache SeaTunnel - A multimodal, high-performance, distributed data integration tool for massive data synchronization across 100+ connectors",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"apache","Apache Software Foundation","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fapache.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Data Engineering","data-engineering","tag",{"name":17,"slug":18,"type":15},"Automation","automation",{"name":20,"slug":21,"type":15},"ETL","etl",{"name":23,"slug":24,"type":15},"Data Pipeline","data-pipeline",36,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-tools","2026-07-16T05:59:10.321676","Apache 2.0",6,[8,31,32,33,34,35,36,37,38,39,40,41,42,43],"batch","cdc","change-data-capture","data-ingestion","data-integration","elt","embeddings","high-performance","llm","multimodal","offline","real-time","streaming",{"repoUrl":26,"stars":25,"forks":29,"topics":45,"description":46},[8,31,32,33,34,35,36,37,38,39,40,41,42,43],"SeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-tools\u002Ftree\u002FHEAD\u002Fseatunnel-skill","---\nname: seatunnel-skill\ndescription: Apache SeaTunnel - A multimodal, high-performance, distributed data integration tool for massive data synchronization across 100+ connectors\nauthor: auto-generated by repo2skill\nplatform: github\nsource: https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel\nwebsite_source: https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-website\ntags: [data-integration, data-pipeline, etl, elt, real-time-streaming, batch-processing, cdc, distributed-computing, apache, java, docusaurus, documentation]\nversion: 2.3.13\ngenerated: 2026-02-26\nlicense: Apache 2.0\nrepository: apache\u002Fseatunnel\nwebsite_repository: apache\u002Fseatunnel-website\n---\n\n# Apache SeaTunnel OpenCode Skill\n\nApache SeaTunnel is a **multimodal, high-performance, distributed data integration tool** capable of synchronizing vast amounts of data daily. It connects hundreds of evolving data sources with support for real-time, CDC (Change Data Capture), and full database synchronization.\n\n## Quick Start\n\n### Prerequisites\n\n- **Java**: JDK 8 or higher\n- **Maven**: 3.6.0 or higher (for building from source)\n- **Python**: 3.7+ (optional, for Python API)\n- **Git**: For cloning the repository\n\n### Installation\n\n#### 1. Clone Repository\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel.git\ncd seatunnel\n```\n\n#### 2. Build from Source\n```bash\n# Build entire project\nmvn clean install -DskipTests\n\n# Build specific module\nmvn clean install -pl seatunnel-core -DskipTests\n```\n\n#### 3. Download Pre-built Binary (Recommended)\nVisit the [official download page](https:\u002F\u002Fseatunnel.apache.org\u002Fdownload) and select your version:\n\n```bash\nVERSION=2.3.12\nwget https:\u002F\u002Farchive.apache.org\u002Fdist\u002Fseatunnel\u002F${VERSION}\u002Fapache-seatunnel-${VERSION}-bin.tar.gz\ntar -xzf apache-seatunnel-${VERSION}-bin.tar.gz\ncd apache-seatunnel-${VERSION}\n```\n\n#### 4. Basic Configuration\n```bash\n# Set JAVA_HOME\nexport JAVA_HOME=\u002Fpath\u002Fto\u002Fjava\n\n# Add to PATH\nexport PATH=$PATH:\u002Fpath\u002Fto\u002Fseatunnel\u002Fbin\n```\n\n#### 5. Verify Installation\n```bash\nseatunnel --version\n```\n\n### Hello World Example\n\nCreate a simple data integration job:\n\n**config\u002Fhello_world.conf**\n```hocon\nenv {\n  job.mode = \"BATCH\"\n  job.name = \"Hello World\"\n}\n\nsource {\n  FakeSource {\n    row.num = 100\n    schema = {\n      fields {\n        id = \"bigint\"\n        name = \"string\"\n        age = \"int\"\n      }\n    }\n  }\n}\n\nsink {\n  Console {\n    format = \"json\"\n  }\n}\n```\n\nRun the job:\n```bash\nseatunnel.sh -c config\u002Fhello_world.conf -e spark\n# or with flink\nseatunnel.sh -c config\u002Fhello_world.conf -e flink\n```\n\n---\n\n## Overview\n\n### Purpose and Target Users\n\n**SeaTunnel** is designed for:\n- **Data Engineers**: Building large-scale data pipelines with minimal complexity\n- **DevOps Teams**: Managing data integration infrastructure\n- **Enterprise Platforms**: Handling 100+ billion data records daily\n- **Real-time Analytics**: Supporting streaming data synchronization\n- **Legacy System Migration**: CDC-based incremental sync from transactional databases\n\n### Core Capabilities\n\n1. **Multimodal Support**\n   - Structured data (databases, data warehouses)\n   - Unstructured data (video, images, binaries)\n   - Semi-structured data (JSON, logs, binlog streams)\n\n2. **Multiple Synchronization Methods**\n   - **Batch**: Full historical data transfer\n   - **Streaming**: Real-time data pipeline\n   - **CDC**: Incremental capture from databases\n   - **Full + Incremental**: Combined approach\n\n3. **100+ Pre-built Connectors**\n   - Databases: MySQL, PostgreSQL, Oracle, SQL Server, MongoDB, DB2, OceanBase\n   - Data Warehouses: Snowflake, BigQuery, Redshift, Iceberg\n   - Data Lakes: Hive, Iceberg, Hudi, Paimon\n   - Cloud SaaS: Salesforce, Shopify, Google Sheets\n   - Message Queues: Kafka, RabbitMQ, Pulsar, RocketMQ, ActiveMQ\n   - Search Engines: Elasticsearch, OpenSearch, Easysearch\n   - OLAP Engines: ClickHouse, StarRocks, Doris, Druid\n   - Time-series Databases: IoTDB, TDengine, InfluxDB\n   - Vector Databases: Milvus, Qdrant\n   - Graph Databases: Neo4j\n   - Object Storage: S3, GCS, HDFS, OssFile, CosFile\n\n4. **Multi-Engine Support**\n   - **Zeta Engine**: Lightweight, standalone deployment (no Spark\u002FFlink required)\n   - **Apache Flink**: Distributed streaming engine\n   - **Apache Spark**: Distributed batch\u002Fbatch-stream processing\n\n---\n\n## Features\n\n### High-Performance\n\n- **Distributed Snapshot Algorithm**: Ensures data consistency without locks\n- **JDBC Multiplexing**: Minimizes database connections for real-time sync\n- **Log Parsing**: Efficient CDC implementation with binary log analysis\n- **Resource Optimization**: Reduces computing resources and I\u002FO overhead\n\n### Data Quality & Reliability\n\n- **Real-time Monitoring**: Track synchronization progress and data metrics\n- **Data Loss Prevention**: Transactional guarantees (exactly-once semantics)\n- **Deduplication**: Prevents duplicate records during reprocessing\n- **Error Handling**: Graceful failure recovery and retry logic\n\n### Developer-Friendly\n\n- **SQL-like Configuration**: Intuitive HOCON job definition syntax\n- **Visual Web UI**: Drag-and-drop job builder (SeaTunnel Web Project)\n- **Extensive Documentation**: Comprehensive guides with i18n (English + Chinese)\n- **Community Support**: Active community via Slack and mailing lists\n\n### Production Ready\n\n- **Proven at Scale**: Used in enterprises processing billions of records daily\n- **Version Stability**: Regular releases with backward compatibility\n- **Enterprise Features**: Multi-tenancy, RBAC, audit logging\n- **Cloud Native**: Kubernetes-ready deployment\n\n---\n\n## Installation\n\n### Installation Methods\n\n#### Method 1: Binary Download (Recommended for Quick Start)\n\n```bash\n# 1. Download binary\nVERSION=2.3.12\nwget https:\u002F\u002Farchive.apache.org\u002Fdist\u002Fseatunnel\u002F${VERSION}\u002Fapache-seatunnel-${VERSION}-bin.tar.gz\n\n# 2. Extract\ntar -xzf apache-seatunnel-${VERSION}-bin.tar.gz\ncd apache-seatunnel-${VERSION}\n\n# 3. Verify\n.\u002Fbin\u002Fseatunnel.sh --version\n```\n\n#### Method 2: Build from Source\n\n```bash\n# 1. Clone repository\ngit clone https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel.git\ncd seatunnel\n\n# 2. Build with Maven\nmvn clean install -DskipTests\n\n# 3. Navigate to distribution\ncd seatunnel-dist\u002Ftarget\u002Fapache-seatunnel-*-bin\u002Fapache-seatunnel-*\n\n# 4. Verify\n.\u002Fbin\u002Fseatunnel.sh --version\n```\n\n#### Method 3: Docker\n\n```bash\n# Pull official Docker image\ndocker pull apache\u002Fseatunnel:latest\n\n# Run container\ndocker run -it apache\u002Fseatunnel:latest \u002Fbin\u002Fbash\n\n# Or run a job directly\ndocker run -v \u002Fpath\u002Fto\u002Fconfig:\u002Fconfig \\\n  apache\u002Fseatunnel:latest \\\n  seatunnel.sh -c \u002Fconfig\u002Fjob.conf -e spark\n```\n\n### Environment Setup\n\n#### Set Java Home\n```bash\n# Bash\u002FZsh\nexport JAVA_HOME=\u002Fpath\u002Fto\u002Fjava\nexport PATH=$JAVA_HOME\u002Fbin:$PATH\n\n# Verify\njava -version\n```\n\n#### Configure for Spark Engine\n```bash\n# Set Spark Home (if using Spark engine)\nexport SPARK_HOME=\u002Fpath\u002Fto\u002Fspark\n\n# Verify Spark installation\n$SPARK_HOME\u002Fbin\u002Fspark-submit --version\n```\n\n#### Configure for Flink Engine\n```bash\n# Set Flink Home (if using Flink engine)\nexport FLINK_HOME=\u002Fpath\u002Fto\u002Fflink\n\n# Verify Flink installation\n$FLINK_HOME\u002Fbin\u002Fflink --version\n```\n\n### System Requirements\n\n| Requirement | Version\u002FSpec |\n|---|---|\n| Java | JDK 1.8+ |\n| Memory | 2GB+ (minimum), 8GB+ (recommended) |\n| Disk | 500MB (binary) + job storage |\n| Network | Connectivity to source\u002Fsink systems |\n| Scala | 2.12.15 (for Spark\u002FFlink integration) |\n\n---\n\n## Usage\n\n### 1. Job Configuration (HOCON Format)\n\nSeaTunnel uses **HOCON** (Human-Optimized Config Object Notation) for job configuration.\n\n**Basic Structure:**\n```hocon\nenv {\n  job.mode = \"BATCH\"  # or STREAMING\n  job.name = \"My Job\"\n  parallelism = 4\n}\n\nsource {\n  SourceConnector {\n    option1 = value1\n    option2 = value2\n    schema = {\n      fields {\n        column1 = \"type\"\n        column2 = \"type\"\n      }\n    }\n  }\n}\n\n# Optional: Transform data\ntransform {\n  TransformName {\n    option = value\n  }\n}\n\nsink {\n  SinkConnector {\n    option1 = value1\n    option2 = value2\n  }\n}\n```\n\n### 2. Common Use Cases\n\n#### Use Case 1: MySQL to PostgreSQL (Batch)\n\n**config\u002Fmysql_to_postgres.conf**\n```hocon\nenv {\n  job.mode = \"BATCH\"\n  job.name = \"MySQL to PostgreSQL\"\n}\n\nsource {\n  Jdbc {\n    driver = \"com.mysql.cj.jdbc.Driver\"\n    url = \"jdbc:mysql:\u002F\u002Fmysql-host:3306\u002Fmydb\"\n    user = \"root\"\n    password = \"password\"\n    query = \"SELECT * FROM users\"\n    connection_check_timeout_sec = 100\n  }\n}\n\nsink {\n  Jdbc {\n    driver = \"org.postgresql.Driver\"\n    url = \"jdbc:postgresql:\u002F\u002Fpg-host:5432\u002Fmydb\"\n    user = \"postgres\"\n    password = \"password\"\n    database = \"mydb\"\n    table = \"users\"\n    primary_keys = [\"id\"]\n    connection_check_timeout_sec = 100\n  }\n}\n```\n\nRun:\n```bash\nseatunnel.sh -c config\u002Fmysql_to_postgres.conf -e spark\n```\n\n#### Use Case 2: Kafka Streaming to Elasticsearch\n\n**config\u002Fkafka_to_es.conf**\n```hocon\nenv {\n  job.mode = \"STREAMING\"\n  job.name = \"Kafka to Elasticsearch\"\n  parallelism = 2\n}\n\nsource {\n  Kafka {\n    bootstrap.servers = \"kafka-host:9092\"\n    topic = \"events\"\n    patterns = \"event.*\"\n    consumer.group = \"seatunnel-group\"\n    format = \"json\"\n    schema = {\n      fields {\n        event_id = \"bigint\"\n        event_name = \"string\"\n        timestamp = \"bigint\"\n        payload = \"string\"\n      }\n    }\n  }\n}\n\ntransform {\n  Sql {\n    sql = \"SELECT event_id, event_name, FROM_UNIXTIME(timestamp\u002F1000) as ts, payload FROM source\"\n  }\n}\n\nsink {\n  Elasticsearch {\n    hosts = [\"es-host:9200\"]\n    index = \"events\"\n    index_type = \"_doc\"\n    username = \"elastic\"\n    password = \"password\"\n  }\n}\n```\n\nRun:\n```bash\nseatunnel.sh -c config\u002Fkafka_to_es.conf -e flink\n```\n\n#### Use Case 3: CDC from MySQL to Kafka\n\n**config\u002Fmysql_cdc_kafka.conf**\n```hocon\nenv {\n  job.mode = \"STREAMING\"\n  job.name = \"MySQL CDC to Kafka\"\n}\n\nsource {\n  Mysql {\n    server_id = 5400\n    hostname = \"mysql-host\"\n    port = 3306\n    username = \"root\"\n    password = \"password\"\n    database = [\"mydb\"]\n    table = [\"users\", \"orders\"]\n    startup.mode = \"initial\"\n    snapshot.split.size = 8096\n    incremental.snapshot.chunk.size = 1024\n    snapshot_fetch_size = 1024\n    snapshot_lock_timeout_sec = 10\n    server_time_zone = \"UTC\"\n  }\n}\n\nsink {\n  Kafka {\n    bootstrap.servers = \"kafka-host:9092\"\n    topic = \"mysql_cdc\"\n    format = \"canal_json\"\n    semantic = \"EXACTLY_ONCE\"\n  }\n}\n```\n\nRun:\n```bash\nseatunnel.sh -c config\u002Fmysql_cdc_kafka.conf -e flink\n```\n\n### 3. Running Jobs\n\n#### Local Mode (Single Machine)\n```bash\n# Using Spark (default)\nseatunnel.sh -c config\u002Fjob.conf -e spark\n\n# Using Flink\nseatunnel.sh -c config\u002Fjob.conf -e flink\n\n# Using Zeta (lightweight)\nseatunnel.sh -c config\u002Fjob.conf -e zeta\n```\n\n#### Cluster Mode\n```bash\n# Submit to Spark cluster\nseatunnel.sh -c config\u002Fjob.conf -e spark -m cluster -n hadoop-master:7077\n\n# Submit to Flink cluster\nseatunnel.sh -c config\u002Fjob.conf -e flink -m remote -s localhost 8081\n```\n\n#### Verbose Output\n```bash\nseatunnel.sh -c config\u002Fjob.conf -e spark -l DEBUG\n```\n\n#### Check Status\n```bash\n# View running jobs (Spark Cluster)\nspark-submit --status \u003Cdriver-id>\n\n# View running jobs (Flink Cluster)\n$FLINK_HOME\u002Fbin\u002Fflink list\n```\n\n### 4. SQL API (Advanced)\n\nUse SQL for complex transformations:\n\n```hocon\nsource {\n  MySQL {\n    # Source config...\n  }\n}\n\ntransform {\n  Sql {\n    # Multiple SQL statements\n    sql = \"\"\"\n      SELECT\n        id,\n        UPPER(name) as name,\n        age + 10 as age_plus_10,\n        CURRENT_TIMESTAMP as created_at\n      FROM source\n      WHERE age > 18\n    \"\"\"\n  }\n}\n\nsink {\n  PostgreSQL {\n    # Sink config...\n  }\n}\n```\n\n---\n\n## API Reference\n\n### Core Connector Types\n\n#### Source Connectors\n- **Jdbc**: Generic JDBC databases (MySQL, PostgreSQL, Oracle, SQL Server, DB2, OceanBase)\n- **Kafka**: Apache Kafka topics\n- **Mysql**: MySQL with CDC support\n- **MongoDB**: MongoDB collections\n- **PostgreSQL**: PostgreSQL with CDC\n- **S3\u002FOssFile\u002FCosFile\u002FHdfsFile**: Object storage \u002F file systems\n- **Http**: HTTP\u002FHTTPS endpoints\n- **Hive\u002FIceberg\u002FHudi\u002FPaimon**: Data lake formats\n- **Elasticsearch\u002FEasysearch**: Search engines\n- **Redis\u002FHBase\u002FCassandra**: NoSQL databases\n- **Pulsar\u002FRocketMQ\u002FRabbitMQ\u002FActiveMQ**: Message queues\n- **ClickHouse\u002FStarRocks\u002FDoris\u002FDruid**: OLAP engines\n- **IoTDB\u002FTDengine\u002FInfluxDB**: Time-series databases\n- **Milvus\u002FQdrant**: Vector databases\n- **Neo4j**: Graph databases\n- **FakeSource**: For testing and development\n\n#### Transform Connectors\n- **Sql**: Execute SQL transformations\n- **Dummy**: Pass-through (testing)\n- **FieldMapper**: Rename\u002Fmap columns\n- **JsonPath**: Extract data from JSON\n\n#### Sink Connectors\n- **Jdbc**: Write to JDBC-compatible databases\n- **Kafka**: Publish to Kafka topics\n- **Elasticsearch**: Write to Elasticsearch indices\n- **S3**: Write to S3 buckets\n- **Redis**: Write to Redis\n- **HBase**: Write to HBase tables\n- **StarRocks**: Write to StarRocks tables\n- **ClickHouse\u002FDoris\u002FDruid**: Write to OLAP engines\n- **Hive\u002FIceberg\u002FHudi\u002FPaimon**: Write to data lakes\n- **Console**: Output to console (testing)\n\nAll source connectors above also have corresponding sink implementations where applicable.\n\n### Configuration Options\n\n#### Common Source Options\n```hocon\nsource {\n  ConnectorName {\n    # Connection\n    hostname = \"host\"\n    port = 3306\n    username = \"user\"\n    password = \"pass\"\n\n    # Data selection\n    database = \"db_name\"\n    table = \"table_name\"\n\n    # Performance\n    fetch_size = 1000\n    connection_check_timeout_sec = 100\n    split_size = 10000\n\n    # Schema\n    schema = {\n      fields {\n        id = \"bigint\"\n        name = \"string\"\n      }\n    }\n  }\n}\n```\n\n#### Common Sink Options\n```hocon\nsink {\n  ConnectorName {\n    # Connection\n    hostname = \"host\"\n    port = 3306\n    username = \"user\"\n    password = \"pass\"\n\n    # Write behavior\n    database = \"db_name\"\n    table = \"table_name\"\n    primary_keys = [\"id\"]\n    batch_size = 500\n\n    # Error handling\n    max_retries = 3\n    retry_wait_time_ms = 1000\n    on_duplicate_key_update_column_names = [\"field1\"]\n  }\n}\n```\n\n#### Engine Options\n```hocon\nenv {\n  # Execution mode\n  job.mode = \"BATCH\"  # or STREAMING\n\n  # Job identity\n  job.name = \"My Job\"\n\n  # Parallelism\n  parallelism = 4\n\n  # Checkpoint (streaming)\n  checkpoint.interval = 60000\n\n  # Restart strategy\n  restart_strategy = \"fixed_delay\"\n  restart_strategy.fixed_delay.attempts = 3\n  restart_strategy.fixed_delay.delay = 10000\n}\n```\n\n### Debugging and Monitoring\n\n#### View Job Metrics\n```bash\n# During execution, monitor logs\ntail -f logs\u002Fseatunnel.log\n\n# Check specific log level\ngrep ERROR logs\u002Fseatunnel.log\n```\n\n#### Enable Debug Logging\n```bash\n# Set log level to DEBUG\nseatunnel.sh -c config\u002Fjob.conf -e spark -l DEBUG\n```\n\n#### Use Test Sources\n```hocon\nsource {\n  FakeSource {\n    row.num = 1000\n    schema = {\n      fields {\n        id = \"bigint\"\n        name = \"string\"\n      }\n    }\n  }\n}\n\nsink {\n  Console {\n    format = \"json\"\n  }\n}\n```\n\n---\n\n## Configuration\n\n### Project Structure\n```\nseatunnel\u002F\n├── bin\u002F                          # Executable scripts\n│   ├── seatunnel.sh             # Main entry point\n│   └── seatunnel-submit.sh      # Spark submission script\n├── config\u002F                       # Configuration examples\n│   ├── flink-conf.yaml          # Flink configuration\n│   └── spark-conf.yaml          # Spark configuration\n├── connectors\u002F                  # Pre-built connectors\n├── lib\u002F                         # JAR dependencies\n├── logs\u002F                        # Runtime logs\n└── plugin\u002F                      # Plugin directory\n```\n\n### Environment Variables\n\n```bash\n# Java configuration\nexport JAVA_HOME=\u002Fpath\u002Fto\u002Fjava\nexport JVM_OPTS=\"-Xms1G -Xmx4G\"\n\n# Spark configuration\nexport SPARK_HOME=\u002Fpath\u002Fto\u002Fspark\nexport SPARK_MASTER=spark:\u002F\u002Fmaster:7077\n\n# Flink configuration\nexport FLINK_HOME=\u002Fpath\u002Fto\u002Fflink\n\n# SeaTunnel configuration\nexport SEATUNNEL_HOME=\u002Fpath\u002Fto\u002Fseatunnel\n```\n\n### Key Configuration Files\n\n#### `seatunnel-env.sh`\nConfigure runtime environment:\n```bash\nJAVA_HOME=\u002Fpath\u002Fto\u002Fjava\nJVM_OPTS=\"-Xms1G -Xmx4G -XX:+UseG1GC\"\nSPARK_HOME=\u002Fpath\u002Fto\u002Fspark\nFLINK_HOME=\u002Fpath\u002Fto\u002Fflink\n```\n\n#### `flink-conf.yaml` (for Flink engine)\n```yaml\ntaskmanager.memory.process.size: 2g\ntaskmanager.memory.jvm-overhead.fraction: 0.1\nparallelism.default: 4\n```\n\n#### `spark-conf.yaml` (for Spark engine)\n```yaml\ndriver-memory: 2g\nexecutor-memory: 4g\nnum-executors: 4\n```\n\n### Performance Tuning\n\n#### For Batch Jobs\n```hocon\nenv {\n  job.mode = \"BATCH\"\n  parallelism = 8  # Increase for larger clusters\n}\n\nsource {\n  Jdbc {\n    # Split large tables for parallel reads\n    split_size = 100000\n    fetch_size = 5000\n  }\n}\n\nsink {\n  Jdbc {\n    # Batch inserts for better throughput\n    batch_size = 1000\n    # Use connection pooling\n    max_retries = 3\n  }\n}\n```\n\n#### For Streaming Jobs\n```hocon\nenv {\n  job.mode = \"STREAMING\"\n  parallelism = 4\n  checkpoint.interval = 30000  # 30 seconds\n}\n\nsource {\n  Kafka {\n    # Consumer group for parallel reads\n    consumer.group = \"seatunnel-consumer\"\n    # Batch reading\n    max_poll_records = 500\n  }\n}\n```\n\n---\n\n## Website & Documentation System\n\nThe official documentation site (https:\u002F\u002Fseatunnel.apache.org) is managed through the `apache\u002Fseatunnel-website` repository, built with **Docusaurus 2.4.3**.\n\n### How Documentation Works\n\nDocumentation content lives in the **main codebase** (`apache\u002Fseatunnel` repo, `docs\u002F` directory). The website repo fetches docs via `npm run sync` (or `tools\u002Fbuild-docs.js`) before building.\n\nThe sync process:\n1. Creates `swap\u002F` directory, clones `apache\u002Fseatunnel` codebase\n2. Copies `docs\u002Fen` to website's `docs\u002F` directory\n3. Copies `docs\u002Fzh` to `i18n\u002Fzh-CN\u002F` for Chinese translations\n4. Copies `docs\u002Fimages` to `static\u002Fimage_en` and `static\u002Fimage_zh`\n5. Copies `docs\u002Fsidebars.js` to root level\n\n### Website Repository Structure\n```\nseatunnel-website\u002F\n├── blog\u002F                          # Blog posts (EN)\n├── community\u002F                     # Community docs\n│   ├── contribution_guide\u002F        # Contribution guidelines\n│   │   ├── contribute.md\n│   │   ├── committer.md\n│   │   ├── code-review.md\n│   │   ├── release.md\n│   │   └── subscribe.md\n│   └── submit_guide\u002F             # Submission guidelines\n│       ├── document.md\n│       ├── license.md\n│       └── submit-code.md\n├── docs\u002F                          # Current version docs (synced from main repo)\n├── docusaurus.config.js           # Site configuration\n├── i18n\u002Fzh-CN\u002F                    # Chinese translations\n│   ├── docusaurus-plugin-content-blog\u002F\n│   ├── docusaurus-plugin-content-docs\u002F\n│   └── docusaurus-plugin-content-docs-community\u002F\n├── package.json\n├── sidebars.js                    # Doc sidebar config (synced)\n├── src\u002F\n│   ├── components\u002F\n│   ├── css\u002F\n│   ├── pages\u002F\n│   │   ├── home\u002F                  # Homepage\n│   │   ├── team\u002F                  # Team page (with Base64 avatars)\n│   │   ├── user\u002F                  # User showcase\n│   │   └── versions\u002F             # Version selector\n│   └── styles\u002F\n├── static\u002F                        # Static assets\n│   ├── doc\u002Fimage\u002F, image_en\u002F, image_zh\u002F\n│   ├── home\u002F, image\u002F, user\u002F\n│   └── js\u002Fgoogle_translate_init.js\n├── tools\u002F\n│   ├── build-docs.js              # Doc sync script\n│   ├── common.js                  # Shared constants\n│   ├── version.js                 # Version management\n│   ├── image-copy.js              # Image processing\n│   └── fetch-team-avatars.js      # Team avatar updater\n├── versioned_docs\u002F                # Historical version docs (20 versions: 1.x ~ 2.3.12)\n├── versioned_sidebars\u002F            # Historical sidebars\n├── versions.json                  # Version registry\n└── seatunnel_web_versions.json    # Web UI version registry\n```\n\n### Documentation Categories (per version)\n\nEach version's docs contain:\n- `about.md` - Project overview\n- `command\u002F` - CLI commands (e.g., connector-check)\n- `concept\u002F` - Core concepts (config, schema-evolution, speed-limit, SQL config, event-listener)\n- `connector-v2\u002F` - Connector documentation\n  - `source\u002F` - Source connector docs (100+ connectors)\n  - `sink\u002F` - Sink connector docs\n  - `changelog\u002F` - Per-connector changelogs\n  - `formats\u002F` - Data formats (Avro, Canal JSON, Debezium JSON, OGG JSON, Protobuf)\n- `contribution\u002F` - Contributor guides\n- `faq.md` - Frequently asked questions\n- `other-engine\u002F` - Flink\u002FSpark engine specifics\n- `seatunnel-engine\u002F` - Zeta engine docs + telemetry\n- `start-v2\u002F` - Getting started guides\n  - `docker\u002F` - Docker deployment\n  - `kubernetes\u002F` - K8s deployment\n  - `locally\u002F` - Local setup\n- `transform-v2\u002F` - Transform documentation (SQL, etc.)\n\n### Versioned Documentation\n\n20 historical versions maintained: `1.x`, `2.1.0`~`2.1.3`, `2.2.0-beta`, `2.3.0-beta`~`2.3.12`\n\nTotal: ~3691 versioned doc files + ~1652 i18n files\n\n### Website Development\n\n```bash\n# Clone\ngit clone git@github.com:apache\u002Fseatunnel-website.git\ncd seatunnel-website\n\n# Sync docs from main repo\nnpm run sync\n# Or with SSH: export PROTOCOL_MODE=ssh && npm run sync\n\n# Install dependencies\nnpm install\n\n# Dev server (English)\nnpm run start\n\n# Dev server (Chinese)\nnpm run start-zh\n\n# Production build (needs ~10GB heap)\nnpm run build\n# Or faster parallel build\nnpm run build:fast\n\n# Serve built site\nnpm run serve\n```\n\n### Adding a New Version\n\n```bash\n# 1. Create versioned snapshot\nnpm run version \u003Ctarget_version>\n\n# 2. Update download links\n# Edit src\u002Fpages\u002Fdownload\u002Fst_data.json\n```\n\n### Branching Strategy\n\n| Branch | Purpose |\n|---|---|\n| `main` | Default development branch |\n| `asf-site` | Production (https:\u002F\u002Fseatunnel.apache.org) |\n| `asf-staging` | Staging (https:\u002F\u002Fseatunnel.staged.apache.org) |\n\n### CI\u002FCD\n\nGitHub Actions workflow (`.github\u002Fworkflows\u002Fdeploy.yml`):\n- Triggers: push to `main`, PRs to `main`, daily cron (5:00 AM UTC)\n- Node.js 18.20.7\n- Steps: `npm install` -> `npm run sync` -> `npm run build` -> deploy to `asf-site` branch\n\n### Key Conventions\n\n- Directory names: lowercase, underscore-separated, plural (e.g., `scripts`, `components`)\n- JS\u002Fstatic files: lowercase, dash-separated (e.g., `render-dom.js`)\n- Images: stored under `static\u002F{module_name}`\n- Styles: placed in `src\u002Fcss\u002F`\n- Most pages have \"Edit this page\" link pointing to GitHub source\n\n---\n\n## Development\n\n### Project Architecture\n\n**SeaTunnel** follows a modular architecture:\n\n```\nseatunnel\u002F\n├── seatunnel-api\u002F              # Core APIs\n├── seatunnel-core\u002F             # Execution engine\n├── seatunnel-engines\u002F          # Engine implementations\n│   ├── seatunnel-engine-flink\u002F\n│   ├── seatunnel-engine-spark\u002F\n│   └── seatunnel-engine-zeta\u002F\n├── seatunnel-connectors\u002F       # 100+ connector implementations\n│   ├── seatunnel-connectors-*\u002F # One per connector type\n└── seatunnel-dist\u002F             # Distribution package\n```\n\n### Building from Source\n\n#### Full Build\n```bash\n# Clone repository\ngit clone https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel.git\ncd seatunnel\n\n# Build all modules\nmvn clean install -DskipTests\n\n# Build with tests (slower)\nmvn clean install\n```\n\n#### Build Specific Module\n```bash\n# Build only Kafka connector\nmvn clean install -pl seatunnel-connectors\u002Fseatunnel-connectors-seatunnel-kafka -DskipTests\n\n# Build only Flink engine\nmvn clean install -pl seatunnel-engines\u002Fseatunnel-engine-flink -DskipTests\n```\n\n#### Build Distribution\n```bash\n# Create binary distribution\nmvn clean install -DskipTests\ncd seatunnel-dist\ntar -tzf target\u002Fapache-seatunnel-*-bin.tar.gz | head\n```\n\n### Running Tests\n\n#### Unit Tests\n```bash\n# Run all tests\nmvn test\n\n# Run specific test class\nmvn test -Dtest=MySqlConnectorTest\n\n# Run with coverage\nmvn test jacoco:report\n```\n\n#### Integration Tests\n```bash\n# Run integration tests\nmvn verify\n\n# Run with Docker containers\nmvn verify -Pintegration-tests\n```\n\n### Development Setup\n\n#### IDE Configuration (IntelliJ IDEA)\n\n1. **Import Project**\n   - File → Open → Select seatunnel directory\n   - Choose Maven as build system\n\n2. **Configure JDK**\n   - Project Settings → Project → JDK\n   - Select JDK 1.8 or higher\n\n3. **Enable Annotation Processing**\n   - Project Settings → Build → Compiler → Annotation Processors\n   - Enable annotation processing\n\n4. **Run Configuration**\n   - Run → Edit Configurations\n   - Add new \"Application\" configuration\n   - Set main class: `org.apache.seatunnel.core.starter.command.CommandExecuteRunner`\n\n#### Code Style\n\nSeaTunnel follows Apache project conventions:\n- 4-space indentation (not tabs)\n- Line length max 120 characters\n- Standard Java naming conventions\n- Organize imports alphabetically\n\nUse the provided `.editorconfig`:\n```bash\n# Install EditorConfig plugin (IntelliJ)\n# Then your IDE will auto-format code\n```\n\n### Creating Custom Connectors\n\n#### 1. Extend SeConnector Interface\n```java\nimport org.apache.seatunnel.api.source.SeSource;\nimport org.apache.seatunnel.api.table.catalog.Table;\n\npublic class CustomSource extends SeSource {\n    @Override\n    public String getPluginName() {\n        return \"Custom\";\n    }\n\n    @Override\n    public void validate() {\n        \u002F\u002F Validation logic\n    }\n\n    @Override\n    public ResultSet read(Boundedness boundedness) {\n        \u002F\u002F Implementation\n    }\n}\n```\n\n#### 2. Create Configuration Class\n```java\nimport org.apache.seatunnel.api.configuration.Option;\nimport org.apache.seatunnel.api.configuration.Options;\n\npublic class CustomSourceOptions {\n    public static final Option\u003CString> HOST =\n        Options.key(\"host\")\n            .stringType()\n            .noDefaultValue()\n            .withDescription(\"Source hostname\");\n\n    public static final Option\u003CInteger> PORT =\n        Options.key(\"port\")\n            .intType()\n            .defaultValue(9200)\n            .withDescription(\"Source port\");\n}\n```\n\n#### 3. Register Connector\n```\nMETA-INF\u002Fservices\u002Forg.apache.seatunnel.api.source.SeSource\n```\n\n### Contributing Guide\n\n1. **Fork and Clone**\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002FYOUR_USERNAME\u002Fseatunnel.git\n   cd seatunnel\n   git remote add upstream https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel.git\n   ```\n\n2. **Create Feature Branch**\n   ```bash\n   git checkout -b feature\u002Fmy-feature\n   ```\n\n3. **Make Changes**\n   - Follow code style guide\n   - Add tests for new features\n   - Update documentation\n\n4. **Commit and Push**\n   ```bash\n   git add .\n   git commit -m \"feat: add new feature\"\n   git push origin feature\u002Fmy-feature\n   ```\n\n5. **Create Pull Request**\n   - Go to GitHub repository\n   - Create PR with clear description\n   - Link any related issues\n   - Wait for review\n\n6. **Code Review Process**\n   - Address feedback from maintainers\n   - Update PR with changes\n   - After approval, maintainers will merge\n\n---\n\n## Troubleshooting\n\n### Common Issues and Solutions\n\n#### Issue 1: \"ClassNotFoundException: com.mysql.jdbc.Driver\"\n\n**Cause**: JDBC driver JAR not in classpath\n\n**Solution**:\n```bash\n# 1. Download MySQL JDBC driver\nwget https:\u002F\u002Fdev.mysql.com\u002Fget\u002FDownloads\u002FConnector-J\u002Fmysql-connector-java-8.0.33.jar\n\n# 2. Copy to lib directory\ncp mysql-connector-java-8.0.33.jar $SEATUNNEL_HOME\u002Flib\u002F\n\n# 3. Restart job\nseatunnel.sh -c config\u002Fjob.conf -e spark\n```\n\n#### Issue 2: \"OutOfMemoryError: Java heap space\"\n\n**Cause**: Insufficient JVM heap memory\n\n**Solution**:\n```bash\n# Increase JVM memory\nexport JVM_OPTS=\"-Xms2G -Xmx8G\"\n\n# Or set in seatunnel-env.sh\necho 'JVM_OPTS=\"-Xms2G -Xmx8G\"' >> $SEATUNNEL_HOME\u002Fbin\u002Fseatunnel-env.sh\n```\n\n#### Issue 3: \"Connection refused: connect\"\n\n**Cause**: Source\u002Fsink service not reachable\n\n**Solution**:\n```bash\n# 1. Verify connectivity\nping source-host\ntelnet source-host 3306\n\n# 2. Check credentials\nmysql -h source-host -u root -p\n\n# 3. Check firewall rules\n# Ensure port 3306 is open\n```\n\n#### Issue 4: \"Table not found\" during CDC\n\n**Cause**: Binlog not enabled on MySQL\n\n**Solution**:\n```sql\n-- Check binlog status\nSHOW VARIABLES LIKE 'log_bin';\n\n-- Enable binlog in my.cnf\n[mysqld]\nlog_bin = mysql-bin\nbinlog_format = row  # Important for CDC\n\n-- Restart MySQL and verify\nSHOW MASTER STATUS;\n```\n\n#### Issue 5: Slow Job Performance\n\n**Cause**: Suboptimal configuration\n\n**Solutions**:\n```hocon\n# 1. Increase parallelism\nenv {\n  parallelism = 8  # or higher based on cluster\n}\n\n# 2. Increase batch sizes\nsource {\n  Jdbc {\n    fetch_size = 5000\n    split_size = 100000\n  }\n}\n\nsink {\n  Jdbc {\n    batch_size = 2000\n  }\n}\n\n# 3. Enable connection pooling\nsource {\n  Jdbc {\n    pool_size = 10\n    max_idle_time = 300\n  }\n}\n```\n\n#### Issue 6: \"Kafka topic offset out of range\"\n\n**Cause**: Offset doesn't exist in topic\n\n**Solution**:\n```hocon\nsource {\n  Kafka {\n    # Reset to earliest or latest\n    auto.offset.reset = \"earliest\"  # or \"latest\"\n\n    # Or specify explicit offsets\n    start_mode = \"earliest\"\n  }\n}\n```\n\n### FAQ\n\n**Q: What's the difference between BATCH and STREAMING mode?**\n\nA:\n- **BATCH**: One-time execution, suitable for full database migration\n- **STREAMING**: Continuous execution, suitable for real-time data sync and CDC\n\n**Q: How do I handle schema changes during CDC?**\n\nA: SeaTunnel automatically detects schema changes in CDC mode. Configure in source:\n```hocon\nsource {\n  Mysql {\n    schema_change_mode = \"auto\"  # auto-detect and apply\n  }\n}\n```\n\n**Q: Can I transform data during synchronization?**\n\nA: Yes, use SQL transform:\n```hocon\ntransform {\n  Sql {\n    sql = \"SELECT id, UPPER(name) as name FROM source\"\n  }\n}\n```\n\n**Q: What's the maximum throughput?**\n\nA: Depends on:\n- Hardware (CPU, RAM, Network)\n- Source\u002Fsink database configuration\n- Data size per record\n- Network latency\n\nTypical throughput: 100K - 1M records\u002Fsecond per executor\n\n**Q: How do I handle errors in production?**\n\nA: Configure restart strategy:\n```hocon\nenv {\n  restart_strategy = \"exponential_delay\"\n  restart_strategy.exponential_delay.initial_delay = 1000\n  restart_strategy.exponential_delay.max_delay = 30000\n  restart_strategy.exponential_delay.multiplier = 2.0\n  restart_strategy.exponential_delay.attempts_unlimited = true\n}\n```\n\n**Q: Is there a web UI for job management?**\n\nA: Yes! Use **SeaTunnel Web Project**:\n```bash\n# Check out web UI project\ngit clone https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-web.git\ncd seatunnel-web\nmvn clean install\n\n# Run web UI\njava -jar target\u002Fseatunnel-web-*.jar\n# Access at http:\u002F\u002Flocalhost:8080\n```\n\n---\n\n## Resources\n\n### Official Links\n- [SeaTunnel Official Website](https:\u002F\u002Fseatunnel.apache.org\u002F)\n- [GitHub (Engine)](https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel)\n- [GitHub (Website)](https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-website)\n- [GitHub (Web UI)](https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-web)\n- [Documentation Hub](https:\u002F\u002Fseatunnel.apache.org\u002Fdocs\u002F)\n- [Connector List](https:\u002F\u002Fseatunnel.apache.org\u002Fdocs\u002F2.3.12\u002Fconnector-v2\u002Foverview)\n- [Downloads](https:\u002F\u002Fseatunnel.apache.org\u002Fdownload)\n\n### Community\n- [Slack Channel](https:\u002F\u002Fthe-asf.slack.com\u002Farchives\u002FC01CB5186TL)\n- [Mailing Lists](https:\u002F\u002Fseatunnel.apache.org\u002Fcommunity\u002Fmail-lists\u002F)\n- [Issue Tracker](https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel\u002Fissues)\n- [Discussion Forum](https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel\u002Fdiscussions)\n\n### Related Projects\n- [SeaTunnel Web UI](https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-web)\n- [Apache Kafka](https:\u002F\u002Fkafka.apache.org\u002F)\n- [Apache Flink](https:\u002F\u002Fflink.apache.org\u002F)\n- [Apache Spark](https:\u002F\u002Fspark.apache.org\u002F)\n\n### Learning Resources\n- [HOCON Configuration Guide](https:\u002F\u002Fgithub.com\u002Flightbend\u002Fconfig\u002Fblob\u002Fmain\u002FHOCON.md)\n- [SQL Functions Reference](https:\u002F\u002Fseatunnel.apache.org\u002Fdocs\u002F2.3.12\u002Ftransform-v2\u002Fsql)\n- [CDC Pattern Explained](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FChange_data_capture)\n- [Distributed Systems Concepts](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDistributed_computing)\n\n### Version History\n- **2.3.12** (Latest Stable) - Current recommended version\n- **2.3.13-SNAPSHOT** (Development)\n- 20 historical versions maintained in documentation (1.x ~ 2.3.12)\n- [All Releases](https:\u002F\u002Farchive.apache.org\u002Fdist\u002Fseatunnel\u002F)\n\n---\n\n## Additional Notes\n\n### License\nApache License 2.0 - See [LICENSE](https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel\u002Fblob\u002Fmaster\u002FLICENSE) file\n\n### Security\n- Report security issues via [Apache Security](https:\u002F\u002Fwww.apache.org\u002Fsecurity\u002F)\n- Do NOT create public issues for security vulnerabilities\n\n### Support & Contribution\n- Join the community Slack for support\n- Submit feature requests on GitHub Issues\n- Contribute code via Pull Requests\n- Follow [Contributing Guide](https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md)\n\n---\n\n**Last Updated**: 2026-02-26\n**Skill Version**: 2.3.13\n**Sources**: apache\u002Fseatunnel + apache\u002Fseatunnel-website\n",{"data":50,"body":66},{"name":4,"description":6,"author":51,"platform":52,"source":53,"website_source":54,"tags":55,"version":62,"generated":63,"license":28,"repository":64,"website_repository":65},"auto-generated by repo2skill","github","https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel","https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-website",[35,24,21,36,56,57,32,58,8,59,60,61],"real-time-streaming","batch-processing","distributed-computing","java","docusaurus","documentation","2.3.13","2026-02-26","apache\u002Fseatunnel","apache\u002Fseatunnel-website",{"type":67,"children":68},"root",[69,78,92,99,106,151,157,164,214,220,308,314,330,464,470,544,550,570,576,581,589,793,798,865,869,875,881,891,944,950,1138,1141,1147,1152,1195,1201,1244,1250,1293,1299,1342,1345,1350,1356,1362,1531,1537,1680,1686,1839,1845,1851,1932,1938,1997,2003,2062,2068,2160,2163,2169,2175,2187,2195,2448,2454,2460,2468,2685,2690,2721,2727,2735,3040,3044,3075,3081,3089,3330,3334,3365,3371,3377,3493,3499,3622,3628,3668,3674,3745,3751,3756,3959,3962,3968,3974,3980,4143,4149,4192,4198,4298,4303,4309,4315,4516,4522,4675,4681,4823,4829,4835,4900,4906,4952,4958,5085,5088,5094,5100,5110,5116,5306,5312,5322,5327,5407,5419,5481,5493,5549,5555,5561,5722,5728,5838,5841,5847,5874,5880,5923,5928,6028,6034,6043,6049,6054,6250,6256,6305,6310,6316,6574,6580,6652,6658,6745,6751,6764,6825,6831,6892,6895,6901,6907,6916,6925,6931,6937,7042,7048,7134,7140,7222,7228,7234,7324,7330,7389,7395,7401,7499,7505,7510,7533,7545,7568,7574,7580,7731,7737,7869,7875,7884,7890,8162,8165,8171,8177,8183,8193,8202,8305,8311,8320,8328,8423,8429,8438,8446,8562,8568,8577,8585,8672,8678,8687,8696,8892,8898,8907,8915,8989,8995,9003,9008,9031,9039,9044,9087,9095,9100,9143,9151,9156,9179,9184,9192,9197,9258,9266,9277,9384,9387,9393,9399,9469,9475,9518,9524,9564,9570,9613,9619,9656,9659,9665,9671,9685,9691,9711,9717,9746,9749,9773],{"type":70,"tag":71,"props":72,"children":74},"element","h1",{"id":73},"apache-seatunnel-opencode-skill",[75],{"type":76,"value":77},"text","Apache SeaTunnel OpenCode Skill",{"type":70,"tag":79,"props":80,"children":81},"p",{},[82,84,90],{"type":76,"value":83},"Apache SeaTunnel is a ",{"type":70,"tag":85,"props":86,"children":87},"strong",{},[88],{"type":76,"value":89},"multimodal, high-performance, distributed data integration tool",{"type":76,"value":91}," capable of synchronizing vast amounts of data daily. It connects hundreds of evolving data sources with support for real-time, CDC (Change Data Capture), and full database synchronization.",{"type":70,"tag":93,"props":94,"children":96},"h2",{"id":95},"quick-start",[97],{"type":76,"value":98},"Quick Start",{"type":70,"tag":100,"props":101,"children":103},"h3",{"id":102},"prerequisites",[104],{"type":76,"value":105},"Prerequisites",{"type":70,"tag":107,"props":108,"children":109},"ul",{},[110,121,131,141],{"type":70,"tag":111,"props":112,"children":113},"li",{},[114,119],{"type":70,"tag":85,"props":115,"children":116},{},[117],{"type":76,"value":118},"Java",{"type":76,"value":120},": JDK 8 or higher",{"type":70,"tag":111,"props":122,"children":123},{},[124,129],{"type":70,"tag":85,"props":125,"children":126},{},[127],{"type":76,"value":128},"Maven",{"type":76,"value":130},": 3.6.0 or higher (for building from source)",{"type":70,"tag":111,"props":132,"children":133},{},[134,139],{"type":70,"tag":85,"props":135,"children":136},{},[137],{"type":76,"value":138},"Python",{"type":76,"value":140},": 3.7+ (optional, for Python API)",{"type":70,"tag":111,"props":142,"children":143},{},[144,149],{"type":70,"tag":85,"props":145,"children":146},{},[147],{"type":76,"value":148},"Git",{"type":76,"value":150},": For cloning the repository",{"type":70,"tag":100,"props":152,"children":154},{"id":153},"installation",[155],{"type":76,"value":156},"Installation",{"type":70,"tag":158,"props":159,"children":161},"h4",{"id":160},"_1-clone-repository",[162],{"type":76,"value":163},"1. Clone Repository",{"type":70,"tag":165,"props":166,"children":171},"pre",{"className":167,"code":168,"language":169,"meta":170,"style":170},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel.git\ncd seatunnel\n","bash","",[172],{"type":70,"tag":173,"props":174,"children":175},"code",{"__ignoreMap":170},[176,199],{"type":70,"tag":177,"props":178,"children":181},"span",{"class":179,"line":180},"line",1,[182,188,194],{"type":70,"tag":177,"props":183,"children":185},{"style":184},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[186],{"type":76,"value":187},"git",{"type":70,"tag":177,"props":189,"children":191},{"style":190},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[192],{"type":76,"value":193}," clone",{"type":70,"tag":177,"props":195,"children":196},{"style":190},[197],{"type":76,"value":198}," https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel.git\n",{"type":70,"tag":177,"props":200,"children":202},{"class":179,"line":201},2,[203,209],{"type":70,"tag":177,"props":204,"children":206},{"style":205},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[207],{"type":76,"value":208},"cd",{"type":70,"tag":177,"props":210,"children":211},{"style":190},[212],{"type":76,"value":213}," seatunnel\n",{"type":70,"tag":158,"props":215,"children":217},{"id":216},"_2-build-from-source",[218],{"type":76,"value":219},"2. Build from Source",{"type":70,"tag":165,"props":221,"children":223},{"className":167,"code":222,"language":169,"meta":170,"style":170},"# Build entire project\nmvn clean install -DskipTests\n\n# Build specific module\nmvn clean install -pl seatunnel-core -DskipTests\n",[224],{"type":70,"tag":173,"props":225,"children":226},{"__ignoreMap":170},[227,236,259,269,278],{"type":70,"tag":177,"props":228,"children":229},{"class":179,"line":180},[230],{"type":70,"tag":177,"props":231,"children":233},{"style":232},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[234],{"type":76,"value":235},"# Build entire project\n",{"type":70,"tag":177,"props":237,"children":238},{"class":179,"line":201},[239,244,249,254],{"type":70,"tag":177,"props":240,"children":241},{"style":184},[242],{"type":76,"value":243},"mvn",{"type":70,"tag":177,"props":245,"children":246},{"style":190},[247],{"type":76,"value":248}," clean",{"type":70,"tag":177,"props":250,"children":251},{"style":190},[252],{"type":76,"value":253}," install",{"type":70,"tag":177,"props":255,"children":256},{"style":190},[257],{"type":76,"value":258}," -DskipTests\n",{"type":70,"tag":177,"props":260,"children":262},{"class":179,"line":261},3,[263],{"type":70,"tag":177,"props":264,"children":266},{"emptyLinePlaceholder":265},true,[267],{"type":76,"value":268},"\n",{"type":70,"tag":177,"props":270,"children":272},{"class":179,"line":271},4,[273],{"type":70,"tag":177,"props":274,"children":275},{"style":232},[276],{"type":76,"value":277},"# Build specific module\n",{"type":70,"tag":177,"props":279,"children":281},{"class":179,"line":280},5,[282,286,290,294,299,304],{"type":70,"tag":177,"props":283,"children":284},{"style":184},[285],{"type":76,"value":243},{"type":70,"tag":177,"props":287,"children":288},{"style":190},[289],{"type":76,"value":248},{"type":70,"tag":177,"props":291,"children":292},{"style":190},[293],{"type":76,"value":253},{"type":70,"tag":177,"props":295,"children":296},{"style":190},[297],{"type":76,"value":298}," -pl",{"type":70,"tag":177,"props":300,"children":301},{"style":190},[302],{"type":76,"value":303}," seatunnel-core",{"type":70,"tag":177,"props":305,"children":306},{"style":190},[307],{"type":76,"value":258},{"type":70,"tag":158,"props":309,"children":311},{"id":310},"_3-download-pre-built-binary-recommended",[312],{"type":76,"value":313},"3. Download Pre-built Binary (Recommended)",{"type":70,"tag":79,"props":315,"children":316},{},[317,319,328],{"type":76,"value":318},"Visit the ",{"type":70,"tag":320,"props":321,"children":325},"a",{"href":322,"rel":323},"https:\u002F\u002Fseatunnel.apache.org\u002Fdownload",[324],"nofollow",[326],{"type":76,"value":327},"official download page",{"type":76,"value":329}," and select your version:",{"type":70,"tag":165,"props":331,"children":333},{"className":167,"code":332,"language":169,"meta":170,"style":170},"VERSION=2.3.12\nwget https:\u002F\u002Farchive.apache.org\u002Fdist\u002Fseatunnel\u002F${VERSION}\u002Fapache-seatunnel-${VERSION}-bin.tar.gz\ntar -xzf apache-seatunnel-${VERSION}-bin.tar.gz\ncd apache-seatunnel-${VERSION}\n",[334],{"type":70,"tag":173,"props":335,"children":336},{"__ignoreMap":170},[337,357,406,440],{"type":70,"tag":177,"props":338,"children":339},{"class":179,"line":180},[340,346,352],{"type":70,"tag":177,"props":341,"children":343},{"style":342},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[344],{"type":76,"value":345},"VERSION",{"type":70,"tag":177,"props":347,"children":349},{"style":348},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[350],{"type":76,"value":351},"=",{"type":70,"tag":177,"props":353,"children":354},{"style":190},[355],{"type":76,"value":356},"2.3.12\n",{"type":70,"tag":177,"props":358,"children":359},{"class":179,"line":201},[360,365,370,375,379,384,389,393,397,401],{"type":70,"tag":177,"props":361,"children":362},{"style":184},[363],{"type":76,"value":364},"wget",{"type":70,"tag":177,"props":366,"children":367},{"style":190},[368],{"type":76,"value":369}," https:\u002F\u002Farchive.apache.org\u002Fdist\u002Fseatunnel\u002F",{"type":70,"tag":177,"props":371,"children":372},{"style":348},[373],{"type":76,"value":374},"${",{"type":70,"tag":177,"props":376,"children":377},{"style":342},[378],{"type":76,"value":345},{"type":70,"tag":177,"props":380,"children":381},{"style":348},[382],{"type":76,"value":383},"}",{"type":70,"tag":177,"props":385,"children":386},{"style":190},[387],{"type":76,"value":388},"\u002Fapache-seatunnel-",{"type":70,"tag":177,"props":390,"children":391},{"style":348},[392],{"type":76,"value":374},{"type":70,"tag":177,"props":394,"children":395},{"style":342},[396],{"type":76,"value":345},{"type":70,"tag":177,"props":398,"children":399},{"style":348},[400],{"type":76,"value":383},{"type":70,"tag":177,"props":402,"children":403},{"style":190},[404],{"type":76,"value":405},"-bin.tar.gz\n",{"type":70,"tag":177,"props":407,"children":408},{"class":179,"line":261},[409,414,419,424,428,432,436],{"type":70,"tag":177,"props":410,"children":411},{"style":184},[412],{"type":76,"value":413},"tar",{"type":70,"tag":177,"props":415,"children":416},{"style":190},[417],{"type":76,"value":418}," -xzf",{"type":70,"tag":177,"props":420,"children":421},{"style":190},[422],{"type":76,"value":423}," apache-seatunnel-",{"type":70,"tag":177,"props":425,"children":426},{"style":348},[427],{"type":76,"value":374},{"type":70,"tag":177,"props":429,"children":430},{"style":342},[431],{"type":76,"value":345},{"type":70,"tag":177,"props":433,"children":434},{"style":348},[435],{"type":76,"value":383},{"type":70,"tag":177,"props":437,"children":438},{"style":190},[439],{"type":76,"value":405},{"type":70,"tag":177,"props":441,"children":442},{"class":179,"line":271},[443,447,451,455,459],{"type":70,"tag":177,"props":444,"children":445},{"style":205},[446],{"type":76,"value":208},{"type":70,"tag":177,"props":448,"children":449},{"style":190},[450],{"type":76,"value":423},{"type":70,"tag":177,"props":452,"children":453},{"style":348},[454],{"type":76,"value":374},{"type":70,"tag":177,"props":456,"children":457},{"style":342},[458],{"type":76,"value":345},{"type":70,"tag":177,"props":460,"children":461},{"style":348},[462],{"type":76,"value":463},"}\n",{"type":70,"tag":158,"props":465,"children":467},{"id":466},"_4-basic-configuration",[468],{"type":76,"value":469},"4. Basic Configuration",{"type":70,"tag":165,"props":471,"children":473},{"className":167,"code":472,"language":169,"meta":170,"style":170},"# Set JAVA_HOME\nexport JAVA_HOME=\u002Fpath\u002Fto\u002Fjava\n\n# Add to PATH\nexport PATH=$PATH:\u002Fpath\u002Fto\u002Fseatunnel\u002Fbin\n",[474],{"type":70,"tag":173,"props":475,"children":476},{"__ignoreMap":170},[477,485,508,515,523],{"type":70,"tag":177,"props":478,"children":479},{"class":179,"line":180},[480],{"type":70,"tag":177,"props":481,"children":482},{"style":232},[483],{"type":76,"value":484},"# Set JAVA_HOME\n",{"type":70,"tag":177,"props":486,"children":487},{"class":179,"line":201},[488,494,499,503],{"type":70,"tag":177,"props":489,"children":491},{"style":490},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[492],{"type":76,"value":493},"export",{"type":70,"tag":177,"props":495,"children":496},{"style":342},[497],{"type":76,"value":498}," JAVA_HOME",{"type":70,"tag":177,"props":500,"children":501},{"style":348},[502],{"type":76,"value":351},{"type":70,"tag":177,"props":504,"children":505},{"style":342},[506],{"type":76,"value":507},"\u002Fpath\u002Fto\u002Fjava\n",{"type":70,"tag":177,"props":509,"children":510},{"class":179,"line":261},[511],{"type":70,"tag":177,"props":512,"children":513},{"emptyLinePlaceholder":265},[514],{"type":76,"value":268},{"type":70,"tag":177,"props":516,"children":517},{"class":179,"line":271},[518],{"type":70,"tag":177,"props":519,"children":520},{"style":232},[521],{"type":76,"value":522},"# Add to PATH\n",{"type":70,"tag":177,"props":524,"children":525},{"class":179,"line":280},[526,530,535,539],{"type":70,"tag":177,"props":527,"children":528},{"style":490},[529],{"type":76,"value":493},{"type":70,"tag":177,"props":531,"children":532},{"style":342},[533],{"type":76,"value":534}," PATH",{"type":70,"tag":177,"props":536,"children":537},{"style":348},[538],{"type":76,"value":351},{"type":70,"tag":177,"props":540,"children":541},{"style":342},[542],{"type":76,"value":543},"$PATH:\u002Fpath\u002Fto\u002Fseatunnel\u002Fbin\n",{"type":70,"tag":158,"props":545,"children":547},{"id":546},"_5-verify-installation",[548],{"type":76,"value":549},"5. Verify Installation",{"type":70,"tag":165,"props":551,"children":553},{"className":167,"code":552,"language":169,"meta":170,"style":170},"seatunnel --version\n",[554],{"type":70,"tag":173,"props":555,"children":556},{"__ignoreMap":170},[557],{"type":70,"tag":177,"props":558,"children":559},{"class":179,"line":180},[560,565],{"type":70,"tag":177,"props":561,"children":562},{"style":184},[563],{"type":76,"value":564},"seatunnel",{"type":70,"tag":177,"props":566,"children":567},{"style":190},[568],{"type":76,"value":569}," --version\n",{"type":70,"tag":100,"props":571,"children":573},{"id":572},"hello-world-example",[574],{"type":76,"value":575},"Hello World Example",{"type":70,"tag":79,"props":577,"children":578},{},[579],{"type":76,"value":580},"Create a simple data integration job:",{"type":70,"tag":79,"props":582,"children":583},{},[584],{"type":70,"tag":85,"props":585,"children":586},{},[587],{"type":76,"value":588},"config\u002Fhello_world.conf",{"type":70,"tag":165,"props":590,"children":594},{"className":591,"code":592,"language":593,"meta":170,"style":170},"language-hocon shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","env {\n  job.mode = \"BATCH\"\n  job.name = \"Hello World\"\n}\n\nsource {\n  FakeSource {\n    row.num = 100\n    schema = {\n      fields {\n        id = \"bigint\"\n        name = \"string\"\n        age = \"int\"\n      }\n    }\n  }\n}\n\nsink {\n  Console {\n    format = \"json\"\n  }\n}\n","hocon",[595],{"type":70,"tag":173,"props":596,"children":597},{"__ignoreMap":170},[598,606,614,622,629,636,644,653,662,671,680,689,698,707,716,725,734,742,750,759,768,777,785],{"type":70,"tag":177,"props":599,"children":600},{"class":179,"line":180},[601],{"type":70,"tag":177,"props":602,"children":603},{},[604],{"type":76,"value":605},"env {\n",{"type":70,"tag":177,"props":607,"children":608},{"class":179,"line":201},[609],{"type":70,"tag":177,"props":610,"children":611},{},[612],{"type":76,"value":613},"  job.mode = \"BATCH\"\n",{"type":70,"tag":177,"props":615,"children":616},{"class":179,"line":261},[617],{"type":70,"tag":177,"props":618,"children":619},{},[620],{"type":76,"value":621},"  job.name = \"Hello World\"\n",{"type":70,"tag":177,"props":623,"children":624},{"class":179,"line":271},[625],{"type":70,"tag":177,"props":626,"children":627},{},[628],{"type":76,"value":463},{"type":70,"tag":177,"props":630,"children":631},{"class":179,"line":280},[632],{"type":70,"tag":177,"props":633,"children":634},{"emptyLinePlaceholder":265},[635],{"type":76,"value":268},{"type":70,"tag":177,"props":637,"children":638},{"class":179,"line":29},[639],{"type":70,"tag":177,"props":640,"children":641},{},[642],{"type":76,"value":643},"source {\n",{"type":70,"tag":177,"props":645,"children":647},{"class":179,"line":646},7,[648],{"type":70,"tag":177,"props":649,"children":650},{},[651],{"type":76,"value":652},"  FakeSource {\n",{"type":70,"tag":177,"props":654,"children":656},{"class":179,"line":655},8,[657],{"type":70,"tag":177,"props":658,"children":659},{},[660],{"type":76,"value":661},"    row.num = 100\n",{"type":70,"tag":177,"props":663,"children":665},{"class":179,"line":664},9,[666],{"type":70,"tag":177,"props":667,"children":668},{},[669],{"type":76,"value":670},"    schema = {\n",{"type":70,"tag":177,"props":672,"children":674},{"class":179,"line":673},10,[675],{"type":70,"tag":177,"props":676,"children":677},{},[678],{"type":76,"value":679},"      fields {\n",{"type":70,"tag":177,"props":681,"children":683},{"class":179,"line":682},11,[684],{"type":70,"tag":177,"props":685,"children":686},{},[687],{"type":76,"value":688},"        id = \"bigint\"\n",{"type":70,"tag":177,"props":690,"children":692},{"class":179,"line":691},12,[693],{"type":70,"tag":177,"props":694,"children":695},{},[696],{"type":76,"value":697},"        name = \"string\"\n",{"type":70,"tag":177,"props":699,"children":701},{"class":179,"line":700},13,[702],{"type":70,"tag":177,"props":703,"children":704},{},[705],{"type":76,"value":706},"        age = \"int\"\n",{"type":70,"tag":177,"props":708,"children":710},{"class":179,"line":709},14,[711],{"type":70,"tag":177,"props":712,"children":713},{},[714],{"type":76,"value":715},"      }\n",{"type":70,"tag":177,"props":717,"children":719},{"class":179,"line":718},15,[720],{"type":70,"tag":177,"props":721,"children":722},{},[723],{"type":76,"value":724},"    }\n",{"type":70,"tag":177,"props":726,"children":728},{"class":179,"line":727},16,[729],{"type":70,"tag":177,"props":730,"children":731},{},[732],{"type":76,"value":733},"  }\n",{"type":70,"tag":177,"props":735,"children":737},{"class":179,"line":736},17,[738],{"type":70,"tag":177,"props":739,"children":740},{},[741],{"type":76,"value":463},{"type":70,"tag":177,"props":743,"children":745},{"class":179,"line":744},18,[746],{"type":70,"tag":177,"props":747,"children":748},{"emptyLinePlaceholder":265},[749],{"type":76,"value":268},{"type":70,"tag":177,"props":751,"children":753},{"class":179,"line":752},19,[754],{"type":70,"tag":177,"props":755,"children":756},{},[757],{"type":76,"value":758},"sink {\n",{"type":70,"tag":177,"props":760,"children":762},{"class":179,"line":761},20,[763],{"type":70,"tag":177,"props":764,"children":765},{},[766],{"type":76,"value":767},"  Console {\n",{"type":70,"tag":177,"props":769,"children":771},{"class":179,"line":770},21,[772],{"type":70,"tag":177,"props":773,"children":774},{},[775],{"type":76,"value":776},"    format = \"json\"\n",{"type":70,"tag":177,"props":778,"children":780},{"class":179,"line":779},22,[781],{"type":70,"tag":177,"props":782,"children":783},{},[784],{"type":76,"value":733},{"type":70,"tag":177,"props":786,"children":788},{"class":179,"line":787},23,[789],{"type":70,"tag":177,"props":790,"children":791},{},[792],{"type":76,"value":463},{"type":70,"tag":79,"props":794,"children":795},{},[796],{"type":76,"value":797},"Run the job:",{"type":70,"tag":165,"props":799,"children":801},{"className":167,"code":800,"language":169,"meta":170,"style":170},"seatunnel.sh -c config\u002Fhello_world.conf -e spark\n# or with flink\nseatunnel.sh -c config\u002Fhello_world.conf -e flink\n",[802],{"type":70,"tag":173,"props":803,"children":804},{"__ignoreMap":170},[805,833,841],{"type":70,"tag":177,"props":806,"children":807},{"class":179,"line":180},[808,813,818,823,828],{"type":70,"tag":177,"props":809,"children":810},{"style":184},[811],{"type":76,"value":812},"seatunnel.sh",{"type":70,"tag":177,"props":814,"children":815},{"style":190},[816],{"type":76,"value":817}," -c",{"type":70,"tag":177,"props":819,"children":820},{"style":190},[821],{"type":76,"value":822}," config\u002Fhello_world.conf",{"type":70,"tag":177,"props":824,"children":825},{"style":190},[826],{"type":76,"value":827}," -e",{"type":70,"tag":177,"props":829,"children":830},{"style":190},[831],{"type":76,"value":832}," spark\n",{"type":70,"tag":177,"props":834,"children":835},{"class":179,"line":201},[836],{"type":70,"tag":177,"props":837,"children":838},{"style":232},[839],{"type":76,"value":840},"# or with flink\n",{"type":70,"tag":177,"props":842,"children":843},{"class":179,"line":261},[844,848,852,856,860],{"type":70,"tag":177,"props":845,"children":846},{"style":184},[847],{"type":76,"value":812},{"type":70,"tag":177,"props":849,"children":850},{"style":190},[851],{"type":76,"value":817},{"type":70,"tag":177,"props":853,"children":854},{"style":190},[855],{"type":76,"value":822},{"type":70,"tag":177,"props":857,"children":858},{"style":190},[859],{"type":76,"value":827},{"type":70,"tag":177,"props":861,"children":862},{"style":190},[863],{"type":76,"value":864}," flink\n",{"type":70,"tag":866,"props":867,"children":868},"hr",{},[],{"type":70,"tag":93,"props":870,"children":872},{"id":871},"overview",[873],{"type":76,"value":874},"Overview",{"type":70,"tag":100,"props":876,"children":878},{"id":877},"purpose-and-target-users",[879],{"type":76,"value":880},"Purpose and Target Users",{"type":70,"tag":79,"props":882,"children":883},{},[884,889],{"type":70,"tag":85,"props":885,"children":886},{},[887],{"type":76,"value":888},"SeaTunnel",{"type":76,"value":890}," is designed for:",{"type":70,"tag":107,"props":892,"children":893},{},[894,904,914,924,934],{"type":70,"tag":111,"props":895,"children":896},{},[897,902],{"type":70,"tag":85,"props":898,"children":899},{},[900],{"type":76,"value":901},"Data Engineers",{"type":76,"value":903},": Building large-scale data pipelines with minimal complexity",{"type":70,"tag":111,"props":905,"children":906},{},[907,912],{"type":70,"tag":85,"props":908,"children":909},{},[910],{"type":76,"value":911},"DevOps Teams",{"type":76,"value":913},": Managing data integration infrastructure",{"type":70,"tag":111,"props":915,"children":916},{},[917,922],{"type":70,"tag":85,"props":918,"children":919},{},[920],{"type":76,"value":921},"Enterprise Platforms",{"type":76,"value":923},": Handling 100+ billion data records daily",{"type":70,"tag":111,"props":925,"children":926},{},[927,932],{"type":70,"tag":85,"props":928,"children":929},{},[930],{"type":76,"value":931},"Real-time Analytics",{"type":76,"value":933},": Supporting streaming data synchronization",{"type":70,"tag":111,"props":935,"children":936},{},[937,942],{"type":70,"tag":85,"props":938,"children":939},{},[940],{"type":76,"value":941},"Legacy System Migration",{"type":76,"value":943},": CDC-based incremental sync from transactional databases",{"type":70,"tag":100,"props":945,"children":947},{"id":946},"core-capabilities",[948],{"type":76,"value":949},"Core Capabilities",{"type":70,"tag":951,"props":952,"children":953},"ol",{},[954,980,1031,1097],{"type":70,"tag":111,"props":955,"children":956},{},[957,962],{"type":70,"tag":85,"props":958,"children":959},{},[960],{"type":76,"value":961},"Multimodal Support",{"type":70,"tag":107,"props":963,"children":964},{},[965,970,975],{"type":70,"tag":111,"props":966,"children":967},{},[968],{"type":76,"value":969},"Structured data (databases, data warehouses)",{"type":70,"tag":111,"props":971,"children":972},{},[973],{"type":76,"value":974},"Unstructured data (video, images, binaries)",{"type":70,"tag":111,"props":976,"children":977},{},[978],{"type":76,"value":979},"Semi-structured data (JSON, logs, binlog streams)",{"type":70,"tag":111,"props":981,"children":982},{},[983,988],{"type":70,"tag":85,"props":984,"children":985},{},[986],{"type":76,"value":987},"Multiple Synchronization Methods",{"type":70,"tag":107,"props":989,"children":990},{},[991,1001,1011,1021],{"type":70,"tag":111,"props":992,"children":993},{},[994,999],{"type":70,"tag":85,"props":995,"children":996},{},[997],{"type":76,"value":998},"Batch",{"type":76,"value":1000},": Full historical data transfer",{"type":70,"tag":111,"props":1002,"children":1003},{},[1004,1009],{"type":70,"tag":85,"props":1005,"children":1006},{},[1007],{"type":76,"value":1008},"Streaming",{"type":76,"value":1010},": Real-time data pipeline",{"type":70,"tag":111,"props":1012,"children":1013},{},[1014,1019],{"type":70,"tag":85,"props":1015,"children":1016},{},[1017],{"type":76,"value":1018},"CDC",{"type":76,"value":1020},": Incremental capture from databases",{"type":70,"tag":111,"props":1022,"children":1023},{},[1024,1029],{"type":70,"tag":85,"props":1025,"children":1026},{},[1027],{"type":76,"value":1028},"Full + Incremental",{"type":76,"value":1030},": Combined approach",{"type":70,"tag":111,"props":1032,"children":1033},{},[1034,1039],{"type":70,"tag":85,"props":1035,"children":1036},{},[1037],{"type":76,"value":1038},"100+ Pre-built Connectors",{"type":70,"tag":107,"props":1040,"children":1041},{},[1042,1047,1052,1057,1062,1067,1072,1077,1082,1087,1092],{"type":70,"tag":111,"props":1043,"children":1044},{},[1045],{"type":76,"value":1046},"Databases: MySQL, PostgreSQL, Oracle, SQL Server, MongoDB, DB2, OceanBase",{"type":70,"tag":111,"props":1048,"children":1049},{},[1050],{"type":76,"value":1051},"Data Warehouses: Snowflake, BigQuery, Redshift, Iceberg",{"type":70,"tag":111,"props":1053,"children":1054},{},[1055],{"type":76,"value":1056},"Data Lakes: Hive, Iceberg, Hudi, Paimon",{"type":70,"tag":111,"props":1058,"children":1059},{},[1060],{"type":76,"value":1061},"Cloud SaaS: Salesforce, Shopify, Google Sheets",{"type":70,"tag":111,"props":1063,"children":1064},{},[1065],{"type":76,"value":1066},"Message Queues: Kafka, RabbitMQ, Pulsar, RocketMQ, ActiveMQ",{"type":70,"tag":111,"props":1068,"children":1069},{},[1070],{"type":76,"value":1071},"Search Engines: Elasticsearch, OpenSearch, Easysearch",{"type":70,"tag":111,"props":1073,"children":1074},{},[1075],{"type":76,"value":1076},"OLAP Engines: ClickHouse, StarRocks, Doris, Druid",{"type":70,"tag":111,"props":1078,"children":1079},{},[1080],{"type":76,"value":1081},"Time-series Databases: IoTDB, TDengine, InfluxDB",{"type":70,"tag":111,"props":1083,"children":1084},{},[1085],{"type":76,"value":1086},"Vector Databases: Milvus, Qdrant",{"type":70,"tag":111,"props":1088,"children":1089},{},[1090],{"type":76,"value":1091},"Graph Databases: Neo4j",{"type":70,"tag":111,"props":1093,"children":1094},{},[1095],{"type":76,"value":1096},"Object Storage: S3, GCS, HDFS, OssFile, CosFile",{"type":70,"tag":111,"props":1098,"children":1099},{},[1100,1105],{"type":70,"tag":85,"props":1101,"children":1102},{},[1103],{"type":76,"value":1104},"Multi-Engine Support",{"type":70,"tag":107,"props":1106,"children":1107},{},[1108,1118,1128],{"type":70,"tag":111,"props":1109,"children":1110},{},[1111,1116],{"type":70,"tag":85,"props":1112,"children":1113},{},[1114],{"type":76,"value":1115},"Zeta Engine",{"type":76,"value":1117},": Lightweight, standalone deployment (no Spark\u002FFlink required)",{"type":70,"tag":111,"props":1119,"children":1120},{},[1121,1126],{"type":70,"tag":85,"props":1122,"children":1123},{},[1124],{"type":76,"value":1125},"Apache Flink",{"type":76,"value":1127},": Distributed streaming engine",{"type":70,"tag":111,"props":1129,"children":1130},{},[1131,1136],{"type":70,"tag":85,"props":1132,"children":1133},{},[1134],{"type":76,"value":1135},"Apache Spark",{"type":76,"value":1137},": Distributed batch\u002Fbatch-stream processing",{"type":70,"tag":866,"props":1139,"children":1140},{},[],{"type":70,"tag":93,"props":1142,"children":1144},{"id":1143},"features",[1145],{"type":76,"value":1146},"Features",{"type":70,"tag":100,"props":1148,"children":1149},{"id":38},[1150],{"type":76,"value":1151},"High-Performance",{"type":70,"tag":107,"props":1153,"children":1154},{},[1155,1165,1175,1185],{"type":70,"tag":111,"props":1156,"children":1157},{},[1158,1163],{"type":70,"tag":85,"props":1159,"children":1160},{},[1161],{"type":76,"value":1162},"Distributed Snapshot Algorithm",{"type":76,"value":1164},": Ensures data consistency without locks",{"type":70,"tag":111,"props":1166,"children":1167},{},[1168,1173],{"type":70,"tag":85,"props":1169,"children":1170},{},[1171],{"type":76,"value":1172},"JDBC Multiplexing",{"type":76,"value":1174},": Minimizes database connections for real-time sync",{"type":70,"tag":111,"props":1176,"children":1177},{},[1178,1183],{"type":70,"tag":85,"props":1179,"children":1180},{},[1181],{"type":76,"value":1182},"Log Parsing",{"type":76,"value":1184},": Efficient CDC implementation with binary log analysis",{"type":70,"tag":111,"props":1186,"children":1187},{},[1188,1193],{"type":70,"tag":85,"props":1189,"children":1190},{},[1191],{"type":76,"value":1192},"Resource Optimization",{"type":76,"value":1194},": Reduces computing resources and I\u002FO overhead",{"type":70,"tag":100,"props":1196,"children":1198},{"id":1197},"data-quality-reliability",[1199],{"type":76,"value":1200},"Data Quality & Reliability",{"type":70,"tag":107,"props":1202,"children":1203},{},[1204,1214,1224,1234],{"type":70,"tag":111,"props":1205,"children":1206},{},[1207,1212],{"type":70,"tag":85,"props":1208,"children":1209},{},[1210],{"type":76,"value":1211},"Real-time Monitoring",{"type":76,"value":1213},": Track synchronization progress and data metrics",{"type":70,"tag":111,"props":1215,"children":1216},{},[1217,1222],{"type":70,"tag":85,"props":1218,"children":1219},{},[1220],{"type":76,"value":1221},"Data Loss Prevention",{"type":76,"value":1223},": Transactional guarantees (exactly-once semantics)",{"type":70,"tag":111,"props":1225,"children":1226},{},[1227,1232],{"type":70,"tag":85,"props":1228,"children":1229},{},[1230],{"type":76,"value":1231},"Deduplication",{"type":76,"value":1233},": Prevents duplicate records during reprocessing",{"type":70,"tag":111,"props":1235,"children":1236},{},[1237,1242],{"type":70,"tag":85,"props":1238,"children":1239},{},[1240],{"type":76,"value":1241},"Error Handling",{"type":76,"value":1243},": Graceful failure recovery and retry logic",{"type":70,"tag":100,"props":1245,"children":1247},{"id":1246},"developer-friendly",[1248],{"type":76,"value":1249},"Developer-Friendly",{"type":70,"tag":107,"props":1251,"children":1252},{},[1253,1263,1273,1283],{"type":70,"tag":111,"props":1254,"children":1255},{},[1256,1261],{"type":70,"tag":85,"props":1257,"children":1258},{},[1259],{"type":76,"value":1260},"SQL-like Configuration",{"type":76,"value":1262},": Intuitive HOCON job definition syntax",{"type":70,"tag":111,"props":1264,"children":1265},{},[1266,1271],{"type":70,"tag":85,"props":1267,"children":1268},{},[1269],{"type":76,"value":1270},"Visual Web UI",{"type":76,"value":1272},": Drag-and-drop job builder (SeaTunnel Web Project)",{"type":70,"tag":111,"props":1274,"children":1275},{},[1276,1281],{"type":70,"tag":85,"props":1277,"children":1278},{},[1279],{"type":76,"value":1280},"Extensive Documentation",{"type":76,"value":1282},": Comprehensive guides with i18n (English + Chinese)",{"type":70,"tag":111,"props":1284,"children":1285},{},[1286,1291],{"type":70,"tag":85,"props":1287,"children":1288},{},[1289],{"type":76,"value":1290},"Community Support",{"type":76,"value":1292},": Active community via Slack and mailing lists",{"type":70,"tag":100,"props":1294,"children":1296},{"id":1295},"production-ready",[1297],{"type":76,"value":1298},"Production Ready",{"type":70,"tag":107,"props":1300,"children":1301},{},[1302,1312,1322,1332],{"type":70,"tag":111,"props":1303,"children":1304},{},[1305,1310],{"type":70,"tag":85,"props":1306,"children":1307},{},[1308],{"type":76,"value":1309},"Proven at Scale",{"type":76,"value":1311},": Used in enterprises processing billions of records daily",{"type":70,"tag":111,"props":1313,"children":1314},{},[1315,1320],{"type":70,"tag":85,"props":1316,"children":1317},{},[1318],{"type":76,"value":1319},"Version Stability",{"type":76,"value":1321},": Regular releases with backward compatibility",{"type":70,"tag":111,"props":1323,"children":1324},{},[1325,1330],{"type":70,"tag":85,"props":1326,"children":1327},{},[1328],{"type":76,"value":1329},"Enterprise Features",{"type":76,"value":1331},": Multi-tenancy, RBAC, audit logging",{"type":70,"tag":111,"props":1333,"children":1334},{},[1335,1340],{"type":70,"tag":85,"props":1336,"children":1337},{},[1338],{"type":76,"value":1339},"Cloud Native",{"type":76,"value":1341},": Kubernetes-ready deployment",{"type":70,"tag":866,"props":1343,"children":1344},{},[],{"type":70,"tag":93,"props":1346,"children":1348},{"id":1347},"installation-1",[1349],{"type":76,"value":156},{"type":70,"tag":100,"props":1351,"children":1353},{"id":1352},"installation-methods",[1354],{"type":76,"value":1355},"Installation Methods",{"type":70,"tag":158,"props":1357,"children":1359},{"id":1358},"method-1-binary-download-recommended-for-quick-start",[1360],{"type":76,"value":1361},"Method 1: Binary Download (Recommended for Quick Start)",{"type":70,"tag":165,"props":1363,"children":1365},{"className":167,"code":1364,"language":169,"meta":170,"style":170},"# 1. Download binary\nVERSION=2.3.12\nwget https:\u002F\u002Farchive.apache.org\u002Fdist\u002Fseatunnel\u002F${VERSION}\u002Fapache-seatunnel-${VERSION}-bin.tar.gz\n\n# 2. Extract\ntar -xzf apache-seatunnel-${VERSION}-bin.tar.gz\ncd apache-seatunnel-${VERSION}\n\n# 3. Verify\n.\u002Fbin\u002Fseatunnel.sh --version\n",[1366],{"type":70,"tag":173,"props":1367,"children":1368},{"__ignoreMap":170},[1369,1377,1392,1435,1442,1450,1481,1504,1511,1519],{"type":70,"tag":177,"props":1370,"children":1371},{"class":179,"line":180},[1372],{"type":70,"tag":177,"props":1373,"children":1374},{"style":232},[1375],{"type":76,"value":1376},"# 1. Download binary\n",{"type":70,"tag":177,"props":1378,"children":1379},{"class":179,"line":201},[1380,1384,1388],{"type":70,"tag":177,"props":1381,"children":1382},{"style":342},[1383],{"type":76,"value":345},{"type":70,"tag":177,"props":1385,"children":1386},{"style":348},[1387],{"type":76,"value":351},{"type":70,"tag":177,"props":1389,"children":1390},{"style":190},[1391],{"type":76,"value":356},{"type":70,"tag":177,"props":1393,"children":1394},{"class":179,"line":261},[1395,1399,1403,1407,1411,1415,1419,1423,1427,1431],{"type":70,"tag":177,"props":1396,"children":1397},{"style":184},[1398],{"type":76,"value":364},{"type":70,"tag":177,"props":1400,"children":1401},{"style":190},[1402],{"type":76,"value":369},{"type":70,"tag":177,"props":1404,"children":1405},{"style":348},[1406],{"type":76,"value":374},{"type":70,"tag":177,"props":1408,"children":1409},{"style":342},[1410],{"type":76,"value":345},{"type":70,"tag":177,"props":1412,"children":1413},{"style":348},[1414],{"type":76,"value":383},{"type":70,"tag":177,"props":1416,"children":1417},{"style":190},[1418],{"type":76,"value":388},{"type":70,"tag":177,"props":1420,"children":1421},{"style":348},[1422],{"type":76,"value":374},{"type":70,"tag":177,"props":1424,"children":1425},{"style":342},[1426],{"type":76,"value":345},{"type":70,"tag":177,"props":1428,"children":1429},{"style":348},[1430],{"type":76,"value":383},{"type":70,"tag":177,"props":1432,"children":1433},{"style":190},[1434],{"type":76,"value":405},{"type":70,"tag":177,"props":1436,"children":1437},{"class":179,"line":271},[1438],{"type":70,"tag":177,"props":1439,"children":1440},{"emptyLinePlaceholder":265},[1441],{"type":76,"value":268},{"type":70,"tag":177,"props":1443,"children":1444},{"class":179,"line":280},[1445],{"type":70,"tag":177,"props":1446,"children":1447},{"style":232},[1448],{"type":76,"value":1449},"# 2. Extract\n",{"type":70,"tag":177,"props":1451,"children":1452},{"class":179,"line":29},[1453,1457,1461,1465,1469,1473,1477],{"type":70,"tag":177,"props":1454,"children":1455},{"style":184},[1456],{"type":76,"value":413},{"type":70,"tag":177,"props":1458,"children":1459},{"style":190},[1460],{"type":76,"value":418},{"type":70,"tag":177,"props":1462,"children":1463},{"style":190},[1464],{"type":76,"value":423},{"type":70,"tag":177,"props":1466,"children":1467},{"style":348},[1468],{"type":76,"value":374},{"type":70,"tag":177,"props":1470,"children":1471},{"style":342},[1472],{"type":76,"value":345},{"type":70,"tag":177,"props":1474,"children":1475},{"style":348},[1476],{"type":76,"value":383},{"type":70,"tag":177,"props":1478,"children":1479},{"style":190},[1480],{"type":76,"value":405},{"type":70,"tag":177,"props":1482,"children":1483},{"class":179,"line":646},[1484,1488,1492,1496,1500],{"type":70,"tag":177,"props":1485,"children":1486},{"style":205},[1487],{"type":76,"value":208},{"type":70,"tag":177,"props":1489,"children":1490},{"style":190},[1491],{"type":76,"value":423},{"type":70,"tag":177,"props":1493,"children":1494},{"style":348},[1495],{"type":76,"value":374},{"type":70,"tag":177,"props":1497,"children":1498},{"style":342},[1499],{"type":76,"value":345},{"type":70,"tag":177,"props":1501,"children":1502},{"style":348},[1503],{"type":76,"value":463},{"type":70,"tag":177,"props":1505,"children":1506},{"class":179,"line":655},[1507],{"type":70,"tag":177,"props":1508,"children":1509},{"emptyLinePlaceholder":265},[1510],{"type":76,"value":268},{"type":70,"tag":177,"props":1512,"children":1513},{"class":179,"line":664},[1514],{"type":70,"tag":177,"props":1515,"children":1516},{"style":232},[1517],{"type":76,"value":1518},"# 3. Verify\n",{"type":70,"tag":177,"props":1520,"children":1521},{"class":179,"line":673},[1522,1527],{"type":70,"tag":177,"props":1523,"children":1524},{"style":184},[1525],{"type":76,"value":1526},".\u002Fbin\u002Fseatunnel.sh",{"type":70,"tag":177,"props":1528,"children":1529},{"style":190},[1530],{"type":76,"value":569},{"type":70,"tag":158,"props":1532,"children":1534},{"id":1533},"method-2-build-from-source",[1535],{"type":76,"value":1536},"Method 2: Build from Source",{"type":70,"tag":165,"props":1538,"children":1540},{"className":167,"code":1539,"language":169,"meta":170,"style":170},"# 1. Clone repository\ngit clone https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel.git\ncd seatunnel\n\n# 2. Build with Maven\nmvn clean install -DskipTests\n\n# 3. Navigate to distribution\ncd seatunnel-dist\u002Ftarget\u002Fapache-seatunnel-*-bin\u002Fapache-seatunnel-*\n\n# 4. Verify\n.\u002Fbin\u002Fseatunnel.sh --version\n",[1541],{"type":70,"tag":173,"props":1542,"children":1543},{"__ignoreMap":170},[1544,1552,1567,1578,1585,1593,1612,1619,1627,1654,1661,1669],{"type":70,"tag":177,"props":1545,"children":1546},{"class":179,"line":180},[1547],{"type":70,"tag":177,"props":1548,"children":1549},{"style":232},[1550],{"type":76,"value":1551},"# 1. Clone repository\n",{"type":70,"tag":177,"props":1553,"children":1554},{"class":179,"line":201},[1555,1559,1563],{"type":70,"tag":177,"props":1556,"children":1557},{"style":184},[1558],{"type":76,"value":187},{"type":70,"tag":177,"props":1560,"children":1561},{"style":190},[1562],{"type":76,"value":193},{"type":70,"tag":177,"props":1564,"children":1565},{"style":190},[1566],{"type":76,"value":198},{"type":70,"tag":177,"props":1568,"children":1569},{"class":179,"line":261},[1570,1574],{"type":70,"tag":177,"props":1571,"children":1572},{"style":205},[1573],{"type":76,"value":208},{"type":70,"tag":177,"props":1575,"children":1576},{"style":190},[1577],{"type":76,"value":213},{"type":70,"tag":177,"props":1579,"children":1580},{"class":179,"line":271},[1581],{"type":70,"tag":177,"props":1582,"children":1583},{"emptyLinePlaceholder":265},[1584],{"type":76,"value":268},{"type":70,"tag":177,"props":1586,"children":1587},{"class":179,"line":280},[1588],{"type":70,"tag":177,"props":1589,"children":1590},{"style":232},[1591],{"type":76,"value":1592},"# 2. Build with Maven\n",{"type":70,"tag":177,"props":1594,"children":1595},{"class":179,"line":29},[1596,1600,1604,1608],{"type":70,"tag":177,"props":1597,"children":1598},{"style":184},[1599],{"type":76,"value":243},{"type":70,"tag":177,"props":1601,"children":1602},{"style":190},[1603],{"type":76,"value":248},{"type":70,"tag":177,"props":1605,"children":1606},{"style":190},[1607],{"type":76,"value":253},{"type":70,"tag":177,"props":1609,"children":1610},{"style":190},[1611],{"type":76,"value":258},{"type":70,"tag":177,"props":1613,"children":1614},{"class":179,"line":646},[1615],{"type":70,"tag":177,"props":1616,"children":1617},{"emptyLinePlaceholder":265},[1618],{"type":76,"value":268},{"type":70,"tag":177,"props":1620,"children":1621},{"class":179,"line":655},[1622],{"type":70,"tag":177,"props":1623,"children":1624},{"style":232},[1625],{"type":76,"value":1626},"# 3. Navigate to distribution\n",{"type":70,"tag":177,"props":1628,"children":1629},{"class":179,"line":664},[1630,1634,1639,1644,1649],{"type":70,"tag":177,"props":1631,"children":1632},{"style":205},[1633],{"type":76,"value":208},{"type":70,"tag":177,"props":1635,"children":1636},{"style":190},[1637],{"type":76,"value":1638}," seatunnel-dist\u002Ftarget\u002Fapache-seatunnel-",{"type":70,"tag":177,"props":1640,"children":1641},{"style":342},[1642],{"type":76,"value":1643},"*",{"type":70,"tag":177,"props":1645,"children":1646},{"style":190},[1647],{"type":76,"value":1648},"-bin\u002Fapache-seatunnel-",{"type":70,"tag":177,"props":1650,"children":1651},{"style":342},[1652],{"type":76,"value":1653},"*\n",{"type":70,"tag":177,"props":1655,"children":1656},{"class":179,"line":673},[1657],{"type":70,"tag":177,"props":1658,"children":1659},{"emptyLinePlaceholder":265},[1660],{"type":76,"value":268},{"type":70,"tag":177,"props":1662,"children":1663},{"class":179,"line":682},[1664],{"type":70,"tag":177,"props":1665,"children":1666},{"style":232},[1667],{"type":76,"value":1668},"# 4. Verify\n",{"type":70,"tag":177,"props":1670,"children":1671},{"class":179,"line":691},[1672,1676],{"type":70,"tag":177,"props":1673,"children":1674},{"style":184},[1675],{"type":76,"value":1526},{"type":70,"tag":177,"props":1677,"children":1678},{"style":190},[1679],{"type":76,"value":569},{"type":70,"tag":158,"props":1681,"children":1683},{"id":1682},"method-3-docker",[1684],{"type":76,"value":1685},"Method 3: Docker",{"type":70,"tag":165,"props":1687,"children":1689},{"className":167,"code":1688,"language":169,"meta":170,"style":170},"# Pull official Docker image\ndocker pull apache\u002Fseatunnel:latest\n\n# Run container\ndocker run -it apache\u002Fseatunnel:latest \u002Fbin\u002Fbash\n\n# Or run a job directly\ndocker run -v \u002Fpath\u002Fto\u002Fconfig:\u002Fconfig \\\n  apache\u002Fseatunnel:latest \\\n  seatunnel.sh -c \u002Fconfig\u002Fjob.conf -e spark\n",[1690],{"type":70,"tag":173,"props":1691,"children":1692},{"__ignoreMap":170},[1693,1701,1719,1726,1734,1761,1768,1776,1802,1814],{"type":70,"tag":177,"props":1694,"children":1695},{"class":179,"line":180},[1696],{"type":70,"tag":177,"props":1697,"children":1698},{"style":232},[1699],{"type":76,"value":1700},"# Pull official Docker image\n",{"type":70,"tag":177,"props":1702,"children":1703},{"class":179,"line":201},[1704,1709,1714],{"type":70,"tag":177,"props":1705,"children":1706},{"style":184},[1707],{"type":76,"value":1708},"docker",{"type":70,"tag":177,"props":1710,"children":1711},{"style":190},[1712],{"type":76,"value":1713}," pull",{"type":70,"tag":177,"props":1715,"children":1716},{"style":190},[1717],{"type":76,"value":1718}," apache\u002Fseatunnel:latest\n",{"type":70,"tag":177,"props":1720,"children":1721},{"class":179,"line":261},[1722],{"type":70,"tag":177,"props":1723,"children":1724},{"emptyLinePlaceholder":265},[1725],{"type":76,"value":268},{"type":70,"tag":177,"props":1727,"children":1728},{"class":179,"line":271},[1729],{"type":70,"tag":177,"props":1730,"children":1731},{"style":232},[1732],{"type":76,"value":1733},"# Run container\n",{"type":70,"tag":177,"props":1735,"children":1736},{"class":179,"line":280},[1737,1741,1746,1751,1756],{"type":70,"tag":177,"props":1738,"children":1739},{"style":184},[1740],{"type":76,"value":1708},{"type":70,"tag":177,"props":1742,"children":1743},{"style":190},[1744],{"type":76,"value":1745}," run",{"type":70,"tag":177,"props":1747,"children":1748},{"style":190},[1749],{"type":76,"value":1750}," -it",{"type":70,"tag":177,"props":1752,"children":1753},{"style":190},[1754],{"type":76,"value":1755}," apache\u002Fseatunnel:latest",{"type":70,"tag":177,"props":1757,"children":1758},{"style":190},[1759],{"type":76,"value":1760}," \u002Fbin\u002Fbash\n",{"type":70,"tag":177,"props":1762,"children":1763},{"class":179,"line":29},[1764],{"type":70,"tag":177,"props":1765,"children":1766},{"emptyLinePlaceholder":265},[1767],{"type":76,"value":268},{"type":70,"tag":177,"props":1769,"children":1770},{"class":179,"line":646},[1771],{"type":70,"tag":177,"props":1772,"children":1773},{"style":232},[1774],{"type":76,"value":1775},"# Or run a job directly\n",{"type":70,"tag":177,"props":1777,"children":1778},{"class":179,"line":655},[1779,1783,1787,1792,1797],{"type":70,"tag":177,"props":1780,"children":1781},{"style":184},[1782],{"type":76,"value":1708},{"type":70,"tag":177,"props":1784,"children":1785},{"style":190},[1786],{"type":76,"value":1745},{"type":70,"tag":177,"props":1788,"children":1789},{"style":190},[1790],{"type":76,"value":1791}," -v",{"type":70,"tag":177,"props":1793,"children":1794},{"style":190},[1795],{"type":76,"value":1796}," \u002Fpath\u002Fto\u002Fconfig:\u002Fconfig",{"type":70,"tag":177,"props":1798,"children":1799},{"style":342},[1800],{"type":76,"value":1801}," \\\n",{"type":70,"tag":177,"props":1803,"children":1804},{"class":179,"line":664},[1805,1810],{"type":70,"tag":177,"props":1806,"children":1807},{"style":190},[1808],{"type":76,"value":1809},"  apache\u002Fseatunnel:latest",{"type":70,"tag":177,"props":1811,"children":1812},{"style":342},[1813],{"type":76,"value":1801},{"type":70,"tag":177,"props":1815,"children":1816},{"class":179,"line":673},[1817,1822,1826,1831,1835],{"type":70,"tag":177,"props":1818,"children":1819},{"style":190},[1820],{"type":76,"value":1821},"  seatunnel.sh",{"type":70,"tag":177,"props":1823,"children":1824},{"style":190},[1825],{"type":76,"value":817},{"type":70,"tag":177,"props":1827,"children":1828},{"style":190},[1829],{"type":76,"value":1830}," \u002Fconfig\u002Fjob.conf",{"type":70,"tag":177,"props":1832,"children":1833},{"style":190},[1834],{"type":76,"value":827},{"type":70,"tag":177,"props":1836,"children":1837},{"style":190},[1838],{"type":76,"value":832},{"type":70,"tag":100,"props":1840,"children":1842},{"id":1841},"environment-setup",[1843],{"type":76,"value":1844},"Environment Setup",{"type":70,"tag":158,"props":1846,"children":1848},{"id":1847},"set-java-home",[1849],{"type":76,"value":1850},"Set Java Home",{"type":70,"tag":165,"props":1852,"children":1854},{"className":167,"code":1853,"language":169,"meta":170,"style":170},"# Bash\u002FZsh\nexport JAVA_HOME=\u002Fpath\u002Fto\u002Fjava\nexport PATH=$JAVA_HOME\u002Fbin:$PATH\n\n# Verify\njava -version\n",[1855],{"type":70,"tag":173,"props":1856,"children":1857},{"__ignoreMap":170},[1858,1866,1885,1905,1912,1920],{"type":70,"tag":177,"props":1859,"children":1860},{"class":179,"line":180},[1861],{"type":70,"tag":177,"props":1862,"children":1863},{"style":232},[1864],{"type":76,"value":1865},"# Bash\u002FZsh\n",{"type":70,"tag":177,"props":1867,"children":1868},{"class":179,"line":201},[1869,1873,1877,1881],{"type":70,"tag":177,"props":1870,"children":1871},{"style":490},[1872],{"type":76,"value":493},{"type":70,"tag":177,"props":1874,"children":1875},{"style":342},[1876],{"type":76,"value":498},{"type":70,"tag":177,"props":1878,"children":1879},{"style":348},[1880],{"type":76,"value":351},{"type":70,"tag":177,"props":1882,"children":1883},{"style":342},[1884],{"type":76,"value":507},{"type":70,"tag":177,"props":1886,"children":1887},{"class":179,"line":261},[1888,1892,1896,1900],{"type":70,"tag":177,"props":1889,"children":1890},{"style":490},[1891],{"type":76,"value":493},{"type":70,"tag":177,"props":1893,"children":1894},{"style":342},[1895],{"type":76,"value":534},{"type":70,"tag":177,"props":1897,"children":1898},{"style":348},[1899],{"type":76,"value":351},{"type":70,"tag":177,"props":1901,"children":1902},{"style":342},[1903],{"type":76,"value":1904},"$JAVA_HOME\u002Fbin:$PATH\n",{"type":70,"tag":177,"props":1906,"children":1907},{"class":179,"line":271},[1908],{"type":70,"tag":177,"props":1909,"children":1910},{"emptyLinePlaceholder":265},[1911],{"type":76,"value":268},{"type":70,"tag":177,"props":1913,"children":1914},{"class":179,"line":280},[1915],{"type":70,"tag":177,"props":1916,"children":1917},{"style":232},[1918],{"type":76,"value":1919},"# Verify\n",{"type":70,"tag":177,"props":1921,"children":1922},{"class":179,"line":29},[1923,1927],{"type":70,"tag":177,"props":1924,"children":1925},{"style":184},[1926],{"type":76,"value":59},{"type":70,"tag":177,"props":1928,"children":1929},{"style":190},[1930],{"type":76,"value":1931}," -version\n",{"type":70,"tag":158,"props":1933,"children":1935},{"id":1934},"configure-for-spark-engine",[1936],{"type":76,"value":1937},"Configure for Spark Engine",{"type":70,"tag":165,"props":1939,"children":1941},{"className":167,"code":1940,"language":169,"meta":170,"style":170},"# Set Spark Home (if using Spark engine)\nexport SPARK_HOME=\u002Fpath\u002Fto\u002Fspark\n\n# Verify Spark installation\n$SPARK_HOME\u002Fbin\u002Fspark-submit --version\n",[1942],{"type":70,"tag":173,"props":1943,"children":1944},{"__ignoreMap":170},[1945,1953,1974,1981,1989],{"type":70,"tag":177,"props":1946,"children":1947},{"class":179,"line":180},[1948],{"type":70,"tag":177,"props":1949,"children":1950},{"style":232},[1951],{"type":76,"value":1952},"# Set Spark Home (if using Spark engine)\n",{"type":70,"tag":177,"props":1954,"children":1955},{"class":179,"line":201},[1956,1960,1965,1969],{"type":70,"tag":177,"props":1957,"children":1958},{"style":490},[1959],{"type":76,"value":493},{"type":70,"tag":177,"props":1961,"children":1962},{"style":342},[1963],{"type":76,"value":1964}," SPARK_HOME",{"type":70,"tag":177,"props":1966,"children":1967},{"style":348},[1968],{"type":76,"value":351},{"type":70,"tag":177,"props":1970,"children":1971},{"style":342},[1972],{"type":76,"value":1973},"\u002Fpath\u002Fto\u002Fspark\n",{"type":70,"tag":177,"props":1975,"children":1976},{"class":179,"line":261},[1977],{"type":70,"tag":177,"props":1978,"children":1979},{"emptyLinePlaceholder":265},[1980],{"type":76,"value":268},{"type":70,"tag":177,"props":1982,"children":1983},{"class":179,"line":271},[1984],{"type":70,"tag":177,"props":1985,"children":1986},{"style":232},[1987],{"type":76,"value":1988},"# Verify Spark installation\n",{"type":70,"tag":177,"props":1990,"children":1991},{"class":179,"line":280},[1992],{"type":70,"tag":177,"props":1993,"children":1994},{"style":342},[1995],{"type":76,"value":1996},"$SPARK_HOME\u002Fbin\u002Fspark-submit --version\n",{"type":70,"tag":158,"props":1998,"children":2000},{"id":1999},"configure-for-flink-engine",[2001],{"type":76,"value":2002},"Configure for Flink Engine",{"type":70,"tag":165,"props":2004,"children":2006},{"className":167,"code":2005,"language":169,"meta":170,"style":170},"# Set Flink Home (if using Flink engine)\nexport FLINK_HOME=\u002Fpath\u002Fto\u002Fflink\n\n# Verify Flink installation\n$FLINK_HOME\u002Fbin\u002Fflink --version\n",[2007],{"type":70,"tag":173,"props":2008,"children":2009},{"__ignoreMap":170},[2010,2018,2039,2046,2054],{"type":70,"tag":177,"props":2011,"children":2012},{"class":179,"line":180},[2013],{"type":70,"tag":177,"props":2014,"children":2015},{"style":232},[2016],{"type":76,"value":2017},"# Set Flink Home (if using Flink engine)\n",{"type":70,"tag":177,"props":2019,"children":2020},{"class":179,"line":201},[2021,2025,2030,2034],{"type":70,"tag":177,"props":2022,"children":2023},{"style":490},[2024],{"type":76,"value":493},{"type":70,"tag":177,"props":2026,"children":2027},{"style":342},[2028],{"type":76,"value":2029}," FLINK_HOME",{"type":70,"tag":177,"props":2031,"children":2032},{"style":348},[2033],{"type":76,"value":351},{"type":70,"tag":177,"props":2035,"children":2036},{"style":342},[2037],{"type":76,"value":2038},"\u002Fpath\u002Fto\u002Fflink\n",{"type":70,"tag":177,"props":2040,"children":2041},{"class":179,"line":261},[2042],{"type":70,"tag":177,"props":2043,"children":2044},{"emptyLinePlaceholder":265},[2045],{"type":76,"value":268},{"type":70,"tag":177,"props":2047,"children":2048},{"class":179,"line":271},[2049],{"type":70,"tag":177,"props":2050,"children":2051},{"style":232},[2052],{"type":76,"value":2053},"# Verify Flink installation\n",{"type":70,"tag":177,"props":2055,"children":2056},{"class":179,"line":280},[2057],{"type":70,"tag":177,"props":2058,"children":2059},{"style":342},[2060],{"type":76,"value":2061},"$FLINK_HOME\u002Fbin\u002Fflink --version\n",{"type":70,"tag":100,"props":2063,"children":2065},{"id":2064},"system-requirements",[2066],{"type":76,"value":2067},"System Requirements",{"type":70,"tag":2069,"props":2070,"children":2071},"table",{},[2072,2091],{"type":70,"tag":2073,"props":2074,"children":2075},"thead",{},[2076],{"type":70,"tag":2077,"props":2078,"children":2079},"tr",{},[2080,2086],{"type":70,"tag":2081,"props":2082,"children":2083},"th",{},[2084],{"type":76,"value":2085},"Requirement",{"type":70,"tag":2081,"props":2087,"children":2088},{},[2089],{"type":76,"value":2090},"Version\u002FSpec",{"type":70,"tag":2092,"props":2093,"children":2094},"tbody",{},[2095,2108,2121,2134,2147],{"type":70,"tag":2077,"props":2096,"children":2097},{},[2098,2103],{"type":70,"tag":2099,"props":2100,"children":2101},"td",{},[2102],{"type":76,"value":118},{"type":70,"tag":2099,"props":2104,"children":2105},{},[2106],{"type":76,"value":2107},"JDK 1.8+",{"type":70,"tag":2077,"props":2109,"children":2110},{},[2111,2116],{"type":70,"tag":2099,"props":2112,"children":2113},{},[2114],{"type":76,"value":2115},"Memory",{"type":70,"tag":2099,"props":2117,"children":2118},{},[2119],{"type":76,"value":2120},"2GB+ (minimum), 8GB+ (recommended)",{"type":70,"tag":2077,"props":2122,"children":2123},{},[2124,2129],{"type":70,"tag":2099,"props":2125,"children":2126},{},[2127],{"type":76,"value":2128},"Disk",{"type":70,"tag":2099,"props":2130,"children":2131},{},[2132],{"type":76,"value":2133},"500MB (binary) + job storage",{"type":70,"tag":2077,"props":2135,"children":2136},{},[2137,2142],{"type":70,"tag":2099,"props":2138,"children":2139},{},[2140],{"type":76,"value":2141},"Network",{"type":70,"tag":2099,"props":2143,"children":2144},{},[2145],{"type":76,"value":2146},"Connectivity to source\u002Fsink systems",{"type":70,"tag":2077,"props":2148,"children":2149},{},[2150,2155],{"type":70,"tag":2099,"props":2151,"children":2152},{},[2153],{"type":76,"value":2154},"Scala",{"type":70,"tag":2099,"props":2156,"children":2157},{},[2158],{"type":76,"value":2159},"2.12.15 (for Spark\u002FFlink integration)",{"type":70,"tag":866,"props":2161,"children":2162},{},[],{"type":70,"tag":93,"props":2164,"children":2166},{"id":2165},"usage",[2167],{"type":76,"value":2168},"Usage",{"type":70,"tag":100,"props":2170,"children":2172},{"id":2171},"_1-job-configuration-hocon-format",[2173],{"type":76,"value":2174},"1. Job Configuration (HOCON Format)",{"type":70,"tag":79,"props":2176,"children":2177},{},[2178,2180,2185],{"type":76,"value":2179},"SeaTunnel uses ",{"type":70,"tag":85,"props":2181,"children":2182},{},[2183],{"type":76,"value":2184},"HOCON",{"type":76,"value":2186}," (Human-Optimized Config Object Notation) for job configuration.",{"type":70,"tag":79,"props":2188,"children":2189},{},[2190],{"type":70,"tag":85,"props":2191,"children":2192},{},[2193],{"type":76,"value":2194},"Basic Structure:",{"type":70,"tag":165,"props":2196,"children":2198},{"className":591,"code":2197,"language":593,"meta":170,"style":170},"env {\n  job.mode = \"BATCH\"  # or STREAMING\n  job.name = \"My Job\"\n  parallelism = 4\n}\n\nsource {\n  SourceConnector {\n    option1 = value1\n    option2 = value2\n    schema = {\n      fields {\n        column1 = \"type\"\n        column2 = \"type\"\n      }\n    }\n  }\n}\n\n# Optional: Transform data\ntransform {\n  TransformName {\n    option = value\n  }\n}\n\nsink {\n  SinkConnector {\n    option1 = value1\n    option2 = value2\n  }\n}\n",[2199],{"type":70,"tag":173,"props":2200,"children":2201},{"__ignoreMap":170},[2202,2209,2217,2225,2233,2240,2247,2254,2262,2270,2278,2285,2292,2300,2308,2315,2322,2329,2336,2343,2351,2359,2367,2375,2383,2391,2399,2407,2416,2424,2432,2440],{"type":70,"tag":177,"props":2203,"children":2204},{"class":179,"line":180},[2205],{"type":70,"tag":177,"props":2206,"children":2207},{},[2208],{"type":76,"value":605},{"type":70,"tag":177,"props":2210,"children":2211},{"class":179,"line":201},[2212],{"type":70,"tag":177,"props":2213,"children":2214},{},[2215],{"type":76,"value":2216},"  job.mode = \"BATCH\"  # or STREAMING\n",{"type":70,"tag":177,"props":2218,"children":2219},{"class":179,"line":261},[2220],{"type":70,"tag":177,"props":2221,"children":2222},{},[2223],{"type":76,"value":2224},"  job.name = \"My Job\"\n",{"type":70,"tag":177,"props":2226,"children":2227},{"class":179,"line":271},[2228],{"type":70,"tag":177,"props":2229,"children":2230},{},[2231],{"type":76,"value":2232},"  parallelism = 4\n",{"type":70,"tag":177,"props":2234,"children":2235},{"class":179,"line":280},[2236],{"type":70,"tag":177,"props":2237,"children":2238},{},[2239],{"type":76,"value":463},{"type":70,"tag":177,"props":2241,"children":2242},{"class":179,"line":29},[2243],{"type":70,"tag":177,"props":2244,"children":2245},{"emptyLinePlaceholder":265},[2246],{"type":76,"value":268},{"type":70,"tag":177,"props":2248,"children":2249},{"class":179,"line":646},[2250],{"type":70,"tag":177,"props":2251,"children":2252},{},[2253],{"type":76,"value":643},{"type":70,"tag":177,"props":2255,"children":2256},{"class":179,"line":655},[2257],{"type":70,"tag":177,"props":2258,"children":2259},{},[2260],{"type":76,"value":2261},"  SourceConnector {\n",{"type":70,"tag":177,"props":2263,"children":2264},{"class":179,"line":664},[2265],{"type":70,"tag":177,"props":2266,"children":2267},{},[2268],{"type":76,"value":2269},"    option1 = value1\n",{"type":70,"tag":177,"props":2271,"children":2272},{"class":179,"line":673},[2273],{"type":70,"tag":177,"props":2274,"children":2275},{},[2276],{"type":76,"value":2277},"    option2 = value2\n",{"type":70,"tag":177,"props":2279,"children":2280},{"class":179,"line":682},[2281],{"type":70,"tag":177,"props":2282,"children":2283},{},[2284],{"type":76,"value":670},{"type":70,"tag":177,"props":2286,"children":2287},{"class":179,"line":691},[2288],{"type":70,"tag":177,"props":2289,"children":2290},{},[2291],{"type":76,"value":679},{"type":70,"tag":177,"props":2293,"children":2294},{"class":179,"line":700},[2295],{"type":70,"tag":177,"props":2296,"children":2297},{},[2298],{"type":76,"value":2299},"        column1 = \"type\"\n",{"type":70,"tag":177,"props":2301,"children":2302},{"class":179,"line":709},[2303],{"type":70,"tag":177,"props":2304,"children":2305},{},[2306],{"type":76,"value":2307},"        column2 = \"type\"\n",{"type":70,"tag":177,"props":2309,"children":2310},{"class":179,"line":718},[2311],{"type":70,"tag":177,"props":2312,"children":2313},{},[2314],{"type":76,"value":715},{"type":70,"tag":177,"props":2316,"children":2317},{"class":179,"line":727},[2318],{"type":70,"tag":177,"props":2319,"children":2320},{},[2321],{"type":76,"value":724},{"type":70,"tag":177,"props":2323,"children":2324},{"class":179,"line":736},[2325],{"type":70,"tag":177,"props":2326,"children":2327},{},[2328],{"type":76,"value":733},{"type":70,"tag":177,"props":2330,"children":2331},{"class":179,"line":744},[2332],{"type":70,"tag":177,"props":2333,"children":2334},{},[2335],{"type":76,"value":463},{"type":70,"tag":177,"props":2337,"children":2338},{"class":179,"line":752},[2339],{"type":70,"tag":177,"props":2340,"children":2341},{"emptyLinePlaceholder":265},[2342],{"type":76,"value":268},{"type":70,"tag":177,"props":2344,"children":2345},{"class":179,"line":761},[2346],{"type":70,"tag":177,"props":2347,"children":2348},{},[2349],{"type":76,"value":2350},"# Optional: Transform data\n",{"type":70,"tag":177,"props":2352,"children":2353},{"class":179,"line":770},[2354],{"type":70,"tag":177,"props":2355,"children":2356},{},[2357],{"type":76,"value":2358},"transform {\n",{"type":70,"tag":177,"props":2360,"children":2361},{"class":179,"line":779},[2362],{"type":70,"tag":177,"props":2363,"children":2364},{},[2365],{"type":76,"value":2366},"  TransformName {\n",{"type":70,"tag":177,"props":2368,"children":2369},{"class":179,"line":787},[2370],{"type":70,"tag":177,"props":2371,"children":2372},{},[2373],{"type":76,"value":2374},"    option = value\n",{"type":70,"tag":177,"props":2376,"children":2378},{"class":179,"line":2377},24,[2379],{"type":70,"tag":177,"props":2380,"children":2381},{},[2382],{"type":76,"value":733},{"type":70,"tag":177,"props":2384,"children":2386},{"class":179,"line":2385},25,[2387],{"type":70,"tag":177,"props":2388,"children":2389},{},[2390],{"type":76,"value":463},{"type":70,"tag":177,"props":2392,"children":2394},{"class":179,"line":2393},26,[2395],{"type":70,"tag":177,"props":2396,"children":2397},{"emptyLinePlaceholder":265},[2398],{"type":76,"value":268},{"type":70,"tag":177,"props":2400,"children":2402},{"class":179,"line":2401},27,[2403],{"type":70,"tag":177,"props":2404,"children":2405},{},[2406],{"type":76,"value":758},{"type":70,"tag":177,"props":2408,"children":2410},{"class":179,"line":2409},28,[2411],{"type":70,"tag":177,"props":2412,"children":2413},{},[2414],{"type":76,"value":2415},"  SinkConnector {\n",{"type":70,"tag":177,"props":2417,"children":2419},{"class":179,"line":2418},29,[2420],{"type":70,"tag":177,"props":2421,"children":2422},{},[2423],{"type":76,"value":2269},{"type":70,"tag":177,"props":2425,"children":2427},{"class":179,"line":2426},30,[2428],{"type":70,"tag":177,"props":2429,"children":2430},{},[2431],{"type":76,"value":2277},{"type":70,"tag":177,"props":2433,"children":2435},{"class":179,"line":2434},31,[2436],{"type":70,"tag":177,"props":2437,"children":2438},{},[2439],{"type":76,"value":733},{"type":70,"tag":177,"props":2441,"children":2443},{"class":179,"line":2442},32,[2444],{"type":70,"tag":177,"props":2445,"children":2446},{},[2447],{"type":76,"value":463},{"type":70,"tag":100,"props":2449,"children":2451},{"id":2450},"_2-common-use-cases",[2452],{"type":76,"value":2453},"2. Common Use Cases",{"type":70,"tag":158,"props":2455,"children":2457},{"id":2456},"use-case-1-mysql-to-postgresql-batch",[2458],{"type":76,"value":2459},"Use Case 1: MySQL to PostgreSQL (Batch)",{"type":70,"tag":79,"props":2461,"children":2462},{},[2463],{"type":70,"tag":85,"props":2464,"children":2465},{},[2466],{"type":76,"value":2467},"config\u002Fmysql_to_postgres.conf",{"type":70,"tag":165,"props":2469,"children":2471},{"className":591,"code":2470,"language":593,"meta":170,"style":170},"env {\n  job.mode = \"BATCH\"\n  job.name = \"MySQL to PostgreSQL\"\n}\n\nsource {\n  Jdbc {\n    driver = \"com.mysql.cj.jdbc.Driver\"\n    url = \"jdbc:mysql:\u002F\u002Fmysql-host:3306\u002Fmydb\"\n    user = \"root\"\n    password = \"password\"\n    query = \"SELECT * FROM users\"\n    connection_check_timeout_sec = 100\n  }\n}\n\nsink {\n  Jdbc {\n    driver = \"org.postgresql.Driver\"\n    url = \"jdbc:postgresql:\u002F\u002Fpg-host:5432\u002Fmydb\"\n    user = \"postgres\"\n    password = \"password\"\n    database = \"mydb\"\n    table = \"users\"\n    primary_keys = [\"id\"]\n    connection_check_timeout_sec = 100\n  }\n}\n",[2472],{"type":70,"tag":173,"props":2473,"children":2474},{"__ignoreMap":170},[2475,2482,2489,2497,2504,2511,2518,2526,2534,2542,2550,2558,2566,2574,2581,2588,2595,2602,2609,2617,2625,2633,2640,2648,2656,2664,2671,2678],{"type":70,"tag":177,"props":2476,"children":2477},{"class":179,"line":180},[2478],{"type":70,"tag":177,"props":2479,"children":2480},{},[2481],{"type":76,"value":605},{"type":70,"tag":177,"props":2483,"children":2484},{"class":179,"line":201},[2485],{"type":70,"tag":177,"props":2486,"children":2487},{},[2488],{"type":76,"value":613},{"type":70,"tag":177,"props":2490,"children":2491},{"class":179,"line":261},[2492],{"type":70,"tag":177,"props":2493,"children":2494},{},[2495],{"type":76,"value":2496},"  job.name = \"MySQL to PostgreSQL\"\n",{"type":70,"tag":177,"props":2498,"children":2499},{"class":179,"line":271},[2500],{"type":70,"tag":177,"props":2501,"children":2502},{},[2503],{"type":76,"value":463},{"type":70,"tag":177,"props":2505,"children":2506},{"class":179,"line":280},[2507],{"type":70,"tag":177,"props":2508,"children":2509},{"emptyLinePlaceholder":265},[2510],{"type":76,"value":268},{"type":70,"tag":177,"props":2512,"children":2513},{"class":179,"line":29},[2514],{"type":70,"tag":177,"props":2515,"children":2516},{},[2517],{"type":76,"value":643},{"type":70,"tag":177,"props":2519,"children":2520},{"class":179,"line":646},[2521],{"type":70,"tag":177,"props":2522,"children":2523},{},[2524],{"type":76,"value":2525},"  Jdbc {\n",{"type":70,"tag":177,"props":2527,"children":2528},{"class":179,"line":655},[2529],{"type":70,"tag":177,"props":2530,"children":2531},{},[2532],{"type":76,"value":2533},"    driver = \"com.mysql.cj.jdbc.Driver\"\n",{"type":70,"tag":177,"props":2535,"children":2536},{"class":179,"line":664},[2537],{"type":70,"tag":177,"props":2538,"children":2539},{},[2540],{"type":76,"value":2541},"    url = \"jdbc:mysql:\u002F\u002Fmysql-host:3306\u002Fmydb\"\n",{"type":70,"tag":177,"props":2543,"children":2544},{"class":179,"line":673},[2545],{"type":70,"tag":177,"props":2546,"children":2547},{},[2548],{"type":76,"value":2549},"    user = \"root\"\n",{"type":70,"tag":177,"props":2551,"children":2552},{"class":179,"line":682},[2553],{"type":70,"tag":177,"props":2554,"children":2555},{},[2556],{"type":76,"value":2557},"    password = \"password\"\n",{"type":70,"tag":177,"props":2559,"children":2560},{"class":179,"line":691},[2561],{"type":70,"tag":177,"props":2562,"children":2563},{},[2564],{"type":76,"value":2565},"    query = \"SELECT * FROM users\"\n",{"type":70,"tag":177,"props":2567,"children":2568},{"class":179,"line":700},[2569],{"type":70,"tag":177,"props":2570,"children":2571},{},[2572],{"type":76,"value":2573},"    connection_check_timeout_sec = 100\n",{"type":70,"tag":177,"props":2575,"children":2576},{"class":179,"line":709},[2577],{"type":70,"tag":177,"props":2578,"children":2579},{},[2580],{"type":76,"value":733},{"type":70,"tag":177,"props":2582,"children":2583},{"class":179,"line":718},[2584],{"type":70,"tag":177,"props":2585,"children":2586},{},[2587],{"type":76,"value":463},{"type":70,"tag":177,"props":2589,"children":2590},{"class":179,"line":727},[2591],{"type":70,"tag":177,"props":2592,"children":2593},{"emptyLinePlaceholder":265},[2594],{"type":76,"value":268},{"type":70,"tag":177,"props":2596,"children":2597},{"class":179,"line":736},[2598],{"type":70,"tag":177,"props":2599,"children":2600},{},[2601],{"type":76,"value":758},{"type":70,"tag":177,"props":2603,"children":2604},{"class":179,"line":744},[2605],{"type":70,"tag":177,"props":2606,"children":2607},{},[2608],{"type":76,"value":2525},{"type":70,"tag":177,"props":2610,"children":2611},{"class":179,"line":752},[2612],{"type":70,"tag":177,"props":2613,"children":2614},{},[2615],{"type":76,"value":2616},"    driver = \"org.postgresql.Driver\"\n",{"type":70,"tag":177,"props":2618,"children":2619},{"class":179,"line":761},[2620],{"type":70,"tag":177,"props":2621,"children":2622},{},[2623],{"type":76,"value":2624},"    url = \"jdbc:postgresql:\u002F\u002Fpg-host:5432\u002Fmydb\"\n",{"type":70,"tag":177,"props":2626,"children":2627},{"class":179,"line":770},[2628],{"type":70,"tag":177,"props":2629,"children":2630},{},[2631],{"type":76,"value":2632},"    user = \"postgres\"\n",{"type":70,"tag":177,"props":2634,"children":2635},{"class":179,"line":779},[2636],{"type":70,"tag":177,"props":2637,"children":2638},{},[2639],{"type":76,"value":2557},{"type":70,"tag":177,"props":2641,"children":2642},{"class":179,"line":787},[2643],{"type":70,"tag":177,"props":2644,"children":2645},{},[2646],{"type":76,"value":2647},"    database = \"mydb\"\n",{"type":70,"tag":177,"props":2649,"children":2650},{"class":179,"line":2377},[2651],{"type":70,"tag":177,"props":2652,"children":2653},{},[2654],{"type":76,"value":2655},"    table = \"users\"\n",{"type":70,"tag":177,"props":2657,"children":2658},{"class":179,"line":2385},[2659],{"type":70,"tag":177,"props":2660,"children":2661},{},[2662],{"type":76,"value":2663},"    primary_keys = [\"id\"]\n",{"type":70,"tag":177,"props":2665,"children":2666},{"class":179,"line":2393},[2667],{"type":70,"tag":177,"props":2668,"children":2669},{},[2670],{"type":76,"value":2573},{"type":70,"tag":177,"props":2672,"children":2673},{"class":179,"line":2401},[2674],{"type":70,"tag":177,"props":2675,"children":2676},{},[2677],{"type":76,"value":733},{"type":70,"tag":177,"props":2679,"children":2680},{"class":179,"line":2409},[2681],{"type":70,"tag":177,"props":2682,"children":2683},{},[2684],{"type":76,"value":463},{"type":70,"tag":79,"props":2686,"children":2687},{},[2688],{"type":76,"value":2689},"Run:",{"type":70,"tag":165,"props":2691,"children":2693},{"className":167,"code":2692,"language":169,"meta":170,"style":170},"seatunnel.sh -c config\u002Fmysql_to_postgres.conf -e spark\n",[2694],{"type":70,"tag":173,"props":2695,"children":2696},{"__ignoreMap":170},[2697],{"type":70,"tag":177,"props":2698,"children":2699},{"class":179,"line":180},[2700,2704,2708,2713,2717],{"type":70,"tag":177,"props":2701,"children":2702},{"style":184},[2703],{"type":76,"value":812},{"type":70,"tag":177,"props":2705,"children":2706},{"style":190},[2707],{"type":76,"value":817},{"type":70,"tag":177,"props":2709,"children":2710},{"style":190},[2711],{"type":76,"value":2712}," config\u002Fmysql_to_postgres.conf",{"type":70,"tag":177,"props":2714,"children":2715},{"style":190},[2716],{"type":76,"value":827},{"type":70,"tag":177,"props":2718,"children":2719},{"style":190},[2720],{"type":76,"value":832},{"type":70,"tag":158,"props":2722,"children":2724},{"id":2723},"use-case-2-kafka-streaming-to-elasticsearch",[2725],{"type":76,"value":2726},"Use Case 2: Kafka Streaming to Elasticsearch",{"type":70,"tag":79,"props":2728,"children":2729},{},[2730],{"type":70,"tag":85,"props":2731,"children":2732},{},[2733],{"type":76,"value":2734},"config\u002Fkafka_to_es.conf",{"type":70,"tag":165,"props":2736,"children":2738},{"className":591,"code":2737,"language":593,"meta":170,"style":170},"env {\n  job.mode = \"STREAMING\"\n  job.name = \"Kafka to Elasticsearch\"\n  parallelism = 2\n}\n\nsource {\n  Kafka {\n    bootstrap.servers = \"kafka-host:9092\"\n    topic = \"events\"\n    patterns = \"event.*\"\n    consumer.group = \"seatunnel-group\"\n    format = \"json\"\n    schema = {\n      fields {\n        event_id = \"bigint\"\n        event_name = \"string\"\n        timestamp = \"bigint\"\n        payload = \"string\"\n      }\n    }\n  }\n}\n\ntransform {\n  Sql {\n    sql = \"SELECT event_id, event_name, FROM_UNIXTIME(timestamp\u002F1000) as ts, payload FROM source\"\n  }\n}\n\nsink {\n  Elasticsearch {\n    hosts = [\"es-host:9200\"]\n    index = \"events\"\n    index_type = \"_doc\"\n    username = \"elastic\"\n    password = \"password\"\n  }\n}\n",[2739],{"type":70,"tag":173,"props":2740,"children":2741},{"__ignoreMap":170},[2742,2749,2757,2765,2773,2780,2787,2794,2802,2810,2818,2826,2834,2841,2848,2855,2863,2871,2879,2887,2894,2901,2908,2915,2922,2929,2937,2945,2952,2959,2966,2973,2981,2990,2999,3008,3016,3024,3032],{"type":70,"tag":177,"props":2743,"children":2744},{"class":179,"line":180},[2745],{"type":70,"tag":177,"props":2746,"children":2747},{},[2748],{"type":76,"value":605},{"type":70,"tag":177,"props":2750,"children":2751},{"class":179,"line":201},[2752],{"type":70,"tag":177,"props":2753,"children":2754},{},[2755],{"type":76,"value":2756},"  job.mode = \"STREAMING\"\n",{"type":70,"tag":177,"props":2758,"children":2759},{"class":179,"line":261},[2760],{"type":70,"tag":177,"props":2761,"children":2762},{},[2763],{"type":76,"value":2764},"  job.name = \"Kafka to Elasticsearch\"\n",{"type":70,"tag":177,"props":2766,"children":2767},{"class":179,"line":271},[2768],{"type":70,"tag":177,"props":2769,"children":2770},{},[2771],{"type":76,"value":2772},"  parallelism = 2\n",{"type":70,"tag":177,"props":2774,"children":2775},{"class":179,"line":280},[2776],{"type":70,"tag":177,"props":2777,"children":2778},{},[2779],{"type":76,"value":463},{"type":70,"tag":177,"props":2781,"children":2782},{"class":179,"line":29},[2783],{"type":70,"tag":177,"props":2784,"children":2785},{"emptyLinePlaceholder":265},[2786],{"type":76,"value":268},{"type":70,"tag":177,"props":2788,"children":2789},{"class":179,"line":646},[2790],{"type":70,"tag":177,"props":2791,"children":2792},{},[2793],{"type":76,"value":643},{"type":70,"tag":177,"props":2795,"children":2796},{"class":179,"line":655},[2797],{"type":70,"tag":177,"props":2798,"children":2799},{},[2800],{"type":76,"value":2801},"  Kafka {\n",{"type":70,"tag":177,"props":2803,"children":2804},{"class":179,"line":664},[2805],{"type":70,"tag":177,"props":2806,"children":2807},{},[2808],{"type":76,"value":2809},"    bootstrap.servers = \"kafka-host:9092\"\n",{"type":70,"tag":177,"props":2811,"children":2812},{"class":179,"line":673},[2813],{"type":70,"tag":177,"props":2814,"children":2815},{},[2816],{"type":76,"value":2817},"    topic = \"events\"\n",{"type":70,"tag":177,"props":2819,"children":2820},{"class":179,"line":682},[2821],{"type":70,"tag":177,"props":2822,"children":2823},{},[2824],{"type":76,"value":2825},"    patterns = \"event.*\"\n",{"type":70,"tag":177,"props":2827,"children":2828},{"class":179,"line":691},[2829],{"type":70,"tag":177,"props":2830,"children":2831},{},[2832],{"type":76,"value":2833},"    consumer.group = \"seatunnel-group\"\n",{"type":70,"tag":177,"props":2835,"children":2836},{"class":179,"line":700},[2837],{"type":70,"tag":177,"props":2838,"children":2839},{},[2840],{"type":76,"value":776},{"type":70,"tag":177,"props":2842,"children":2843},{"class":179,"line":709},[2844],{"type":70,"tag":177,"props":2845,"children":2846},{},[2847],{"type":76,"value":670},{"type":70,"tag":177,"props":2849,"children":2850},{"class":179,"line":718},[2851],{"type":70,"tag":177,"props":2852,"children":2853},{},[2854],{"type":76,"value":679},{"type":70,"tag":177,"props":2856,"children":2857},{"class":179,"line":727},[2858],{"type":70,"tag":177,"props":2859,"children":2860},{},[2861],{"type":76,"value":2862},"        event_id = \"bigint\"\n",{"type":70,"tag":177,"props":2864,"children":2865},{"class":179,"line":736},[2866],{"type":70,"tag":177,"props":2867,"children":2868},{},[2869],{"type":76,"value":2870},"        event_name = \"string\"\n",{"type":70,"tag":177,"props":2872,"children":2873},{"class":179,"line":744},[2874],{"type":70,"tag":177,"props":2875,"children":2876},{},[2877],{"type":76,"value":2878},"        timestamp = \"bigint\"\n",{"type":70,"tag":177,"props":2880,"children":2881},{"class":179,"line":752},[2882],{"type":70,"tag":177,"props":2883,"children":2884},{},[2885],{"type":76,"value":2886},"        payload = \"string\"\n",{"type":70,"tag":177,"props":2888,"children":2889},{"class":179,"line":761},[2890],{"type":70,"tag":177,"props":2891,"children":2892},{},[2893],{"type":76,"value":715},{"type":70,"tag":177,"props":2895,"children":2896},{"class":179,"line":770},[2897],{"type":70,"tag":177,"props":2898,"children":2899},{},[2900],{"type":76,"value":724},{"type":70,"tag":177,"props":2902,"children":2903},{"class":179,"line":779},[2904],{"type":70,"tag":177,"props":2905,"children":2906},{},[2907],{"type":76,"value":733},{"type":70,"tag":177,"props":2909,"children":2910},{"class":179,"line":787},[2911],{"type":70,"tag":177,"props":2912,"children":2913},{},[2914],{"type":76,"value":463},{"type":70,"tag":177,"props":2916,"children":2917},{"class":179,"line":2377},[2918],{"type":70,"tag":177,"props":2919,"children":2920},{"emptyLinePlaceholder":265},[2921],{"type":76,"value":268},{"type":70,"tag":177,"props":2923,"children":2924},{"class":179,"line":2385},[2925],{"type":70,"tag":177,"props":2926,"children":2927},{},[2928],{"type":76,"value":2358},{"type":70,"tag":177,"props":2930,"children":2931},{"class":179,"line":2393},[2932],{"type":70,"tag":177,"props":2933,"children":2934},{},[2935],{"type":76,"value":2936},"  Sql {\n",{"type":70,"tag":177,"props":2938,"children":2939},{"class":179,"line":2401},[2940],{"type":70,"tag":177,"props":2941,"children":2942},{},[2943],{"type":76,"value":2944},"    sql = \"SELECT event_id, event_name, FROM_UNIXTIME(timestamp\u002F1000) as ts, payload FROM source\"\n",{"type":70,"tag":177,"props":2946,"children":2947},{"class":179,"line":2409},[2948],{"type":70,"tag":177,"props":2949,"children":2950},{},[2951],{"type":76,"value":733},{"type":70,"tag":177,"props":2953,"children":2954},{"class":179,"line":2418},[2955],{"type":70,"tag":177,"props":2956,"children":2957},{},[2958],{"type":76,"value":463},{"type":70,"tag":177,"props":2960,"children":2961},{"class":179,"line":2426},[2962],{"type":70,"tag":177,"props":2963,"children":2964},{"emptyLinePlaceholder":265},[2965],{"type":76,"value":268},{"type":70,"tag":177,"props":2967,"children":2968},{"class":179,"line":2434},[2969],{"type":70,"tag":177,"props":2970,"children":2971},{},[2972],{"type":76,"value":758},{"type":70,"tag":177,"props":2974,"children":2975},{"class":179,"line":2442},[2976],{"type":70,"tag":177,"props":2977,"children":2978},{},[2979],{"type":76,"value":2980},"  Elasticsearch {\n",{"type":70,"tag":177,"props":2982,"children":2984},{"class":179,"line":2983},33,[2985],{"type":70,"tag":177,"props":2986,"children":2987},{},[2988],{"type":76,"value":2989},"    hosts = [\"es-host:9200\"]\n",{"type":70,"tag":177,"props":2991,"children":2993},{"class":179,"line":2992},34,[2994],{"type":70,"tag":177,"props":2995,"children":2996},{},[2997],{"type":76,"value":2998},"    index = \"events\"\n",{"type":70,"tag":177,"props":3000,"children":3002},{"class":179,"line":3001},35,[3003],{"type":70,"tag":177,"props":3004,"children":3005},{},[3006],{"type":76,"value":3007},"    index_type = \"_doc\"\n",{"type":70,"tag":177,"props":3009,"children":3010},{"class":179,"line":25},[3011],{"type":70,"tag":177,"props":3012,"children":3013},{},[3014],{"type":76,"value":3015},"    username = \"elastic\"\n",{"type":70,"tag":177,"props":3017,"children":3019},{"class":179,"line":3018},37,[3020],{"type":70,"tag":177,"props":3021,"children":3022},{},[3023],{"type":76,"value":2557},{"type":70,"tag":177,"props":3025,"children":3027},{"class":179,"line":3026},38,[3028],{"type":70,"tag":177,"props":3029,"children":3030},{},[3031],{"type":76,"value":733},{"type":70,"tag":177,"props":3033,"children":3035},{"class":179,"line":3034},39,[3036],{"type":70,"tag":177,"props":3037,"children":3038},{},[3039],{"type":76,"value":463},{"type":70,"tag":79,"props":3041,"children":3042},{},[3043],{"type":76,"value":2689},{"type":70,"tag":165,"props":3045,"children":3047},{"className":167,"code":3046,"language":169,"meta":170,"style":170},"seatunnel.sh -c config\u002Fkafka_to_es.conf -e flink\n",[3048],{"type":70,"tag":173,"props":3049,"children":3050},{"__ignoreMap":170},[3051],{"type":70,"tag":177,"props":3052,"children":3053},{"class":179,"line":180},[3054,3058,3062,3067,3071],{"type":70,"tag":177,"props":3055,"children":3056},{"style":184},[3057],{"type":76,"value":812},{"type":70,"tag":177,"props":3059,"children":3060},{"style":190},[3061],{"type":76,"value":817},{"type":70,"tag":177,"props":3063,"children":3064},{"style":190},[3065],{"type":76,"value":3066}," config\u002Fkafka_to_es.conf",{"type":70,"tag":177,"props":3068,"children":3069},{"style":190},[3070],{"type":76,"value":827},{"type":70,"tag":177,"props":3072,"children":3073},{"style":190},[3074],{"type":76,"value":864},{"type":70,"tag":158,"props":3076,"children":3078},{"id":3077},"use-case-3-cdc-from-mysql-to-kafka",[3079],{"type":76,"value":3080},"Use Case 3: CDC from MySQL to Kafka",{"type":70,"tag":79,"props":3082,"children":3083},{},[3084],{"type":70,"tag":85,"props":3085,"children":3086},{},[3087],{"type":76,"value":3088},"config\u002Fmysql_cdc_kafka.conf",{"type":70,"tag":165,"props":3090,"children":3092},{"className":591,"code":3091,"language":593,"meta":170,"style":170},"env {\n  job.mode = \"STREAMING\"\n  job.name = \"MySQL CDC to Kafka\"\n}\n\nsource {\n  Mysql {\n    server_id = 5400\n    hostname = \"mysql-host\"\n    port = 3306\n    username = \"root\"\n    password = \"password\"\n    database = [\"mydb\"]\n    table = [\"users\", \"orders\"]\n    startup.mode = \"initial\"\n    snapshot.split.size = 8096\n    incremental.snapshot.chunk.size = 1024\n    snapshot_fetch_size = 1024\n    snapshot_lock_timeout_sec = 10\n    server_time_zone = \"UTC\"\n  }\n}\n\nsink {\n  Kafka {\n    bootstrap.servers = \"kafka-host:9092\"\n    topic = \"mysql_cdc\"\n    format = \"canal_json\"\n    semantic = \"EXACTLY_ONCE\"\n  }\n}\n",[3093],{"type":70,"tag":173,"props":3094,"children":3095},{"__ignoreMap":170},[3096,3103,3110,3118,3125,3132,3139,3147,3155,3163,3171,3179,3186,3194,3202,3210,3218,3226,3234,3242,3250,3257,3264,3271,3278,3285,3292,3300,3308,3316,3323],{"type":70,"tag":177,"props":3097,"children":3098},{"class":179,"line":180},[3099],{"type":70,"tag":177,"props":3100,"children":3101},{},[3102],{"type":76,"value":605},{"type":70,"tag":177,"props":3104,"children":3105},{"class":179,"line":201},[3106],{"type":70,"tag":177,"props":3107,"children":3108},{},[3109],{"type":76,"value":2756},{"type":70,"tag":177,"props":3111,"children":3112},{"class":179,"line":261},[3113],{"type":70,"tag":177,"props":3114,"children":3115},{},[3116],{"type":76,"value":3117},"  job.name = \"MySQL CDC to Kafka\"\n",{"type":70,"tag":177,"props":3119,"children":3120},{"class":179,"line":271},[3121],{"type":70,"tag":177,"props":3122,"children":3123},{},[3124],{"type":76,"value":463},{"type":70,"tag":177,"props":3126,"children":3127},{"class":179,"line":280},[3128],{"type":70,"tag":177,"props":3129,"children":3130},{"emptyLinePlaceholder":265},[3131],{"type":76,"value":268},{"type":70,"tag":177,"props":3133,"children":3134},{"class":179,"line":29},[3135],{"type":70,"tag":177,"props":3136,"children":3137},{},[3138],{"type":76,"value":643},{"type":70,"tag":177,"props":3140,"children":3141},{"class":179,"line":646},[3142],{"type":70,"tag":177,"props":3143,"children":3144},{},[3145],{"type":76,"value":3146},"  Mysql {\n",{"type":70,"tag":177,"props":3148,"children":3149},{"class":179,"line":655},[3150],{"type":70,"tag":177,"props":3151,"children":3152},{},[3153],{"type":76,"value":3154},"    server_id = 5400\n",{"type":70,"tag":177,"props":3156,"children":3157},{"class":179,"line":664},[3158],{"type":70,"tag":177,"props":3159,"children":3160},{},[3161],{"type":76,"value":3162},"    hostname = \"mysql-host\"\n",{"type":70,"tag":177,"props":3164,"children":3165},{"class":179,"line":673},[3166],{"type":70,"tag":177,"props":3167,"children":3168},{},[3169],{"type":76,"value":3170},"    port = 3306\n",{"type":70,"tag":177,"props":3172,"children":3173},{"class":179,"line":682},[3174],{"type":70,"tag":177,"props":3175,"children":3176},{},[3177],{"type":76,"value":3178},"    username = \"root\"\n",{"type":70,"tag":177,"props":3180,"children":3181},{"class":179,"line":691},[3182],{"type":70,"tag":177,"props":3183,"children":3184},{},[3185],{"type":76,"value":2557},{"type":70,"tag":177,"props":3187,"children":3188},{"class":179,"line":700},[3189],{"type":70,"tag":177,"props":3190,"children":3191},{},[3192],{"type":76,"value":3193},"    database = [\"mydb\"]\n",{"type":70,"tag":177,"props":3195,"children":3196},{"class":179,"line":709},[3197],{"type":70,"tag":177,"props":3198,"children":3199},{},[3200],{"type":76,"value":3201},"    table = [\"users\", \"orders\"]\n",{"type":70,"tag":177,"props":3203,"children":3204},{"class":179,"line":718},[3205],{"type":70,"tag":177,"props":3206,"children":3207},{},[3208],{"type":76,"value":3209},"    startup.mode = \"initial\"\n",{"type":70,"tag":177,"props":3211,"children":3212},{"class":179,"line":727},[3213],{"type":70,"tag":177,"props":3214,"children":3215},{},[3216],{"type":76,"value":3217},"    snapshot.split.size = 8096\n",{"type":70,"tag":177,"props":3219,"children":3220},{"class":179,"line":736},[3221],{"type":70,"tag":177,"props":3222,"children":3223},{},[3224],{"type":76,"value":3225},"    incremental.snapshot.chunk.size = 1024\n",{"type":70,"tag":177,"props":3227,"children":3228},{"class":179,"line":744},[3229],{"type":70,"tag":177,"props":3230,"children":3231},{},[3232],{"type":76,"value":3233},"    snapshot_fetch_size = 1024\n",{"type":70,"tag":177,"props":3235,"children":3236},{"class":179,"line":752},[3237],{"type":70,"tag":177,"props":3238,"children":3239},{},[3240],{"type":76,"value":3241},"    snapshot_lock_timeout_sec = 10\n",{"type":70,"tag":177,"props":3243,"children":3244},{"class":179,"line":761},[3245],{"type":70,"tag":177,"props":3246,"children":3247},{},[3248],{"type":76,"value":3249},"    server_time_zone = \"UTC\"\n",{"type":70,"tag":177,"props":3251,"children":3252},{"class":179,"line":770},[3253],{"type":70,"tag":177,"props":3254,"children":3255},{},[3256],{"type":76,"value":733},{"type":70,"tag":177,"props":3258,"children":3259},{"class":179,"line":779},[3260],{"type":70,"tag":177,"props":3261,"children":3262},{},[3263],{"type":76,"value":463},{"type":70,"tag":177,"props":3265,"children":3266},{"class":179,"line":787},[3267],{"type":70,"tag":177,"props":3268,"children":3269},{"emptyLinePlaceholder":265},[3270],{"type":76,"value":268},{"type":70,"tag":177,"props":3272,"children":3273},{"class":179,"line":2377},[3274],{"type":70,"tag":177,"props":3275,"children":3276},{},[3277],{"type":76,"value":758},{"type":70,"tag":177,"props":3279,"children":3280},{"class":179,"line":2385},[3281],{"type":70,"tag":177,"props":3282,"children":3283},{},[3284],{"type":76,"value":2801},{"type":70,"tag":177,"props":3286,"children":3287},{"class":179,"line":2393},[3288],{"type":70,"tag":177,"props":3289,"children":3290},{},[3291],{"type":76,"value":2809},{"type":70,"tag":177,"props":3293,"children":3294},{"class":179,"line":2401},[3295],{"type":70,"tag":177,"props":3296,"children":3297},{},[3298],{"type":76,"value":3299},"    topic = \"mysql_cdc\"\n",{"type":70,"tag":177,"props":3301,"children":3302},{"class":179,"line":2409},[3303],{"type":70,"tag":177,"props":3304,"children":3305},{},[3306],{"type":76,"value":3307},"    format = \"canal_json\"\n",{"type":70,"tag":177,"props":3309,"children":3310},{"class":179,"line":2418},[3311],{"type":70,"tag":177,"props":3312,"children":3313},{},[3314],{"type":76,"value":3315},"    semantic = \"EXACTLY_ONCE\"\n",{"type":70,"tag":177,"props":3317,"children":3318},{"class":179,"line":2426},[3319],{"type":70,"tag":177,"props":3320,"children":3321},{},[3322],{"type":76,"value":733},{"type":70,"tag":177,"props":3324,"children":3325},{"class":179,"line":2434},[3326],{"type":70,"tag":177,"props":3327,"children":3328},{},[3329],{"type":76,"value":463},{"type":70,"tag":79,"props":3331,"children":3332},{},[3333],{"type":76,"value":2689},{"type":70,"tag":165,"props":3335,"children":3337},{"className":167,"code":3336,"language":169,"meta":170,"style":170},"seatunnel.sh -c config\u002Fmysql_cdc_kafka.conf -e flink\n",[3338],{"type":70,"tag":173,"props":3339,"children":3340},{"__ignoreMap":170},[3341],{"type":70,"tag":177,"props":3342,"children":3343},{"class":179,"line":180},[3344,3348,3352,3357,3361],{"type":70,"tag":177,"props":3345,"children":3346},{"style":184},[3347],{"type":76,"value":812},{"type":70,"tag":177,"props":3349,"children":3350},{"style":190},[3351],{"type":76,"value":817},{"type":70,"tag":177,"props":3353,"children":3354},{"style":190},[3355],{"type":76,"value":3356}," config\u002Fmysql_cdc_kafka.conf",{"type":70,"tag":177,"props":3358,"children":3359},{"style":190},[3360],{"type":76,"value":827},{"type":70,"tag":177,"props":3362,"children":3363},{"style":190},[3364],{"type":76,"value":864},{"type":70,"tag":100,"props":3366,"children":3368},{"id":3367},"_3-running-jobs",[3369],{"type":76,"value":3370},"3. Running Jobs",{"type":70,"tag":158,"props":3372,"children":3374},{"id":3373},"local-mode-single-machine",[3375],{"type":76,"value":3376},"Local Mode (Single Machine)",{"type":70,"tag":165,"props":3378,"children":3380},{"className":167,"code":3379,"language":169,"meta":170,"style":170},"# Using Spark (default)\nseatunnel.sh -c config\u002Fjob.conf -e spark\n\n# Using Flink\nseatunnel.sh -c config\u002Fjob.conf -e flink\n\n# Using Zeta (lightweight)\nseatunnel.sh -c config\u002Fjob.conf -e zeta\n",[3381],{"type":70,"tag":173,"props":3382,"children":3383},{"__ignoreMap":170},[3384,3392,3416,3423,3431,3454,3461,3469],{"type":70,"tag":177,"props":3385,"children":3386},{"class":179,"line":180},[3387],{"type":70,"tag":177,"props":3388,"children":3389},{"style":232},[3390],{"type":76,"value":3391},"# Using Spark (default)\n",{"type":70,"tag":177,"props":3393,"children":3394},{"class":179,"line":201},[3395,3399,3403,3408,3412],{"type":70,"tag":177,"props":3396,"children":3397},{"style":184},[3398],{"type":76,"value":812},{"type":70,"tag":177,"props":3400,"children":3401},{"style":190},[3402],{"type":76,"value":817},{"type":70,"tag":177,"props":3404,"children":3405},{"style":190},[3406],{"type":76,"value":3407}," config\u002Fjob.conf",{"type":70,"tag":177,"props":3409,"children":3410},{"style":190},[3411],{"type":76,"value":827},{"type":70,"tag":177,"props":3413,"children":3414},{"style":190},[3415],{"type":76,"value":832},{"type":70,"tag":177,"props":3417,"children":3418},{"class":179,"line":261},[3419],{"type":70,"tag":177,"props":3420,"children":3421},{"emptyLinePlaceholder":265},[3422],{"type":76,"value":268},{"type":70,"tag":177,"props":3424,"children":3425},{"class":179,"line":271},[3426],{"type":70,"tag":177,"props":3427,"children":3428},{"style":232},[3429],{"type":76,"value":3430},"# Using Flink\n",{"type":70,"tag":177,"props":3432,"children":3433},{"class":179,"line":280},[3434,3438,3442,3446,3450],{"type":70,"tag":177,"props":3435,"children":3436},{"style":184},[3437],{"type":76,"value":812},{"type":70,"tag":177,"props":3439,"children":3440},{"style":190},[3441],{"type":76,"value":817},{"type":70,"tag":177,"props":3443,"children":3444},{"style":190},[3445],{"type":76,"value":3407},{"type":70,"tag":177,"props":3447,"children":3448},{"style":190},[3449],{"type":76,"value":827},{"type":70,"tag":177,"props":3451,"children":3452},{"style":190},[3453],{"type":76,"value":864},{"type":70,"tag":177,"props":3455,"children":3456},{"class":179,"line":29},[3457],{"type":70,"tag":177,"props":3458,"children":3459},{"emptyLinePlaceholder":265},[3460],{"type":76,"value":268},{"type":70,"tag":177,"props":3462,"children":3463},{"class":179,"line":646},[3464],{"type":70,"tag":177,"props":3465,"children":3466},{"style":232},[3467],{"type":76,"value":3468},"# Using Zeta (lightweight)\n",{"type":70,"tag":177,"props":3470,"children":3471},{"class":179,"line":655},[3472,3476,3480,3484,3488],{"type":70,"tag":177,"props":3473,"children":3474},{"style":184},[3475],{"type":76,"value":812},{"type":70,"tag":177,"props":3477,"children":3478},{"style":190},[3479],{"type":76,"value":817},{"type":70,"tag":177,"props":3481,"children":3482},{"style":190},[3483],{"type":76,"value":3407},{"type":70,"tag":177,"props":3485,"children":3486},{"style":190},[3487],{"type":76,"value":827},{"type":70,"tag":177,"props":3489,"children":3490},{"style":190},[3491],{"type":76,"value":3492}," zeta\n",{"type":70,"tag":158,"props":3494,"children":3496},{"id":3495},"cluster-mode",[3497],{"type":76,"value":3498},"Cluster Mode",{"type":70,"tag":165,"props":3500,"children":3502},{"className":167,"code":3501,"language":169,"meta":170,"style":170},"# Submit to Spark cluster\nseatunnel.sh -c config\u002Fjob.conf -e spark -m cluster -n hadoop-master:7077\n\n# Submit to Flink cluster\nseatunnel.sh -c config\u002Fjob.conf -e flink -m remote -s localhost 8081\n",[3503],{"type":70,"tag":173,"props":3504,"children":3505},{"__ignoreMap":170},[3506,3514,3558,3565,3573],{"type":70,"tag":177,"props":3507,"children":3508},{"class":179,"line":180},[3509],{"type":70,"tag":177,"props":3510,"children":3511},{"style":232},[3512],{"type":76,"value":3513},"# Submit to Spark cluster\n",{"type":70,"tag":177,"props":3515,"children":3516},{"class":179,"line":201},[3517,3521,3525,3529,3533,3538,3543,3548,3553],{"type":70,"tag":177,"props":3518,"children":3519},{"style":184},[3520],{"type":76,"value":812},{"type":70,"tag":177,"props":3522,"children":3523},{"style":190},[3524],{"type":76,"value":817},{"type":70,"tag":177,"props":3526,"children":3527},{"style":190},[3528],{"type":76,"value":3407},{"type":70,"tag":177,"props":3530,"children":3531},{"style":190},[3532],{"type":76,"value":827},{"type":70,"tag":177,"props":3534,"children":3535},{"style":190},[3536],{"type":76,"value":3537}," spark",{"type":70,"tag":177,"props":3539,"children":3540},{"style":190},[3541],{"type":76,"value":3542}," -m",{"type":70,"tag":177,"props":3544,"children":3545},{"style":190},[3546],{"type":76,"value":3547}," cluster",{"type":70,"tag":177,"props":3549,"children":3550},{"style":190},[3551],{"type":76,"value":3552}," -n",{"type":70,"tag":177,"props":3554,"children":3555},{"style":190},[3556],{"type":76,"value":3557}," hadoop-master:7077\n",{"type":70,"tag":177,"props":3559,"children":3560},{"class":179,"line":261},[3561],{"type":70,"tag":177,"props":3562,"children":3563},{"emptyLinePlaceholder":265},[3564],{"type":76,"value":268},{"type":70,"tag":177,"props":3566,"children":3567},{"class":179,"line":271},[3568],{"type":70,"tag":177,"props":3569,"children":3570},{"style":232},[3571],{"type":76,"value":3572},"# Submit to Flink cluster\n",{"type":70,"tag":177,"props":3574,"children":3575},{"class":179,"line":280},[3576,3580,3584,3588,3592,3597,3601,3606,3611,3616],{"type":70,"tag":177,"props":3577,"children":3578},{"style":184},[3579],{"type":76,"value":812},{"type":70,"tag":177,"props":3581,"children":3582},{"style":190},[3583],{"type":76,"value":817},{"type":70,"tag":177,"props":3585,"children":3586},{"style":190},[3587],{"type":76,"value":3407},{"type":70,"tag":177,"props":3589,"children":3590},{"style":190},[3591],{"type":76,"value":827},{"type":70,"tag":177,"props":3593,"children":3594},{"style":190},[3595],{"type":76,"value":3596}," flink",{"type":70,"tag":177,"props":3598,"children":3599},{"style":190},[3600],{"type":76,"value":3542},{"type":70,"tag":177,"props":3602,"children":3603},{"style":190},[3604],{"type":76,"value":3605}," remote",{"type":70,"tag":177,"props":3607,"children":3608},{"style":190},[3609],{"type":76,"value":3610}," -s",{"type":70,"tag":177,"props":3612,"children":3613},{"style":190},[3614],{"type":76,"value":3615}," localhost",{"type":70,"tag":177,"props":3617,"children":3619},{"style":3618},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[3620],{"type":76,"value":3621}," 8081\n",{"type":70,"tag":158,"props":3623,"children":3625},{"id":3624},"verbose-output",[3626],{"type":76,"value":3627},"Verbose Output",{"type":70,"tag":165,"props":3629,"children":3631},{"className":167,"code":3630,"language":169,"meta":170,"style":170},"seatunnel.sh -c config\u002Fjob.conf -e spark -l DEBUG\n",[3632],{"type":70,"tag":173,"props":3633,"children":3634},{"__ignoreMap":170},[3635],{"type":70,"tag":177,"props":3636,"children":3637},{"class":179,"line":180},[3638,3642,3646,3650,3654,3658,3663],{"type":70,"tag":177,"props":3639,"children":3640},{"style":184},[3641],{"type":76,"value":812},{"type":70,"tag":177,"props":3643,"children":3644},{"style":190},[3645],{"type":76,"value":817},{"type":70,"tag":177,"props":3647,"children":3648},{"style":190},[3649],{"type":76,"value":3407},{"type":70,"tag":177,"props":3651,"children":3652},{"style":190},[3653],{"type":76,"value":827},{"type":70,"tag":177,"props":3655,"children":3656},{"style":190},[3657],{"type":76,"value":3537},{"type":70,"tag":177,"props":3659,"children":3660},{"style":190},[3661],{"type":76,"value":3662}," -l",{"type":70,"tag":177,"props":3664,"children":3665},{"style":190},[3666],{"type":76,"value":3667}," DEBUG\n",{"type":70,"tag":158,"props":3669,"children":3671},{"id":3670},"check-status",[3672],{"type":76,"value":3673},"Check Status",{"type":70,"tag":165,"props":3675,"children":3677},{"className":167,"code":3676,"language":169,"meta":170,"style":170},"# View running jobs (Spark Cluster)\nspark-submit --status \u003Cdriver-id>\n\n# View running jobs (Flink Cluster)\n$FLINK_HOME\u002Fbin\u002Fflink list\n",[3678],{"type":70,"tag":173,"props":3679,"children":3680},{"__ignoreMap":170},[3681,3689,3722,3729,3737],{"type":70,"tag":177,"props":3682,"children":3683},{"class":179,"line":180},[3684],{"type":70,"tag":177,"props":3685,"children":3686},{"style":232},[3687],{"type":76,"value":3688},"# View running jobs (Spark Cluster)\n",{"type":70,"tag":177,"props":3690,"children":3691},{"class":179,"line":201},[3692,3697,3702,3707,3712,3717],{"type":70,"tag":177,"props":3693,"children":3694},{"style":184},[3695],{"type":76,"value":3696},"spark-submit",{"type":70,"tag":177,"props":3698,"children":3699},{"style":190},[3700],{"type":76,"value":3701}," --status",{"type":70,"tag":177,"props":3703,"children":3704},{"style":348},[3705],{"type":76,"value":3706}," \u003C",{"type":70,"tag":177,"props":3708,"children":3709},{"style":190},[3710],{"type":76,"value":3711},"driver-i",{"type":70,"tag":177,"props":3713,"children":3714},{"style":342},[3715],{"type":76,"value":3716},"d",{"type":70,"tag":177,"props":3718,"children":3719},{"style":348},[3720],{"type":76,"value":3721},">\n",{"type":70,"tag":177,"props":3723,"children":3724},{"class":179,"line":261},[3725],{"type":70,"tag":177,"props":3726,"children":3727},{"emptyLinePlaceholder":265},[3728],{"type":76,"value":268},{"type":70,"tag":177,"props":3730,"children":3731},{"class":179,"line":271},[3732],{"type":70,"tag":177,"props":3733,"children":3734},{"style":232},[3735],{"type":76,"value":3736},"# View running jobs (Flink Cluster)\n",{"type":70,"tag":177,"props":3738,"children":3739},{"class":179,"line":280},[3740],{"type":70,"tag":177,"props":3741,"children":3742},{"style":342},[3743],{"type":76,"value":3744},"$FLINK_HOME\u002Fbin\u002Fflink list\n",{"type":70,"tag":100,"props":3746,"children":3748},{"id":3747},"_4-sql-api-advanced",[3749],{"type":76,"value":3750},"4. SQL API (Advanced)",{"type":70,"tag":79,"props":3752,"children":3753},{},[3754],{"type":76,"value":3755},"Use SQL for complex transformations:",{"type":70,"tag":165,"props":3757,"children":3759},{"className":591,"code":3758,"language":593,"meta":170,"style":170},"source {\n  MySQL {\n    # Source config...\n  }\n}\n\ntransform {\n  Sql {\n    # Multiple SQL statements\n    sql = \"\"\"\n      SELECT\n        id,\n        UPPER(name) as name,\n        age + 10 as age_plus_10,\n        CURRENT_TIMESTAMP as created_at\n      FROM source\n      WHERE age > 18\n    \"\"\"\n  }\n}\n\nsink {\n  PostgreSQL {\n    # Sink config...\n  }\n}\n",[3760],{"type":70,"tag":173,"props":3761,"children":3762},{"__ignoreMap":170},[3763,3770,3778,3786,3793,3800,3807,3814,3821,3829,3837,3845,3853,3861,3869,3877,3885,3893,3901,3908,3915,3922,3929,3937,3945,3952],{"type":70,"tag":177,"props":3764,"children":3765},{"class":179,"line":180},[3766],{"type":70,"tag":177,"props":3767,"children":3768},{},[3769],{"type":76,"value":643},{"type":70,"tag":177,"props":3771,"children":3772},{"class":179,"line":201},[3773],{"type":70,"tag":177,"props":3774,"children":3775},{},[3776],{"type":76,"value":3777},"  MySQL {\n",{"type":70,"tag":177,"props":3779,"children":3780},{"class":179,"line":261},[3781],{"type":70,"tag":177,"props":3782,"children":3783},{},[3784],{"type":76,"value":3785},"    # Source config...\n",{"type":70,"tag":177,"props":3787,"children":3788},{"class":179,"line":271},[3789],{"type":70,"tag":177,"props":3790,"children":3791},{},[3792],{"type":76,"value":733},{"type":70,"tag":177,"props":3794,"children":3795},{"class":179,"line":280},[3796],{"type":70,"tag":177,"props":3797,"children":3798},{},[3799],{"type":76,"value":463},{"type":70,"tag":177,"props":3801,"children":3802},{"class":179,"line":29},[3803],{"type":70,"tag":177,"props":3804,"children":3805},{"emptyLinePlaceholder":265},[3806],{"type":76,"value":268},{"type":70,"tag":177,"props":3808,"children":3809},{"class":179,"line":646},[3810],{"type":70,"tag":177,"props":3811,"children":3812},{},[3813],{"type":76,"value":2358},{"type":70,"tag":177,"props":3815,"children":3816},{"class":179,"line":655},[3817],{"type":70,"tag":177,"props":3818,"children":3819},{},[3820],{"type":76,"value":2936},{"type":70,"tag":177,"props":3822,"children":3823},{"class":179,"line":664},[3824],{"type":70,"tag":177,"props":3825,"children":3826},{},[3827],{"type":76,"value":3828},"    # Multiple SQL statements\n",{"type":70,"tag":177,"props":3830,"children":3831},{"class":179,"line":673},[3832],{"type":70,"tag":177,"props":3833,"children":3834},{},[3835],{"type":76,"value":3836},"    sql = \"\"\"\n",{"type":70,"tag":177,"props":3838,"children":3839},{"class":179,"line":682},[3840],{"type":70,"tag":177,"props":3841,"children":3842},{},[3843],{"type":76,"value":3844},"      SELECT\n",{"type":70,"tag":177,"props":3846,"children":3847},{"class":179,"line":691},[3848],{"type":70,"tag":177,"props":3849,"children":3850},{},[3851],{"type":76,"value":3852},"        id,\n",{"type":70,"tag":177,"props":3854,"children":3855},{"class":179,"line":700},[3856],{"type":70,"tag":177,"props":3857,"children":3858},{},[3859],{"type":76,"value":3860},"        UPPER(name) as name,\n",{"type":70,"tag":177,"props":3862,"children":3863},{"class":179,"line":709},[3864],{"type":70,"tag":177,"props":3865,"children":3866},{},[3867],{"type":76,"value":3868},"        age + 10 as age_plus_10,\n",{"type":70,"tag":177,"props":3870,"children":3871},{"class":179,"line":718},[3872],{"type":70,"tag":177,"props":3873,"children":3874},{},[3875],{"type":76,"value":3876},"        CURRENT_TIMESTAMP as created_at\n",{"type":70,"tag":177,"props":3878,"children":3879},{"class":179,"line":727},[3880],{"type":70,"tag":177,"props":3881,"children":3882},{},[3883],{"type":76,"value":3884},"      FROM source\n",{"type":70,"tag":177,"props":3886,"children":3887},{"class":179,"line":736},[3888],{"type":70,"tag":177,"props":3889,"children":3890},{},[3891],{"type":76,"value":3892},"      WHERE age > 18\n",{"type":70,"tag":177,"props":3894,"children":3895},{"class":179,"line":744},[3896],{"type":70,"tag":177,"props":3897,"children":3898},{},[3899],{"type":76,"value":3900},"    \"\"\"\n",{"type":70,"tag":177,"props":3902,"children":3903},{"class":179,"line":752},[3904],{"type":70,"tag":177,"props":3905,"children":3906},{},[3907],{"type":76,"value":733},{"type":70,"tag":177,"props":3909,"children":3910},{"class":179,"line":761},[3911],{"type":70,"tag":177,"props":3912,"children":3913},{},[3914],{"type":76,"value":463},{"type":70,"tag":177,"props":3916,"children":3917},{"class":179,"line":770},[3918],{"type":70,"tag":177,"props":3919,"children":3920},{"emptyLinePlaceholder":265},[3921],{"type":76,"value":268},{"type":70,"tag":177,"props":3923,"children":3924},{"class":179,"line":779},[3925],{"type":70,"tag":177,"props":3926,"children":3927},{},[3928],{"type":76,"value":758},{"type":70,"tag":177,"props":3930,"children":3931},{"class":179,"line":787},[3932],{"type":70,"tag":177,"props":3933,"children":3934},{},[3935],{"type":76,"value":3936},"  PostgreSQL {\n",{"type":70,"tag":177,"props":3938,"children":3939},{"class":179,"line":2377},[3940],{"type":70,"tag":177,"props":3941,"children":3942},{},[3943],{"type":76,"value":3944},"    # Sink config...\n",{"type":70,"tag":177,"props":3946,"children":3947},{"class":179,"line":2385},[3948],{"type":70,"tag":177,"props":3949,"children":3950},{},[3951],{"type":76,"value":733},{"type":70,"tag":177,"props":3953,"children":3954},{"class":179,"line":2393},[3955],{"type":70,"tag":177,"props":3956,"children":3957},{},[3958],{"type":76,"value":463},{"type":70,"tag":866,"props":3960,"children":3961},{},[],{"type":70,"tag":93,"props":3963,"children":3965},{"id":3964},"api-reference",[3966],{"type":76,"value":3967},"API Reference",{"type":70,"tag":100,"props":3969,"children":3971},{"id":3970},"core-connector-types",[3972],{"type":76,"value":3973},"Core Connector Types",{"type":70,"tag":158,"props":3975,"children":3977},{"id":3976},"source-connectors",[3978],{"type":76,"value":3979},"Source Connectors",{"type":70,"tag":107,"props":3981,"children":3982},{},[3983,3993,4003,4013,4023,4033,4043,4053,4063,4073,4083,4093,4103,4113,4123,4133],{"type":70,"tag":111,"props":3984,"children":3985},{},[3986,3991],{"type":70,"tag":85,"props":3987,"children":3988},{},[3989],{"type":76,"value":3990},"Jdbc",{"type":76,"value":3992},": Generic JDBC databases (MySQL, PostgreSQL, Oracle, SQL Server, DB2, OceanBase)",{"type":70,"tag":111,"props":3994,"children":3995},{},[3996,4001],{"type":70,"tag":85,"props":3997,"children":3998},{},[3999],{"type":76,"value":4000},"Kafka",{"type":76,"value":4002},": Apache Kafka topics",{"type":70,"tag":111,"props":4004,"children":4005},{},[4006,4011],{"type":70,"tag":85,"props":4007,"children":4008},{},[4009],{"type":76,"value":4010},"Mysql",{"type":76,"value":4012},": MySQL with CDC support",{"type":70,"tag":111,"props":4014,"children":4015},{},[4016,4021],{"type":70,"tag":85,"props":4017,"children":4018},{},[4019],{"type":76,"value":4020},"MongoDB",{"type":76,"value":4022},": MongoDB collections",{"type":70,"tag":111,"props":4024,"children":4025},{},[4026,4031],{"type":70,"tag":85,"props":4027,"children":4028},{},[4029],{"type":76,"value":4030},"PostgreSQL",{"type":76,"value":4032},": PostgreSQL with CDC",{"type":70,"tag":111,"props":4034,"children":4035},{},[4036,4041],{"type":70,"tag":85,"props":4037,"children":4038},{},[4039],{"type":76,"value":4040},"S3\u002FOssFile\u002FCosFile\u002FHdfsFile",{"type":76,"value":4042},": Object storage \u002F file systems",{"type":70,"tag":111,"props":4044,"children":4045},{},[4046,4051],{"type":70,"tag":85,"props":4047,"children":4048},{},[4049],{"type":76,"value":4050},"Http",{"type":76,"value":4052},": HTTP\u002FHTTPS endpoints",{"type":70,"tag":111,"props":4054,"children":4055},{},[4056,4061],{"type":70,"tag":85,"props":4057,"children":4058},{},[4059],{"type":76,"value":4060},"Hive\u002FIceberg\u002FHudi\u002FPaimon",{"type":76,"value":4062},": Data lake formats",{"type":70,"tag":111,"props":4064,"children":4065},{},[4066,4071],{"type":70,"tag":85,"props":4067,"children":4068},{},[4069],{"type":76,"value":4070},"Elasticsearch\u002FEasysearch",{"type":76,"value":4072},": Search engines",{"type":70,"tag":111,"props":4074,"children":4075},{},[4076,4081],{"type":70,"tag":85,"props":4077,"children":4078},{},[4079],{"type":76,"value":4080},"Redis\u002FHBase\u002FCassandra",{"type":76,"value":4082},": NoSQL databases",{"type":70,"tag":111,"props":4084,"children":4085},{},[4086,4091],{"type":70,"tag":85,"props":4087,"children":4088},{},[4089],{"type":76,"value":4090},"Pulsar\u002FRocketMQ\u002FRabbitMQ\u002FActiveMQ",{"type":76,"value":4092},": Message queues",{"type":70,"tag":111,"props":4094,"children":4095},{},[4096,4101],{"type":70,"tag":85,"props":4097,"children":4098},{},[4099],{"type":76,"value":4100},"ClickHouse\u002FStarRocks\u002FDoris\u002FDruid",{"type":76,"value":4102},": OLAP engines",{"type":70,"tag":111,"props":4104,"children":4105},{},[4106,4111],{"type":70,"tag":85,"props":4107,"children":4108},{},[4109],{"type":76,"value":4110},"IoTDB\u002FTDengine\u002FInfluxDB",{"type":76,"value":4112},": Time-series databases",{"type":70,"tag":111,"props":4114,"children":4115},{},[4116,4121],{"type":70,"tag":85,"props":4117,"children":4118},{},[4119],{"type":76,"value":4120},"Milvus\u002FQdrant",{"type":76,"value":4122},": Vector databases",{"type":70,"tag":111,"props":4124,"children":4125},{},[4126,4131],{"type":70,"tag":85,"props":4127,"children":4128},{},[4129],{"type":76,"value":4130},"Neo4j",{"type":76,"value":4132},": Graph databases",{"type":70,"tag":111,"props":4134,"children":4135},{},[4136,4141],{"type":70,"tag":85,"props":4137,"children":4138},{},[4139],{"type":76,"value":4140},"FakeSource",{"type":76,"value":4142},": For testing and development",{"type":70,"tag":158,"props":4144,"children":4146},{"id":4145},"transform-connectors",[4147],{"type":76,"value":4148},"Transform Connectors",{"type":70,"tag":107,"props":4150,"children":4151},{},[4152,4162,4172,4182],{"type":70,"tag":111,"props":4153,"children":4154},{},[4155,4160],{"type":70,"tag":85,"props":4156,"children":4157},{},[4158],{"type":76,"value":4159},"Sql",{"type":76,"value":4161},": Execute SQL transformations",{"type":70,"tag":111,"props":4163,"children":4164},{},[4165,4170],{"type":70,"tag":85,"props":4166,"children":4167},{},[4168],{"type":76,"value":4169},"Dummy",{"type":76,"value":4171},": Pass-through (testing)",{"type":70,"tag":111,"props":4173,"children":4174},{},[4175,4180],{"type":70,"tag":85,"props":4176,"children":4177},{},[4178],{"type":76,"value":4179},"FieldMapper",{"type":76,"value":4181},": Rename\u002Fmap columns",{"type":70,"tag":111,"props":4183,"children":4184},{},[4185,4190],{"type":70,"tag":85,"props":4186,"children":4187},{},[4188],{"type":76,"value":4189},"JsonPath",{"type":76,"value":4191},": Extract data from JSON",{"type":70,"tag":158,"props":4193,"children":4195},{"id":4194},"sink-connectors",[4196],{"type":76,"value":4197},"Sink Connectors",{"type":70,"tag":107,"props":4199,"children":4200},{},[4201,4210,4219,4229,4239,4249,4259,4269,4279,4288],{"type":70,"tag":111,"props":4202,"children":4203},{},[4204,4208],{"type":70,"tag":85,"props":4205,"children":4206},{},[4207],{"type":76,"value":3990},{"type":76,"value":4209},": Write to JDBC-compatible databases",{"type":70,"tag":111,"props":4211,"children":4212},{},[4213,4217],{"type":70,"tag":85,"props":4214,"children":4215},{},[4216],{"type":76,"value":4000},{"type":76,"value":4218},": Publish to Kafka topics",{"type":70,"tag":111,"props":4220,"children":4221},{},[4222,4227],{"type":70,"tag":85,"props":4223,"children":4224},{},[4225],{"type":76,"value":4226},"Elasticsearch",{"type":76,"value":4228},": Write to Elasticsearch indices",{"type":70,"tag":111,"props":4230,"children":4231},{},[4232,4237],{"type":70,"tag":85,"props":4233,"children":4234},{},[4235],{"type":76,"value":4236},"S3",{"type":76,"value":4238},": Write to S3 buckets",{"type":70,"tag":111,"props":4240,"children":4241},{},[4242,4247],{"type":70,"tag":85,"props":4243,"children":4244},{},[4245],{"type":76,"value":4246},"Redis",{"type":76,"value":4248},": Write to Redis",{"type":70,"tag":111,"props":4250,"children":4251},{},[4252,4257],{"type":70,"tag":85,"props":4253,"children":4254},{},[4255],{"type":76,"value":4256},"HBase",{"type":76,"value":4258},": Write to HBase tables",{"type":70,"tag":111,"props":4260,"children":4261},{},[4262,4267],{"type":70,"tag":85,"props":4263,"children":4264},{},[4265],{"type":76,"value":4266},"StarRocks",{"type":76,"value":4268},": Write to StarRocks tables",{"type":70,"tag":111,"props":4270,"children":4271},{},[4272,4277],{"type":70,"tag":85,"props":4273,"children":4274},{},[4275],{"type":76,"value":4276},"ClickHouse\u002FDoris\u002FDruid",{"type":76,"value":4278},": Write to OLAP engines",{"type":70,"tag":111,"props":4280,"children":4281},{},[4282,4286],{"type":70,"tag":85,"props":4283,"children":4284},{},[4285],{"type":76,"value":4060},{"type":76,"value":4287},": Write to data lakes",{"type":70,"tag":111,"props":4289,"children":4290},{},[4291,4296],{"type":70,"tag":85,"props":4292,"children":4293},{},[4294],{"type":76,"value":4295},"Console",{"type":76,"value":4297},": Output to console (testing)",{"type":70,"tag":79,"props":4299,"children":4300},{},[4301],{"type":76,"value":4302},"All source connectors above also have corresponding sink implementations where applicable.",{"type":70,"tag":100,"props":4304,"children":4306},{"id":4305},"configuration-options",[4307],{"type":76,"value":4308},"Configuration Options",{"type":70,"tag":158,"props":4310,"children":4312},{"id":4311},"common-source-options",[4313],{"type":76,"value":4314},"Common Source Options",{"type":70,"tag":165,"props":4316,"children":4318},{"className":591,"code":4317,"language":593,"meta":170,"style":170},"source {\n  ConnectorName {\n    # Connection\n    hostname = \"host\"\n    port = 3306\n    username = \"user\"\n    password = \"pass\"\n\n    # Data selection\n    database = \"db_name\"\n    table = \"table_name\"\n\n    # Performance\n    fetch_size = 1000\n    connection_check_timeout_sec = 100\n    split_size = 10000\n\n    # Schema\n    schema = {\n      fields {\n        id = \"bigint\"\n        name = \"string\"\n      }\n    }\n  }\n}\n",[4319],{"type":70,"tag":173,"props":4320,"children":4321},{"__ignoreMap":170},[4322,4329,4337,4345,4353,4360,4368,4376,4383,4391,4399,4407,4414,4422,4430,4437,4445,4452,4460,4467,4474,4481,4488,4495,4502,4509],{"type":70,"tag":177,"props":4323,"children":4324},{"class":179,"line":180},[4325],{"type":70,"tag":177,"props":4326,"children":4327},{},[4328],{"type":76,"value":643},{"type":70,"tag":177,"props":4330,"children":4331},{"class":179,"line":201},[4332],{"type":70,"tag":177,"props":4333,"children":4334},{},[4335],{"type":76,"value":4336},"  ConnectorName {\n",{"type":70,"tag":177,"props":4338,"children":4339},{"class":179,"line":261},[4340],{"type":70,"tag":177,"props":4341,"children":4342},{},[4343],{"type":76,"value":4344},"    # Connection\n",{"type":70,"tag":177,"props":4346,"children":4347},{"class":179,"line":271},[4348],{"type":70,"tag":177,"props":4349,"children":4350},{},[4351],{"type":76,"value":4352},"    hostname = \"host\"\n",{"type":70,"tag":177,"props":4354,"children":4355},{"class":179,"line":280},[4356],{"type":70,"tag":177,"props":4357,"children":4358},{},[4359],{"type":76,"value":3170},{"type":70,"tag":177,"props":4361,"children":4362},{"class":179,"line":29},[4363],{"type":70,"tag":177,"props":4364,"children":4365},{},[4366],{"type":76,"value":4367},"    username = \"user\"\n",{"type":70,"tag":177,"props":4369,"children":4370},{"class":179,"line":646},[4371],{"type":70,"tag":177,"props":4372,"children":4373},{},[4374],{"type":76,"value":4375},"    password = \"pass\"\n",{"type":70,"tag":177,"props":4377,"children":4378},{"class":179,"line":655},[4379],{"type":70,"tag":177,"props":4380,"children":4381},{"emptyLinePlaceholder":265},[4382],{"type":76,"value":268},{"type":70,"tag":177,"props":4384,"children":4385},{"class":179,"line":664},[4386],{"type":70,"tag":177,"props":4387,"children":4388},{},[4389],{"type":76,"value":4390},"    # Data selection\n",{"type":70,"tag":177,"props":4392,"children":4393},{"class":179,"line":673},[4394],{"type":70,"tag":177,"props":4395,"children":4396},{},[4397],{"type":76,"value":4398},"    database = \"db_name\"\n",{"type":70,"tag":177,"props":4400,"children":4401},{"class":179,"line":682},[4402],{"type":70,"tag":177,"props":4403,"children":4404},{},[4405],{"type":76,"value":4406},"    table = \"table_name\"\n",{"type":70,"tag":177,"props":4408,"children":4409},{"class":179,"line":691},[4410],{"type":70,"tag":177,"props":4411,"children":4412},{"emptyLinePlaceholder":265},[4413],{"type":76,"value":268},{"type":70,"tag":177,"props":4415,"children":4416},{"class":179,"line":700},[4417],{"type":70,"tag":177,"props":4418,"children":4419},{},[4420],{"type":76,"value":4421},"    # Performance\n",{"type":70,"tag":177,"props":4423,"children":4424},{"class":179,"line":709},[4425],{"type":70,"tag":177,"props":4426,"children":4427},{},[4428],{"type":76,"value":4429},"    fetch_size = 1000\n",{"type":70,"tag":177,"props":4431,"children":4432},{"class":179,"line":718},[4433],{"type":70,"tag":177,"props":4434,"children":4435},{},[4436],{"type":76,"value":2573},{"type":70,"tag":177,"props":4438,"children":4439},{"class":179,"line":727},[4440],{"type":70,"tag":177,"props":4441,"children":4442},{},[4443],{"type":76,"value":4444},"    split_size = 10000\n",{"type":70,"tag":177,"props":4446,"children":4447},{"class":179,"line":736},[4448],{"type":70,"tag":177,"props":4449,"children":4450},{"emptyLinePlaceholder":265},[4451],{"type":76,"value":268},{"type":70,"tag":177,"props":4453,"children":4454},{"class":179,"line":744},[4455],{"type":70,"tag":177,"props":4456,"children":4457},{},[4458],{"type":76,"value":4459},"    # Schema\n",{"type":70,"tag":177,"props":4461,"children":4462},{"class":179,"line":752},[4463],{"type":70,"tag":177,"props":4464,"children":4465},{},[4466],{"type":76,"value":670},{"type":70,"tag":177,"props":4468,"children":4469},{"class":179,"line":761},[4470],{"type":70,"tag":177,"props":4471,"children":4472},{},[4473],{"type":76,"value":679},{"type":70,"tag":177,"props":4475,"children":4476},{"class":179,"line":770},[4477],{"type":70,"tag":177,"props":4478,"children":4479},{},[4480],{"type":76,"value":688},{"type":70,"tag":177,"props":4482,"children":4483},{"class":179,"line":779},[4484],{"type":70,"tag":177,"props":4485,"children":4486},{},[4487],{"type":76,"value":697},{"type":70,"tag":177,"props":4489,"children":4490},{"class":179,"line":787},[4491],{"type":70,"tag":177,"props":4492,"children":4493},{},[4494],{"type":76,"value":715},{"type":70,"tag":177,"props":4496,"children":4497},{"class":179,"line":2377},[4498],{"type":70,"tag":177,"props":4499,"children":4500},{},[4501],{"type":76,"value":724},{"type":70,"tag":177,"props":4503,"children":4504},{"class":179,"line":2385},[4505],{"type":70,"tag":177,"props":4506,"children":4507},{},[4508],{"type":76,"value":733},{"type":70,"tag":177,"props":4510,"children":4511},{"class":179,"line":2393},[4512],{"type":70,"tag":177,"props":4513,"children":4514},{},[4515],{"type":76,"value":463},{"type":70,"tag":158,"props":4517,"children":4519},{"id":4518},"common-sink-options",[4520],{"type":76,"value":4521},"Common Sink Options",{"type":70,"tag":165,"props":4523,"children":4525},{"className":591,"code":4524,"language":593,"meta":170,"style":170},"sink {\n  ConnectorName {\n    # Connection\n    hostname = \"host\"\n    port = 3306\n    username = \"user\"\n    password = \"pass\"\n\n    # Write behavior\n    database = \"db_name\"\n    table = \"table_name\"\n    primary_keys = [\"id\"]\n    batch_size = 500\n\n    # Error handling\n    max_retries = 3\n    retry_wait_time_ms = 1000\n    on_duplicate_key_update_column_names = [\"field1\"]\n  }\n}\n",[4526],{"type":70,"tag":173,"props":4527,"children":4528},{"__ignoreMap":170},[4529,4536,4543,4550,4557,4564,4571,4578,4585,4593,4600,4607,4614,4622,4629,4637,4645,4653,4661,4668],{"type":70,"tag":177,"props":4530,"children":4531},{"class":179,"line":180},[4532],{"type":70,"tag":177,"props":4533,"children":4534},{},[4535],{"type":76,"value":758},{"type":70,"tag":177,"props":4537,"children":4538},{"class":179,"line":201},[4539],{"type":70,"tag":177,"props":4540,"children":4541},{},[4542],{"type":76,"value":4336},{"type":70,"tag":177,"props":4544,"children":4545},{"class":179,"line":261},[4546],{"type":70,"tag":177,"props":4547,"children":4548},{},[4549],{"type":76,"value":4344},{"type":70,"tag":177,"props":4551,"children":4552},{"class":179,"line":271},[4553],{"type":70,"tag":177,"props":4554,"children":4555},{},[4556],{"type":76,"value":4352},{"type":70,"tag":177,"props":4558,"children":4559},{"class":179,"line":280},[4560],{"type":70,"tag":177,"props":4561,"children":4562},{},[4563],{"type":76,"value":3170},{"type":70,"tag":177,"props":4565,"children":4566},{"class":179,"line":29},[4567],{"type":70,"tag":177,"props":4568,"children":4569},{},[4570],{"type":76,"value":4367},{"type":70,"tag":177,"props":4572,"children":4573},{"class":179,"line":646},[4574],{"type":70,"tag":177,"props":4575,"children":4576},{},[4577],{"type":76,"value":4375},{"type":70,"tag":177,"props":4579,"children":4580},{"class":179,"line":655},[4581],{"type":70,"tag":177,"props":4582,"children":4583},{"emptyLinePlaceholder":265},[4584],{"type":76,"value":268},{"type":70,"tag":177,"props":4586,"children":4587},{"class":179,"line":664},[4588],{"type":70,"tag":177,"props":4589,"children":4590},{},[4591],{"type":76,"value":4592},"    # Write behavior\n",{"type":70,"tag":177,"props":4594,"children":4595},{"class":179,"line":673},[4596],{"type":70,"tag":177,"props":4597,"children":4598},{},[4599],{"type":76,"value":4398},{"type":70,"tag":177,"props":4601,"children":4602},{"class":179,"line":682},[4603],{"type":70,"tag":177,"props":4604,"children":4605},{},[4606],{"type":76,"value":4406},{"type":70,"tag":177,"props":4608,"children":4609},{"class":179,"line":691},[4610],{"type":70,"tag":177,"props":4611,"children":4612},{},[4613],{"type":76,"value":2663},{"type":70,"tag":177,"props":4615,"children":4616},{"class":179,"line":700},[4617],{"type":70,"tag":177,"props":4618,"children":4619},{},[4620],{"type":76,"value":4621},"    batch_size = 500\n",{"type":70,"tag":177,"props":4623,"children":4624},{"class":179,"line":709},[4625],{"type":70,"tag":177,"props":4626,"children":4627},{"emptyLinePlaceholder":265},[4628],{"type":76,"value":268},{"type":70,"tag":177,"props":4630,"children":4631},{"class":179,"line":718},[4632],{"type":70,"tag":177,"props":4633,"children":4634},{},[4635],{"type":76,"value":4636},"    # Error handling\n",{"type":70,"tag":177,"props":4638,"children":4639},{"class":179,"line":727},[4640],{"type":70,"tag":177,"props":4641,"children":4642},{},[4643],{"type":76,"value":4644},"    max_retries = 3\n",{"type":70,"tag":177,"props":4646,"children":4647},{"class":179,"line":736},[4648],{"type":70,"tag":177,"props":4649,"children":4650},{},[4651],{"type":76,"value":4652},"    retry_wait_time_ms = 1000\n",{"type":70,"tag":177,"props":4654,"children":4655},{"class":179,"line":744},[4656],{"type":70,"tag":177,"props":4657,"children":4658},{},[4659],{"type":76,"value":4660},"    on_duplicate_key_update_column_names = [\"field1\"]\n",{"type":70,"tag":177,"props":4662,"children":4663},{"class":179,"line":752},[4664],{"type":70,"tag":177,"props":4665,"children":4666},{},[4667],{"type":76,"value":733},{"type":70,"tag":177,"props":4669,"children":4670},{"class":179,"line":761},[4671],{"type":70,"tag":177,"props":4672,"children":4673},{},[4674],{"type":76,"value":463},{"type":70,"tag":158,"props":4676,"children":4678},{"id":4677},"engine-options",[4679],{"type":76,"value":4680},"Engine Options",{"type":70,"tag":165,"props":4682,"children":4684},{"className":591,"code":4683,"language":593,"meta":170,"style":170},"env {\n  # Execution mode\n  job.mode = \"BATCH\"  # or STREAMING\n\n  # Job identity\n  job.name = \"My Job\"\n\n  # Parallelism\n  parallelism = 4\n\n  # Checkpoint (streaming)\n  checkpoint.interval = 60000\n\n  # Restart strategy\n  restart_strategy = \"fixed_delay\"\n  restart_strategy.fixed_delay.attempts = 3\n  restart_strategy.fixed_delay.delay = 10000\n}\n",[4685],{"type":70,"tag":173,"props":4686,"children":4687},{"__ignoreMap":170},[4688,4695,4703,4710,4717,4725,4732,4739,4747,4754,4761,4769,4777,4784,4792,4800,4808,4816],{"type":70,"tag":177,"props":4689,"children":4690},{"class":179,"line":180},[4691],{"type":70,"tag":177,"props":4692,"children":4693},{},[4694],{"type":76,"value":605},{"type":70,"tag":177,"props":4696,"children":4697},{"class":179,"line":201},[4698],{"type":70,"tag":177,"props":4699,"children":4700},{},[4701],{"type":76,"value":4702},"  # Execution mode\n",{"type":70,"tag":177,"props":4704,"children":4705},{"class":179,"line":261},[4706],{"type":70,"tag":177,"props":4707,"children":4708},{},[4709],{"type":76,"value":2216},{"type":70,"tag":177,"props":4711,"children":4712},{"class":179,"line":271},[4713],{"type":70,"tag":177,"props":4714,"children":4715},{"emptyLinePlaceholder":265},[4716],{"type":76,"value":268},{"type":70,"tag":177,"props":4718,"children":4719},{"class":179,"line":280},[4720],{"type":70,"tag":177,"props":4721,"children":4722},{},[4723],{"type":76,"value":4724},"  # Job identity\n",{"type":70,"tag":177,"props":4726,"children":4727},{"class":179,"line":29},[4728],{"type":70,"tag":177,"props":4729,"children":4730},{},[4731],{"type":76,"value":2224},{"type":70,"tag":177,"props":4733,"children":4734},{"class":179,"line":646},[4735],{"type":70,"tag":177,"props":4736,"children":4737},{"emptyLinePlaceholder":265},[4738],{"type":76,"value":268},{"type":70,"tag":177,"props":4740,"children":4741},{"class":179,"line":655},[4742],{"type":70,"tag":177,"props":4743,"children":4744},{},[4745],{"type":76,"value":4746},"  # Parallelism\n",{"type":70,"tag":177,"props":4748,"children":4749},{"class":179,"line":664},[4750],{"type":70,"tag":177,"props":4751,"children":4752},{},[4753],{"type":76,"value":2232},{"type":70,"tag":177,"props":4755,"children":4756},{"class":179,"line":673},[4757],{"type":70,"tag":177,"props":4758,"children":4759},{"emptyLinePlaceholder":265},[4760],{"type":76,"value":268},{"type":70,"tag":177,"props":4762,"children":4763},{"class":179,"line":682},[4764],{"type":70,"tag":177,"props":4765,"children":4766},{},[4767],{"type":76,"value":4768},"  # Checkpoint (streaming)\n",{"type":70,"tag":177,"props":4770,"children":4771},{"class":179,"line":691},[4772],{"type":70,"tag":177,"props":4773,"children":4774},{},[4775],{"type":76,"value":4776},"  checkpoint.interval = 60000\n",{"type":70,"tag":177,"props":4778,"children":4779},{"class":179,"line":700},[4780],{"type":70,"tag":177,"props":4781,"children":4782},{"emptyLinePlaceholder":265},[4783],{"type":76,"value":268},{"type":70,"tag":177,"props":4785,"children":4786},{"class":179,"line":709},[4787],{"type":70,"tag":177,"props":4788,"children":4789},{},[4790],{"type":76,"value":4791},"  # Restart strategy\n",{"type":70,"tag":177,"props":4793,"children":4794},{"class":179,"line":718},[4795],{"type":70,"tag":177,"props":4796,"children":4797},{},[4798],{"type":76,"value":4799},"  restart_strategy = \"fixed_delay\"\n",{"type":70,"tag":177,"props":4801,"children":4802},{"class":179,"line":727},[4803],{"type":70,"tag":177,"props":4804,"children":4805},{},[4806],{"type":76,"value":4807},"  restart_strategy.fixed_delay.attempts = 3\n",{"type":70,"tag":177,"props":4809,"children":4810},{"class":179,"line":736},[4811],{"type":70,"tag":177,"props":4812,"children":4813},{},[4814],{"type":76,"value":4815},"  restart_strategy.fixed_delay.delay = 10000\n",{"type":70,"tag":177,"props":4817,"children":4818},{"class":179,"line":744},[4819],{"type":70,"tag":177,"props":4820,"children":4821},{},[4822],{"type":76,"value":463},{"type":70,"tag":100,"props":4824,"children":4826},{"id":4825},"debugging-and-monitoring",[4827],{"type":76,"value":4828},"Debugging and Monitoring",{"type":70,"tag":158,"props":4830,"children":4832},{"id":4831},"view-job-metrics",[4833],{"type":76,"value":4834},"View Job Metrics",{"type":70,"tag":165,"props":4836,"children":4838},{"className":167,"code":4837,"language":169,"meta":170,"style":170},"# During execution, monitor logs\ntail -f logs\u002Fseatunnel.log\n\n# Check specific log level\ngrep ERROR logs\u002Fseatunnel.log\n",[4839],{"type":70,"tag":173,"props":4840,"children":4841},{"__ignoreMap":170},[4842,4850,4868,4875,4883],{"type":70,"tag":177,"props":4843,"children":4844},{"class":179,"line":180},[4845],{"type":70,"tag":177,"props":4846,"children":4847},{"style":232},[4848],{"type":76,"value":4849},"# During execution, monitor logs\n",{"type":70,"tag":177,"props":4851,"children":4852},{"class":179,"line":201},[4853,4858,4863],{"type":70,"tag":177,"props":4854,"children":4855},{"style":184},[4856],{"type":76,"value":4857},"tail",{"type":70,"tag":177,"props":4859,"children":4860},{"style":190},[4861],{"type":76,"value":4862}," -f",{"type":70,"tag":177,"props":4864,"children":4865},{"style":190},[4866],{"type":76,"value":4867}," logs\u002Fseatunnel.log\n",{"type":70,"tag":177,"props":4869,"children":4870},{"class":179,"line":261},[4871],{"type":70,"tag":177,"props":4872,"children":4873},{"emptyLinePlaceholder":265},[4874],{"type":76,"value":268},{"type":70,"tag":177,"props":4876,"children":4877},{"class":179,"line":271},[4878],{"type":70,"tag":177,"props":4879,"children":4880},{"style":232},[4881],{"type":76,"value":4882},"# Check specific log level\n",{"type":70,"tag":177,"props":4884,"children":4885},{"class":179,"line":280},[4886,4891,4896],{"type":70,"tag":177,"props":4887,"children":4888},{"style":184},[4889],{"type":76,"value":4890},"grep",{"type":70,"tag":177,"props":4892,"children":4893},{"style":190},[4894],{"type":76,"value":4895}," ERROR",{"type":70,"tag":177,"props":4897,"children":4898},{"style":190},[4899],{"type":76,"value":4867},{"type":70,"tag":158,"props":4901,"children":4903},{"id":4902},"enable-debug-logging",[4904],{"type":76,"value":4905},"Enable Debug Logging",{"type":70,"tag":165,"props":4907,"children":4909},{"className":167,"code":4908,"language":169,"meta":170,"style":170},"# Set log level to DEBUG\nseatunnel.sh -c config\u002Fjob.conf -e spark -l DEBUG\n",[4910],{"type":70,"tag":173,"props":4911,"children":4912},{"__ignoreMap":170},[4913,4921],{"type":70,"tag":177,"props":4914,"children":4915},{"class":179,"line":180},[4916],{"type":70,"tag":177,"props":4917,"children":4918},{"style":232},[4919],{"type":76,"value":4920},"# Set log level to DEBUG\n",{"type":70,"tag":177,"props":4922,"children":4923},{"class":179,"line":201},[4924,4928,4932,4936,4940,4944,4948],{"type":70,"tag":177,"props":4925,"children":4926},{"style":184},[4927],{"type":76,"value":812},{"type":70,"tag":177,"props":4929,"children":4930},{"style":190},[4931],{"type":76,"value":817},{"type":70,"tag":177,"props":4933,"children":4934},{"style":190},[4935],{"type":76,"value":3407},{"type":70,"tag":177,"props":4937,"children":4938},{"style":190},[4939],{"type":76,"value":827},{"type":70,"tag":177,"props":4941,"children":4942},{"style":190},[4943],{"type":76,"value":3537},{"type":70,"tag":177,"props":4945,"children":4946},{"style":190},[4947],{"type":76,"value":3662},{"type":70,"tag":177,"props":4949,"children":4950},{"style":190},[4951],{"type":76,"value":3667},{"type":70,"tag":158,"props":4953,"children":4955},{"id":4954},"use-test-sources",[4956],{"type":76,"value":4957},"Use Test Sources",{"type":70,"tag":165,"props":4959,"children":4961},{"className":591,"code":4960,"language":593,"meta":170,"style":170},"source {\n  FakeSource {\n    row.num = 1000\n    schema = {\n      fields {\n        id = \"bigint\"\n        name = \"string\"\n      }\n    }\n  }\n}\n\nsink {\n  Console {\n    format = \"json\"\n  }\n}\n",[4962],{"type":70,"tag":173,"props":4963,"children":4964},{"__ignoreMap":170},[4965,4972,4979,4987,4994,5001,5008,5015,5022,5029,5036,5043,5050,5057,5064,5071,5078],{"type":70,"tag":177,"props":4966,"children":4967},{"class":179,"line":180},[4968],{"type":70,"tag":177,"props":4969,"children":4970},{},[4971],{"type":76,"value":643},{"type":70,"tag":177,"props":4973,"children":4974},{"class":179,"line":201},[4975],{"type":70,"tag":177,"props":4976,"children":4977},{},[4978],{"type":76,"value":652},{"type":70,"tag":177,"props":4980,"children":4981},{"class":179,"line":261},[4982],{"type":70,"tag":177,"props":4983,"children":4984},{},[4985],{"type":76,"value":4986},"    row.num = 1000\n",{"type":70,"tag":177,"props":4988,"children":4989},{"class":179,"line":271},[4990],{"type":70,"tag":177,"props":4991,"children":4992},{},[4993],{"type":76,"value":670},{"type":70,"tag":177,"props":4995,"children":4996},{"class":179,"line":280},[4997],{"type":70,"tag":177,"props":4998,"children":4999},{},[5000],{"type":76,"value":679},{"type":70,"tag":177,"props":5002,"children":5003},{"class":179,"line":29},[5004],{"type":70,"tag":177,"props":5005,"children":5006},{},[5007],{"type":76,"value":688},{"type":70,"tag":177,"props":5009,"children":5010},{"class":179,"line":646},[5011],{"type":70,"tag":177,"props":5012,"children":5013},{},[5014],{"type":76,"value":697},{"type":70,"tag":177,"props":5016,"children":5017},{"class":179,"line":655},[5018],{"type":70,"tag":177,"props":5019,"children":5020},{},[5021],{"type":76,"value":715},{"type":70,"tag":177,"props":5023,"children":5024},{"class":179,"line":664},[5025],{"type":70,"tag":177,"props":5026,"children":5027},{},[5028],{"type":76,"value":724},{"type":70,"tag":177,"props":5030,"children":5031},{"class":179,"line":673},[5032],{"type":70,"tag":177,"props":5033,"children":5034},{},[5035],{"type":76,"value":733},{"type":70,"tag":177,"props":5037,"children":5038},{"class":179,"line":682},[5039],{"type":70,"tag":177,"props":5040,"children":5041},{},[5042],{"type":76,"value":463},{"type":70,"tag":177,"props":5044,"children":5045},{"class":179,"line":691},[5046],{"type":70,"tag":177,"props":5047,"children":5048},{"emptyLinePlaceholder":265},[5049],{"type":76,"value":268},{"type":70,"tag":177,"props":5051,"children":5052},{"class":179,"line":700},[5053],{"type":70,"tag":177,"props":5054,"children":5055},{},[5056],{"type":76,"value":758},{"type":70,"tag":177,"props":5058,"children":5059},{"class":179,"line":709},[5060],{"type":70,"tag":177,"props":5061,"children":5062},{},[5063],{"type":76,"value":767},{"type":70,"tag":177,"props":5065,"children":5066},{"class":179,"line":718},[5067],{"type":70,"tag":177,"props":5068,"children":5069},{},[5070],{"type":76,"value":776},{"type":70,"tag":177,"props":5072,"children":5073},{"class":179,"line":727},[5074],{"type":70,"tag":177,"props":5075,"children":5076},{},[5077],{"type":76,"value":733},{"type":70,"tag":177,"props":5079,"children":5080},{"class":179,"line":736},[5081],{"type":70,"tag":177,"props":5082,"children":5083},{},[5084],{"type":76,"value":463},{"type":70,"tag":866,"props":5086,"children":5087},{},[],{"type":70,"tag":93,"props":5089,"children":5091},{"id":5090},"configuration",[5092],{"type":76,"value":5093},"Configuration",{"type":70,"tag":100,"props":5095,"children":5097},{"id":5096},"project-structure",[5098],{"type":76,"value":5099},"Project Structure",{"type":70,"tag":165,"props":5101,"children":5105},{"className":5102,"code":5104,"language":76},[5103],"language-text","seatunnel\u002F\n├── bin\u002F                          # Executable scripts\n│   ├── seatunnel.sh             # Main entry point\n│   └── seatunnel-submit.sh      # Spark submission script\n├── config\u002F                       # Configuration examples\n│   ├── flink-conf.yaml          # Flink configuration\n│   └── spark-conf.yaml          # Spark configuration\n├── connectors\u002F                  # Pre-built connectors\n├── lib\u002F                         # JAR dependencies\n├── logs\u002F                        # Runtime logs\n└── plugin\u002F                      # Plugin directory\n",[5106],{"type":70,"tag":173,"props":5107,"children":5108},{"__ignoreMap":170},[5109],{"type":76,"value":5104},{"type":70,"tag":100,"props":5111,"children":5113},{"id":5112},"environment-variables",[5114],{"type":76,"value":5115},"Environment Variables",{"type":70,"tag":165,"props":5117,"children":5119},{"className":167,"code":5118,"language":169,"meta":170,"style":170},"# Java configuration\nexport JAVA_HOME=\u002Fpath\u002Fto\u002Fjava\nexport JVM_OPTS=\"-Xms1G -Xmx4G\"\n\n# Spark configuration\nexport SPARK_HOME=\u002Fpath\u002Fto\u002Fspark\nexport SPARK_MASTER=spark:\u002F\u002Fmaster:7077\n\n# Flink configuration\nexport FLINK_HOME=\u002Fpath\u002Fto\u002Fflink\n\n# SeaTunnel configuration\nexport SEATUNNEL_HOME=\u002Fpath\u002Fto\u002Fseatunnel\n",[5120],{"type":70,"tag":173,"props":5121,"children":5122},{"__ignoreMap":170},[5123,5131,5150,5181,5188,5196,5215,5236,5243,5251,5270,5277,5285],{"type":70,"tag":177,"props":5124,"children":5125},{"class":179,"line":180},[5126],{"type":70,"tag":177,"props":5127,"children":5128},{"style":232},[5129],{"type":76,"value":5130},"# Java configuration\n",{"type":70,"tag":177,"props":5132,"children":5133},{"class":179,"line":201},[5134,5138,5142,5146],{"type":70,"tag":177,"props":5135,"children":5136},{"style":490},[5137],{"type":76,"value":493},{"type":70,"tag":177,"props":5139,"children":5140},{"style":342},[5141],{"type":76,"value":498},{"type":70,"tag":177,"props":5143,"children":5144},{"style":348},[5145],{"type":76,"value":351},{"type":70,"tag":177,"props":5147,"children":5148},{"style":342},[5149],{"type":76,"value":507},{"type":70,"tag":177,"props":5151,"children":5152},{"class":179,"line":261},[5153,5157,5162,5166,5171,5176],{"type":70,"tag":177,"props":5154,"children":5155},{"style":490},[5156],{"type":76,"value":493},{"type":70,"tag":177,"props":5158,"children":5159},{"style":342},[5160],{"type":76,"value":5161}," JVM_OPTS",{"type":70,"tag":177,"props":5163,"children":5164},{"style":348},[5165],{"type":76,"value":351},{"type":70,"tag":177,"props":5167,"children":5168},{"style":348},[5169],{"type":76,"value":5170},"\"",{"type":70,"tag":177,"props":5172,"children":5173},{"style":190},[5174],{"type":76,"value":5175},"-Xms1G -Xmx4G",{"type":70,"tag":177,"props":5177,"children":5178},{"style":348},[5179],{"type":76,"value":5180},"\"\n",{"type":70,"tag":177,"props":5182,"children":5183},{"class":179,"line":271},[5184],{"type":70,"tag":177,"props":5185,"children":5186},{"emptyLinePlaceholder":265},[5187],{"type":76,"value":268},{"type":70,"tag":177,"props":5189,"children":5190},{"class":179,"line":280},[5191],{"type":70,"tag":177,"props":5192,"children":5193},{"style":232},[5194],{"type":76,"value":5195},"# Spark configuration\n",{"type":70,"tag":177,"props":5197,"children":5198},{"class":179,"line":29},[5199,5203,5207,5211],{"type":70,"tag":177,"props":5200,"children":5201},{"style":490},[5202],{"type":76,"value":493},{"type":70,"tag":177,"props":5204,"children":5205},{"style":342},[5206],{"type":76,"value":1964},{"type":70,"tag":177,"props":5208,"children":5209},{"style":348},[5210],{"type":76,"value":351},{"type":70,"tag":177,"props":5212,"children":5213},{"style":342},[5214],{"type":76,"value":1973},{"type":70,"tag":177,"props":5216,"children":5217},{"class":179,"line":646},[5218,5222,5227,5231],{"type":70,"tag":177,"props":5219,"children":5220},{"style":490},[5221],{"type":76,"value":493},{"type":70,"tag":177,"props":5223,"children":5224},{"style":342},[5225],{"type":76,"value":5226}," SPARK_MASTER",{"type":70,"tag":177,"props":5228,"children":5229},{"style":348},[5230],{"type":76,"value":351},{"type":70,"tag":177,"props":5232,"children":5233},{"style":342},[5234],{"type":76,"value":5235},"spark:\u002F\u002Fmaster:7077\n",{"type":70,"tag":177,"props":5237,"children":5238},{"class":179,"line":655},[5239],{"type":70,"tag":177,"props":5240,"children":5241},{"emptyLinePlaceholder":265},[5242],{"type":76,"value":268},{"type":70,"tag":177,"props":5244,"children":5245},{"class":179,"line":664},[5246],{"type":70,"tag":177,"props":5247,"children":5248},{"style":232},[5249],{"type":76,"value":5250},"# Flink configuration\n",{"type":70,"tag":177,"props":5252,"children":5253},{"class":179,"line":673},[5254,5258,5262,5266],{"type":70,"tag":177,"props":5255,"children":5256},{"style":490},[5257],{"type":76,"value":493},{"type":70,"tag":177,"props":5259,"children":5260},{"style":342},[5261],{"type":76,"value":2029},{"type":70,"tag":177,"props":5263,"children":5264},{"style":348},[5265],{"type":76,"value":351},{"type":70,"tag":177,"props":5267,"children":5268},{"style":342},[5269],{"type":76,"value":2038},{"type":70,"tag":177,"props":5271,"children":5272},{"class":179,"line":682},[5273],{"type":70,"tag":177,"props":5274,"children":5275},{"emptyLinePlaceholder":265},[5276],{"type":76,"value":268},{"type":70,"tag":177,"props":5278,"children":5279},{"class":179,"line":691},[5280],{"type":70,"tag":177,"props":5281,"children":5282},{"style":232},[5283],{"type":76,"value":5284},"# SeaTunnel configuration\n",{"type":70,"tag":177,"props":5286,"children":5287},{"class":179,"line":700},[5288,5292,5297,5301],{"type":70,"tag":177,"props":5289,"children":5290},{"style":490},[5291],{"type":76,"value":493},{"type":70,"tag":177,"props":5293,"children":5294},{"style":342},[5295],{"type":76,"value":5296}," SEATUNNEL_HOME",{"type":70,"tag":177,"props":5298,"children":5299},{"style":348},[5300],{"type":76,"value":351},{"type":70,"tag":177,"props":5302,"children":5303},{"style":342},[5304],{"type":76,"value":5305},"\u002Fpath\u002Fto\u002Fseatunnel\n",{"type":70,"tag":100,"props":5307,"children":5309},{"id":5308},"key-configuration-files",[5310],{"type":76,"value":5311},"Key Configuration Files",{"type":70,"tag":158,"props":5313,"children":5315},{"id":5314},"seatunnel-envsh",[5316],{"type":70,"tag":173,"props":5317,"children":5319},{"className":5318},[],[5320],{"type":76,"value":5321},"seatunnel-env.sh",{"type":70,"tag":79,"props":5323,"children":5324},{},[5325],{"type":76,"value":5326},"Configure runtime environment:",{"type":70,"tag":165,"props":5328,"children":5330},{"className":167,"code":5329,"language":169,"meta":170,"style":170},"JAVA_HOME=\u002Fpath\u002Fto\u002Fjava\nJVM_OPTS=\"-Xms1G -Xmx4G -XX:+UseG1GC\"\nSPARK_HOME=\u002Fpath\u002Fto\u002Fspark\nFLINK_HOME=\u002Fpath\u002Fto\u002Fflink\n",[5331],{"type":70,"tag":173,"props":5332,"children":5333},{"__ignoreMap":170},[5334,5350,5375,5391],{"type":70,"tag":177,"props":5335,"children":5336},{"class":179,"line":180},[5337,5342,5346],{"type":70,"tag":177,"props":5338,"children":5339},{"style":342},[5340],{"type":76,"value":5341},"JAVA_HOME",{"type":70,"tag":177,"props":5343,"children":5344},{"style":348},[5345],{"type":76,"value":351},{"type":70,"tag":177,"props":5347,"children":5348},{"style":190},[5349],{"type":76,"value":507},{"type":70,"tag":177,"props":5351,"children":5352},{"class":179,"line":201},[5353,5358,5362,5366,5371],{"type":70,"tag":177,"props":5354,"children":5355},{"style":342},[5356],{"type":76,"value":5357},"JVM_OPTS",{"type":70,"tag":177,"props":5359,"children":5360},{"style":348},[5361],{"type":76,"value":351},{"type":70,"tag":177,"props":5363,"children":5364},{"style":348},[5365],{"type":76,"value":5170},{"type":70,"tag":177,"props":5367,"children":5368},{"style":190},[5369],{"type":76,"value":5370},"-Xms1G -Xmx4G -XX:+UseG1GC",{"type":70,"tag":177,"props":5372,"children":5373},{"style":348},[5374],{"type":76,"value":5180},{"type":70,"tag":177,"props":5376,"children":5377},{"class":179,"line":261},[5378,5383,5387],{"type":70,"tag":177,"props":5379,"children":5380},{"style":342},[5381],{"type":76,"value":5382},"SPARK_HOME",{"type":70,"tag":177,"props":5384,"children":5385},{"style":348},[5386],{"type":76,"value":351},{"type":70,"tag":177,"props":5388,"children":5389},{"style":190},[5390],{"type":76,"value":1973},{"type":70,"tag":177,"props":5392,"children":5393},{"class":179,"line":271},[5394,5399,5403],{"type":70,"tag":177,"props":5395,"children":5396},{"style":342},[5397],{"type":76,"value":5398},"FLINK_HOME",{"type":70,"tag":177,"props":5400,"children":5401},{"style":348},[5402],{"type":76,"value":351},{"type":70,"tag":177,"props":5404,"children":5405},{"style":190},[5406],{"type":76,"value":2038},{"type":70,"tag":158,"props":5408,"children":5410},{"id":5409},"flink-confyaml-for-flink-engine",[5411,5417],{"type":70,"tag":173,"props":5412,"children":5414},{"className":5413},[],[5415],{"type":76,"value":5416},"flink-conf.yaml",{"type":76,"value":5418}," (for Flink engine)",{"type":70,"tag":165,"props":5420,"children":5424},{"className":5421,"code":5422,"language":5423,"meta":170,"style":170},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","taskmanager.memory.process.size: 2g\ntaskmanager.memory.jvm-overhead.fraction: 0.1\nparallelism.default: 4\n","yaml",[5425],{"type":70,"tag":173,"props":5426,"children":5427},{"__ignoreMap":170},[5428,5447,5464],{"type":70,"tag":177,"props":5429,"children":5430},{"class":179,"line":180},[5431,5437,5442],{"type":70,"tag":177,"props":5432,"children":5434},{"style":5433},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[5435],{"type":76,"value":5436},"taskmanager.memory.process.size",{"type":70,"tag":177,"props":5438,"children":5439},{"style":348},[5440],{"type":76,"value":5441},":",{"type":70,"tag":177,"props":5443,"children":5444},{"style":190},[5445],{"type":76,"value":5446}," 2g\n",{"type":70,"tag":177,"props":5448,"children":5449},{"class":179,"line":201},[5450,5455,5459],{"type":70,"tag":177,"props":5451,"children":5452},{"style":5433},[5453],{"type":76,"value":5454},"taskmanager.memory.jvm-overhead.fraction",{"type":70,"tag":177,"props":5456,"children":5457},{"style":348},[5458],{"type":76,"value":5441},{"type":70,"tag":177,"props":5460,"children":5461},{"style":3618},[5462],{"type":76,"value":5463}," 0.1\n",{"type":70,"tag":177,"props":5465,"children":5466},{"class":179,"line":261},[5467,5472,5476],{"type":70,"tag":177,"props":5468,"children":5469},{"style":5433},[5470],{"type":76,"value":5471},"parallelism.default",{"type":70,"tag":177,"props":5473,"children":5474},{"style":348},[5475],{"type":76,"value":5441},{"type":70,"tag":177,"props":5477,"children":5478},{"style":3618},[5479],{"type":76,"value":5480}," 4\n",{"type":70,"tag":158,"props":5482,"children":5484},{"id":5483},"spark-confyaml-for-spark-engine",[5485,5491],{"type":70,"tag":173,"props":5486,"children":5488},{"className":5487},[],[5489],{"type":76,"value":5490},"spark-conf.yaml",{"type":76,"value":5492}," (for Spark engine)",{"type":70,"tag":165,"props":5494,"children":5496},{"className":5421,"code":5495,"language":5423,"meta":170,"style":170},"driver-memory: 2g\nexecutor-memory: 4g\nnum-executors: 4\n",[5497],{"type":70,"tag":173,"props":5498,"children":5499},{"__ignoreMap":170},[5500,5516,5533],{"type":70,"tag":177,"props":5501,"children":5502},{"class":179,"line":180},[5503,5508,5512],{"type":70,"tag":177,"props":5504,"children":5505},{"style":5433},[5506],{"type":76,"value":5507},"driver-memory",{"type":70,"tag":177,"props":5509,"children":5510},{"style":348},[5511],{"type":76,"value":5441},{"type":70,"tag":177,"props":5513,"children":5514},{"style":190},[5515],{"type":76,"value":5446},{"type":70,"tag":177,"props":5517,"children":5518},{"class":179,"line":201},[5519,5524,5528],{"type":70,"tag":177,"props":5520,"children":5521},{"style":5433},[5522],{"type":76,"value":5523},"executor-memory",{"type":70,"tag":177,"props":5525,"children":5526},{"style":348},[5527],{"type":76,"value":5441},{"type":70,"tag":177,"props":5529,"children":5530},{"style":190},[5531],{"type":76,"value":5532}," 4g\n",{"type":70,"tag":177,"props":5534,"children":5535},{"class":179,"line":261},[5536,5541,5545],{"type":70,"tag":177,"props":5537,"children":5538},{"style":5433},[5539],{"type":76,"value":5540},"num-executors",{"type":70,"tag":177,"props":5542,"children":5543},{"style":348},[5544],{"type":76,"value":5441},{"type":70,"tag":177,"props":5546,"children":5547},{"style":3618},[5548],{"type":76,"value":5480},{"type":70,"tag":100,"props":5550,"children":5552},{"id":5551},"performance-tuning",[5553],{"type":76,"value":5554},"Performance Tuning",{"type":70,"tag":158,"props":5556,"children":5558},{"id":5557},"for-batch-jobs",[5559],{"type":76,"value":5560},"For Batch Jobs",{"type":70,"tag":165,"props":5562,"children":5564},{"className":591,"code":5563,"language":593,"meta":170,"style":170},"env {\n  job.mode = \"BATCH\"\n  parallelism = 8  # Increase for larger clusters\n}\n\nsource {\n  Jdbc {\n    # Split large tables for parallel reads\n    split_size = 100000\n    fetch_size = 5000\n  }\n}\n\nsink {\n  Jdbc {\n    # Batch inserts for better throughput\n    batch_size = 1000\n    # Use connection pooling\n    max_retries = 3\n  }\n}\n",[5565],{"type":70,"tag":173,"props":5566,"children":5567},{"__ignoreMap":170},[5568,5575,5582,5590,5597,5604,5611,5618,5626,5634,5642,5649,5656,5663,5670,5677,5685,5693,5701,5708,5715],{"type":70,"tag":177,"props":5569,"children":5570},{"class":179,"line":180},[5571],{"type":70,"tag":177,"props":5572,"children":5573},{},[5574],{"type":76,"value":605},{"type":70,"tag":177,"props":5576,"children":5577},{"class":179,"line":201},[5578],{"type":70,"tag":177,"props":5579,"children":5580},{},[5581],{"type":76,"value":613},{"type":70,"tag":177,"props":5583,"children":5584},{"class":179,"line":261},[5585],{"type":70,"tag":177,"props":5586,"children":5587},{},[5588],{"type":76,"value":5589},"  parallelism = 8  # Increase for larger clusters\n",{"type":70,"tag":177,"props":5591,"children":5592},{"class":179,"line":271},[5593],{"type":70,"tag":177,"props":5594,"children":5595},{},[5596],{"type":76,"value":463},{"type":70,"tag":177,"props":5598,"children":5599},{"class":179,"line":280},[5600],{"type":70,"tag":177,"props":5601,"children":5602},{"emptyLinePlaceholder":265},[5603],{"type":76,"value":268},{"type":70,"tag":177,"props":5605,"children":5606},{"class":179,"line":29},[5607],{"type":70,"tag":177,"props":5608,"children":5609},{},[5610],{"type":76,"value":643},{"type":70,"tag":177,"props":5612,"children":5613},{"class":179,"line":646},[5614],{"type":70,"tag":177,"props":5615,"children":5616},{},[5617],{"type":76,"value":2525},{"type":70,"tag":177,"props":5619,"children":5620},{"class":179,"line":655},[5621],{"type":70,"tag":177,"props":5622,"children":5623},{},[5624],{"type":76,"value":5625},"    # Split large tables for parallel reads\n",{"type":70,"tag":177,"props":5627,"children":5628},{"class":179,"line":664},[5629],{"type":70,"tag":177,"props":5630,"children":5631},{},[5632],{"type":76,"value":5633},"    split_size = 100000\n",{"type":70,"tag":177,"props":5635,"children":5636},{"class":179,"line":673},[5637],{"type":70,"tag":177,"props":5638,"children":5639},{},[5640],{"type":76,"value":5641},"    fetch_size = 5000\n",{"type":70,"tag":177,"props":5643,"children":5644},{"class":179,"line":682},[5645],{"type":70,"tag":177,"props":5646,"children":5647},{},[5648],{"type":76,"value":733},{"type":70,"tag":177,"props":5650,"children":5651},{"class":179,"line":691},[5652],{"type":70,"tag":177,"props":5653,"children":5654},{},[5655],{"type":76,"value":463},{"type":70,"tag":177,"props":5657,"children":5658},{"class":179,"line":700},[5659],{"type":70,"tag":177,"props":5660,"children":5661},{"emptyLinePlaceholder":265},[5662],{"type":76,"value":268},{"type":70,"tag":177,"props":5664,"children":5665},{"class":179,"line":709},[5666],{"type":70,"tag":177,"props":5667,"children":5668},{},[5669],{"type":76,"value":758},{"type":70,"tag":177,"props":5671,"children":5672},{"class":179,"line":718},[5673],{"type":70,"tag":177,"props":5674,"children":5675},{},[5676],{"type":76,"value":2525},{"type":70,"tag":177,"props":5678,"children":5679},{"class":179,"line":727},[5680],{"type":70,"tag":177,"props":5681,"children":5682},{},[5683],{"type":76,"value":5684},"    # Batch inserts for better throughput\n",{"type":70,"tag":177,"props":5686,"children":5687},{"class":179,"line":736},[5688],{"type":70,"tag":177,"props":5689,"children":5690},{},[5691],{"type":76,"value":5692},"    batch_size = 1000\n",{"type":70,"tag":177,"props":5694,"children":5695},{"class":179,"line":744},[5696],{"type":70,"tag":177,"props":5697,"children":5698},{},[5699],{"type":76,"value":5700},"    # Use connection pooling\n",{"type":70,"tag":177,"props":5702,"children":5703},{"class":179,"line":752},[5704],{"type":70,"tag":177,"props":5705,"children":5706},{},[5707],{"type":76,"value":4644},{"type":70,"tag":177,"props":5709,"children":5710},{"class":179,"line":761},[5711],{"type":70,"tag":177,"props":5712,"children":5713},{},[5714],{"type":76,"value":733},{"type":70,"tag":177,"props":5716,"children":5717},{"class":179,"line":770},[5718],{"type":70,"tag":177,"props":5719,"children":5720},{},[5721],{"type":76,"value":463},{"type":70,"tag":158,"props":5723,"children":5725},{"id":5724},"for-streaming-jobs",[5726],{"type":76,"value":5727},"For Streaming Jobs",{"type":70,"tag":165,"props":5729,"children":5731},{"className":591,"code":5730,"language":593,"meta":170,"style":170},"env {\n  job.mode = \"STREAMING\"\n  parallelism = 4\n  checkpoint.interval = 30000  # 30 seconds\n}\n\nsource {\n  Kafka {\n    # Consumer group for parallel reads\n    consumer.group = \"seatunnel-consumer\"\n    # Batch reading\n    max_poll_records = 500\n  }\n}\n",[5732],{"type":70,"tag":173,"props":5733,"children":5734},{"__ignoreMap":170},[5735,5742,5749,5756,5764,5771,5778,5785,5792,5800,5808,5816,5824,5831],{"type":70,"tag":177,"props":5736,"children":5737},{"class":179,"line":180},[5738],{"type":70,"tag":177,"props":5739,"children":5740},{},[5741],{"type":76,"value":605},{"type":70,"tag":177,"props":5743,"children":5744},{"class":179,"line":201},[5745],{"type":70,"tag":177,"props":5746,"children":5747},{},[5748],{"type":76,"value":2756},{"type":70,"tag":177,"props":5750,"children":5751},{"class":179,"line":261},[5752],{"type":70,"tag":177,"props":5753,"children":5754},{},[5755],{"type":76,"value":2232},{"type":70,"tag":177,"props":5757,"children":5758},{"class":179,"line":271},[5759],{"type":70,"tag":177,"props":5760,"children":5761},{},[5762],{"type":76,"value":5763},"  checkpoint.interval = 30000  # 30 seconds\n",{"type":70,"tag":177,"props":5765,"children":5766},{"class":179,"line":280},[5767],{"type":70,"tag":177,"props":5768,"children":5769},{},[5770],{"type":76,"value":463},{"type":70,"tag":177,"props":5772,"children":5773},{"class":179,"line":29},[5774],{"type":70,"tag":177,"props":5775,"children":5776},{"emptyLinePlaceholder":265},[5777],{"type":76,"value":268},{"type":70,"tag":177,"props":5779,"children":5780},{"class":179,"line":646},[5781],{"type":70,"tag":177,"props":5782,"children":5783},{},[5784],{"type":76,"value":643},{"type":70,"tag":177,"props":5786,"children":5787},{"class":179,"line":655},[5788],{"type":70,"tag":177,"props":5789,"children":5790},{},[5791],{"type":76,"value":2801},{"type":70,"tag":177,"props":5793,"children":5794},{"class":179,"line":664},[5795],{"type":70,"tag":177,"props":5796,"children":5797},{},[5798],{"type":76,"value":5799},"    # Consumer group for parallel reads\n",{"type":70,"tag":177,"props":5801,"children":5802},{"class":179,"line":673},[5803],{"type":70,"tag":177,"props":5804,"children":5805},{},[5806],{"type":76,"value":5807},"    consumer.group = \"seatunnel-consumer\"\n",{"type":70,"tag":177,"props":5809,"children":5810},{"class":179,"line":682},[5811],{"type":70,"tag":177,"props":5812,"children":5813},{},[5814],{"type":76,"value":5815},"    # Batch reading\n",{"type":70,"tag":177,"props":5817,"children":5818},{"class":179,"line":691},[5819],{"type":70,"tag":177,"props":5820,"children":5821},{},[5822],{"type":76,"value":5823},"    max_poll_records = 500\n",{"type":70,"tag":177,"props":5825,"children":5826},{"class":179,"line":700},[5827],{"type":70,"tag":177,"props":5828,"children":5829},{},[5830],{"type":76,"value":733},{"type":70,"tag":177,"props":5832,"children":5833},{"class":179,"line":709},[5834],{"type":70,"tag":177,"props":5835,"children":5836},{},[5837],{"type":76,"value":463},{"type":70,"tag":866,"props":5839,"children":5840},{},[],{"type":70,"tag":93,"props":5842,"children":5844},{"id":5843},"website-documentation-system",[5845],{"type":76,"value":5846},"Website & Documentation System",{"type":70,"tag":79,"props":5848,"children":5849},{},[5850,5852,5858,5860,5865,5867,5872],{"type":76,"value":5851},"The official documentation site (",{"type":70,"tag":320,"props":5853,"children":5856},{"href":5854,"rel":5855},"https:\u002F\u002Fseatunnel.apache.org",[324],[5857],{"type":76,"value":5854},{"type":76,"value":5859},") is managed through the ",{"type":70,"tag":173,"props":5861,"children":5863},{"className":5862},[],[5864],{"type":76,"value":65},{"type":76,"value":5866}," repository, built with ",{"type":70,"tag":85,"props":5868,"children":5869},{},[5870],{"type":76,"value":5871},"Docusaurus 2.4.3",{"type":76,"value":5873},".",{"type":70,"tag":100,"props":5875,"children":5877},{"id":5876},"how-documentation-works",[5878],{"type":76,"value":5879},"How Documentation Works",{"type":70,"tag":79,"props":5881,"children":5882},{},[5883,5885,5890,5892,5897,5899,5905,5907,5913,5915,5921],{"type":76,"value":5884},"Documentation content lives in the ",{"type":70,"tag":85,"props":5886,"children":5887},{},[5888],{"type":76,"value":5889},"main codebase",{"type":76,"value":5891}," (",{"type":70,"tag":173,"props":5893,"children":5895},{"className":5894},[],[5896],{"type":76,"value":64},{"type":76,"value":5898}," repo, ",{"type":70,"tag":173,"props":5900,"children":5902},{"className":5901},[],[5903],{"type":76,"value":5904},"docs\u002F",{"type":76,"value":5906}," directory). The website repo fetches docs via ",{"type":70,"tag":173,"props":5908,"children":5910},{"className":5909},[],[5911],{"type":76,"value":5912},"npm run sync",{"type":76,"value":5914}," (or ",{"type":70,"tag":173,"props":5916,"children":5918},{"className":5917},[],[5919],{"type":76,"value":5920},"tools\u002Fbuild-docs.js",{"type":76,"value":5922},") before building.",{"type":70,"tag":79,"props":5924,"children":5925},{},[5926],{"type":76,"value":5927},"The sync process:",{"type":70,"tag":951,"props":5929,"children":5930},{},[5931,5951,5971,5991,6016],{"type":70,"tag":111,"props":5932,"children":5933},{},[5934,5936,5942,5944,5949],{"type":76,"value":5935},"Creates ",{"type":70,"tag":173,"props":5937,"children":5939},{"className":5938},[],[5940],{"type":76,"value":5941},"swap\u002F",{"type":76,"value":5943}," directory, clones ",{"type":70,"tag":173,"props":5945,"children":5947},{"className":5946},[],[5948],{"type":76,"value":64},{"type":76,"value":5950}," codebase",{"type":70,"tag":111,"props":5952,"children":5953},{},[5954,5956,5962,5964,5969],{"type":76,"value":5955},"Copies ",{"type":70,"tag":173,"props":5957,"children":5959},{"className":5958},[],[5960],{"type":76,"value":5961},"docs\u002Fen",{"type":76,"value":5963}," to website's ",{"type":70,"tag":173,"props":5965,"children":5967},{"className":5966},[],[5968],{"type":76,"value":5904},{"type":76,"value":5970}," directory",{"type":70,"tag":111,"props":5972,"children":5973},{},[5974,5975,5981,5983,5989],{"type":76,"value":5955},{"type":70,"tag":173,"props":5976,"children":5978},{"className":5977},[],[5979],{"type":76,"value":5980},"docs\u002Fzh",{"type":76,"value":5982}," to ",{"type":70,"tag":173,"props":5984,"children":5986},{"className":5985},[],[5987],{"type":76,"value":5988},"i18n\u002Fzh-CN\u002F",{"type":76,"value":5990}," for Chinese translations",{"type":70,"tag":111,"props":5992,"children":5993},{},[5994,5995,6001,6002,6008,6010],{"type":76,"value":5955},{"type":70,"tag":173,"props":5996,"children":5998},{"className":5997},[],[5999],{"type":76,"value":6000},"docs\u002Fimages",{"type":76,"value":5982},{"type":70,"tag":173,"props":6003,"children":6005},{"className":6004},[],[6006],{"type":76,"value":6007},"static\u002Fimage_en",{"type":76,"value":6009}," and ",{"type":70,"tag":173,"props":6011,"children":6013},{"className":6012},[],[6014],{"type":76,"value":6015},"static\u002Fimage_zh",{"type":70,"tag":111,"props":6017,"children":6018},{},[6019,6020,6026],{"type":76,"value":5955},{"type":70,"tag":173,"props":6021,"children":6023},{"className":6022},[],[6024],{"type":76,"value":6025},"docs\u002Fsidebars.js",{"type":76,"value":6027}," to root level",{"type":70,"tag":100,"props":6029,"children":6031},{"id":6030},"website-repository-structure",[6032],{"type":76,"value":6033},"Website Repository Structure",{"type":70,"tag":165,"props":6035,"children":6038},{"className":6036,"code":6037,"language":76},[5103],"seatunnel-website\u002F\n├── blog\u002F                          # Blog posts (EN)\n├── community\u002F                     # Community docs\n│   ├── contribution_guide\u002F        # Contribution guidelines\n│   │   ├── contribute.md\n│   │   ├── committer.md\n│   │   ├── code-review.md\n│   │   ├── release.md\n│   │   └── subscribe.md\n│   └── submit_guide\u002F             # Submission guidelines\n│       ├── document.md\n│       ├── license.md\n│       └── submit-code.md\n├── docs\u002F                          # Current version docs (synced from main repo)\n├── docusaurus.config.js           # Site configuration\n├── i18n\u002Fzh-CN\u002F                    # Chinese translations\n│   ├── docusaurus-plugin-content-blog\u002F\n│   ├── docusaurus-plugin-content-docs\u002F\n│   └── docusaurus-plugin-content-docs-community\u002F\n├── package.json\n├── sidebars.js                    # Doc sidebar config (synced)\n├── src\u002F\n│   ├── components\u002F\n│   ├── css\u002F\n│   ├── pages\u002F\n│   │   ├── home\u002F                  # Homepage\n│   │   ├── team\u002F                  # Team page (with Base64 avatars)\n│   │   ├── user\u002F                  # User showcase\n│   │   └── versions\u002F             # Version selector\n│   └── styles\u002F\n├── static\u002F                        # Static assets\n│   ├── doc\u002Fimage\u002F, image_en\u002F, image_zh\u002F\n│   ├── home\u002F, image\u002F, user\u002F\n│   └── js\u002Fgoogle_translate_init.js\n├── tools\u002F\n│   ├── build-docs.js              # Doc sync script\n│   ├── common.js                  # Shared constants\n│   ├── version.js                 # Version management\n│   ├── image-copy.js              # Image processing\n│   └── fetch-team-avatars.js      # Team avatar updater\n├── versioned_docs\u002F                # Historical version docs (20 versions: 1.x ~ 2.3.12)\n├── versioned_sidebars\u002F            # Historical sidebars\n├── versions.json                  # Version registry\n└── seatunnel_web_versions.json    # Web UI version registry\n",[6039],{"type":70,"tag":173,"props":6040,"children":6041},{"__ignoreMap":170},[6042],{"type":76,"value":6037},{"type":70,"tag":100,"props":6044,"children":6046},{"id":6045},"documentation-categories-per-version",[6047],{"type":76,"value":6048},"Documentation Categories (per version)",{"type":70,"tag":79,"props":6050,"children":6051},{},[6052],{"type":76,"value":6053},"Each version's docs contain:",{"type":70,"tag":107,"props":6055,"children":6056},{},[6057,6068,6079,6090,6148,6159,6170,6181,6192,6239],{"type":70,"tag":111,"props":6058,"children":6059},{},[6060,6066],{"type":70,"tag":173,"props":6061,"children":6063},{"className":6062},[],[6064],{"type":76,"value":6065},"about.md",{"type":76,"value":6067}," - Project overview",{"type":70,"tag":111,"props":6069,"children":6070},{},[6071,6077],{"type":70,"tag":173,"props":6072,"children":6074},{"className":6073},[],[6075],{"type":76,"value":6076},"command\u002F",{"type":76,"value":6078}," - CLI commands (e.g., connector-check)",{"type":70,"tag":111,"props":6080,"children":6081},{},[6082,6088],{"type":70,"tag":173,"props":6083,"children":6085},{"className":6084},[],[6086],{"type":76,"value":6087},"concept\u002F",{"type":76,"value":6089}," - Core concepts (config, schema-evolution, speed-limit, SQL config, event-listener)",{"type":70,"tag":111,"props":6091,"children":6092},{},[6093,6099,6101],{"type":70,"tag":173,"props":6094,"children":6096},{"className":6095},[],[6097],{"type":76,"value":6098},"connector-v2\u002F",{"type":76,"value":6100}," - Connector documentation\n",{"type":70,"tag":107,"props":6102,"children":6103},{},[6104,6115,6126,6137],{"type":70,"tag":111,"props":6105,"children":6106},{},[6107,6113],{"type":70,"tag":173,"props":6108,"children":6110},{"className":6109},[],[6111],{"type":76,"value":6112},"source\u002F",{"type":76,"value":6114}," - Source connector docs (100+ connectors)",{"type":70,"tag":111,"props":6116,"children":6117},{},[6118,6124],{"type":70,"tag":173,"props":6119,"children":6121},{"className":6120},[],[6122],{"type":76,"value":6123},"sink\u002F",{"type":76,"value":6125}," - Sink connector docs",{"type":70,"tag":111,"props":6127,"children":6128},{},[6129,6135],{"type":70,"tag":173,"props":6130,"children":6132},{"className":6131},[],[6133],{"type":76,"value":6134},"changelog\u002F",{"type":76,"value":6136}," - Per-connector changelogs",{"type":70,"tag":111,"props":6138,"children":6139},{},[6140,6146],{"type":70,"tag":173,"props":6141,"children":6143},{"className":6142},[],[6144],{"type":76,"value":6145},"formats\u002F",{"type":76,"value":6147}," - Data formats (Avro, Canal JSON, Debezium JSON, OGG JSON, Protobuf)",{"type":70,"tag":111,"props":6149,"children":6150},{},[6151,6157],{"type":70,"tag":173,"props":6152,"children":6154},{"className":6153},[],[6155],{"type":76,"value":6156},"contribution\u002F",{"type":76,"value":6158}," - Contributor guides",{"type":70,"tag":111,"props":6160,"children":6161},{},[6162,6168],{"type":70,"tag":173,"props":6163,"children":6165},{"className":6164},[],[6166],{"type":76,"value":6167},"faq.md",{"type":76,"value":6169}," - Frequently asked questions",{"type":70,"tag":111,"props":6171,"children":6172},{},[6173,6179],{"type":70,"tag":173,"props":6174,"children":6176},{"className":6175},[],[6177],{"type":76,"value":6178},"other-engine\u002F",{"type":76,"value":6180}," - Flink\u002FSpark engine specifics",{"type":70,"tag":111,"props":6182,"children":6183},{},[6184,6190],{"type":70,"tag":173,"props":6185,"children":6187},{"className":6186},[],[6188],{"type":76,"value":6189},"seatunnel-engine\u002F",{"type":76,"value":6191}," - Zeta engine docs + telemetry",{"type":70,"tag":111,"props":6193,"children":6194},{},[6195,6201,6203],{"type":70,"tag":173,"props":6196,"children":6198},{"className":6197},[],[6199],{"type":76,"value":6200},"start-v2\u002F",{"type":76,"value":6202}," - Getting started guides\n",{"type":70,"tag":107,"props":6204,"children":6205},{},[6206,6217,6228],{"type":70,"tag":111,"props":6207,"children":6208},{},[6209,6215],{"type":70,"tag":173,"props":6210,"children":6212},{"className":6211},[],[6213],{"type":76,"value":6214},"docker\u002F",{"type":76,"value":6216}," - Docker deployment",{"type":70,"tag":111,"props":6218,"children":6219},{},[6220,6226],{"type":70,"tag":173,"props":6221,"children":6223},{"className":6222},[],[6224],{"type":76,"value":6225},"kubernetes\u002F",{"type":76,"value":6227}," - K8s deployment",{"type":70,"tag":111,"props":6229,"children":6230},{},[6231,6237],{"type":70,"tag":173,"props":6232,"children":6234},{"className":6233},[],[6235],{"type":76,"value":6236},"locally\u002F",{"type":76,"value":6238}," - Local setup",{"type":70,"tag":111,"props":6240,"children":6241},{},[6242,6248],{"type":70,"tag":173,"props":6243,"children":6245},{"className":6244},[],[6246],{"type":76,"value":6247},"transform-v2\u002F",{"type":76,"value":6249}," - Transform documentation (SQL, etc.)",{"type":70,"tag":100,"props":6251,"children":6253},{"id":6252},"versioned-documentation",[6254],{"type":76,"value":6255},"Versioned Documentation",{"type":70,"tag":79,"props":6257,"children":6258},{},[6259,6261,6267,6269,6275,6299],{"type":76,"value":6260},"20 historical versions maintained: ",{"type":70,"tag":173,"props":6262,"children":6264},{"className":6263},[],[6265],{"type":76,"value":6266},"1.x",{"type":76,"value":6268},", ",{"type":70,"tag":173,"props":6270,"children":6272},{"className":6271},[],[6273],{"type":76,"value":6274},"2.1.0",{"type":70,"tag":6276,"props":6277,"children":6278},"del",{},[6279,6285,6286,6292,6293],{"type":70,"tag":173,"props":6280,"children":6282},{"className":6281},[],[6283],{"type":76,"value":6284},"2.1.3",{"type":76,"value":6268},{"type":70,"tag":173,"props":6287,"children":6289},{"className":6288},[],[6290],{"type":76,"value":6291},"2.2.0-beta",{"type":76,"value":6268},{"type":70,"tag":173,"props":6294,"children":6296},{"className":6295},[],[6297],{"type":76,"value":6298},"2.3.0-beta",{"type":70,"tag":173,"props":6300,"children":6302},{"className":6301},[],[6303],{"type":76,"value":6304},"2.3.12",{"type":70,"tag":79,"props":6306,"children":6307},{},[6308],{"type":76,"value":6309},"Total: ~3691 versioned doc files + ~1652 i18n files",{"type":70,"tag":100,"props":6311,"children":6313},{"id":6312},"website-development",[6314],{"type":76,"value":6315},"Website Development",{"type":70,"tag":165,"props":6317,"children":6319},{"className":167,"code":6318,"language":169,"meta":170,"style":170},"# Clone\ngit clone git@github.com:apache\u002Fseatunnel-website.git\ncd seatunnel-website\n\n# Sync docs from main repo\nnpm run sync\n# Or with SSH: export PROTOCOL_MODE=ssh && npm run sync\n\n# Install dependencies\nnpm install\n\n# Dev server (English)\nnpm run start\n\n# Dev server (Chinese)\nnpm run start-zh\n\n# Production build (needs ~10GB heap)\nnpm run build\n# Or faster parallel build\nnpm run build:fast\n\n# Serve built site\nnpm run serve\n",[6320],{"type":70,"tag":173,"props":6321,"children":6322},{"__ignoreMap":170},[6323,6331,6347,6359,6366,6374,6391,6399,6406,6414,6426,6433,6441,6457,6464,6472,6488,6495,6503,6519,6527,6543,6550,6558],{"type":70,"tag":177,"props":6324,"children":6325},{"class":179,"line":180},[6326],{"type":70,"tag":177,"props":6327,"children":6328},{"style":232},[6329],{"type":76,"value":6330},"# Clone\n",{"type":70,"tag":177,"props":6332,"children":6333},{"class":179,"line":201},[6334,6338,6342],{"type":70,"tag":177,"props":6335,"children":6336},{"style":184},[6337],{"type":76,"value":187},{"type":70,"tag":177,"props":6339,"children":6340},{"style":190},[6341],{"type":76,"value":193},{"type":70,"tag":177,"props":6343,"children":6344},{"style":190},[6345],{"type":76,"value":6346}," git@github.com:apache\u002Fseatunnel-website.git\n",{"type":70,"tag":177,"props":6348,"children":6349},{"class":179,"line":261},[6350,6354],{"type":70,"tag":177,"props":6351,"children":6352},{"style":205},[6353],{"type":76,"value":208},{"type":70,"tag":177,"props":6355,"children":6356},{"style":190},[6357],{"type":76,"value":6358}," seatunnel-website\n",{"type":70,"tag":177,"props":6360,"children":6361},{"class":179,"line":271},[6362],{"type":70,"tag":177,"props":6363,"children":6364},{"emptyLinePlaceholder":265},[6365],{"type":76,"value":268},{"type":70,"tag":177,"props":6367,"children":6368},{"class":179,"line":280},[6369],{"type":70,"tag":177,"props":6370,"children":6371},{"style":232},[6372],{"type":76,"value":6373},"# Sync docs from main repo\n",{"type":70,"tag":177,"props":6375,"children":6376},{"class":179,"line":29},[6377,6382,6386],{"type":70,"tag":177,"props":6378,"children":6379},{"style":184},[6380],{"type":76,"value":6381},"npm",{"type":70,"tag":177,"props":6383,"children":6384},{"style":190},[6385],{"type":76,"value":1745},{"type":70,"tag":177,"props":6387,"children":6388},{"style":190},[6389],{"type":76,"value":6390}," sync\n",{"type":70,"tag":177,"props":6392,"children":6393},{"class":179,"line":646},[6394],{"type":70,"tag":177,"props":6395,"children":6396},{"style":232},[6397],{"type":76,"value":6398},"# Or with SSH: export PROTOCOL_MODE=ssh && npm run sync\n",{"type":70,"tag":177,"props":6400,"children":6401},{"class":179,"line":655},[6402],{"type":70,"tag":177,"props":6403,"children":6404},{"emptyLinePlaceholder":265},[6405],{"type":76,"value":268},{"type":70,"tag":177,"props":6407,"children":6408},{"class":179,"line":664},[6409],{"type":70,"tag":177,"props":6410,"children":6411},{"style":232},[6412],{"type":76,"value":6413},"# Install dependencies\n",{"type":70,"tag":177,"props":6415,"children":6416},{"class":179,"line":673},[6417,6421],{"type":70,"tag":177,"props":6418,"children":6419},{"style":184},[6420],{"type":76,"value":6381},{"type":70,"tag":177,"props":6422,"children":6423},{"style":190},[6424],{"type":76,"value":6425}," install\n",{"type":70,"tag":177,"props":6427,"children":6428},{"class":179,"line":682},[6429],{"type":70,"tag":177,"props":6430,"children":6431},{"emptyLinePlaceholder":265},[6432],{"type":76,"value":268},{"type":70,"tag":177,"props":6434,"children":6435},{"class":179,"line":691},[6436],{"type":70,"tag":177,"props":6437,"children":6438},{"style":232},[6439],{"type":76,"value":6440},"# Dev server (English)\n",{"type":70,"tag":177,"props":6442,"children":6443},{"class":179,"line":700},[6444,6448,6452],{"type":70,"tag":177,"props":6445,"children":6446},{"style":184},[6447],{"type":76,"value":6381},{"type":70,"tag":177,"props":6449,"children":6450},{"style":190},[6451],{"type":76,"value":1745},{"type":70,"tag":177,"props":6453,"children":6454},{"style":190},[6455],{"type":76,"value":6456}," start\n",{"type":70,"tag":177,"props":6458,"children":6459},{"class":179,"line":709},[6460],{"type":70,"tag":177,"props":6461,"children":6462},{"emptyLinePlaceholder":265},[6463],{"type":76,"value":268},{"type":70,"tag":177,"props":6465,"children":6466},{"class":179,"line":718},[6467],{"type":70,"tag":177,"props":6468,"children":6469},{"style":232},[6470],{"type":76,"value":6471},"# Dev server (Chinese)\n",{"type":70,"tag":177,"props":6473,"children":6474},{"class":179,"line":727},[6475,6479,6483],{"type":70,"tag":177,"props":6476,"children":6477},{"style":184},[6478],{"type":76,"value":6381},{"type":70,"tag":177,"props":6480,"children":6481},{"style":190},[6482],{"type":76,"value":1745},{"type":70,"tag":177,"props":6484,"children":6485},{"style":190},[6486],{"type":76,"value":6487}," start-zh\n",{"type":70,"tag":177,"props":6489,"children":6490},{"class":179,"line":736},[6491],{"type":70,"tag":177,"props":6492,"children":6493},{"emptyLinePlaceholder":265},[6494],{"type":76,"value":268},{"type":70,"tag":177,"props":6496,"children":6497},{"class":179,"line":744},[6498],{"type":70,"tag":177,"props":6499,"children":6500},{"style":232},[6501],{"type":76,"value":6502},"# Production build (needs ~10GB heap)\n",{"type":70,"tag":177,"props":6504,"children":6505},{"class":179,"line":752},[6506,6510,6514],{"type":70,"tag":177,"props":6507,"children":6508},{"style":184},[6509],{"type":76,"value":6381},{"type":70,"tag":177,"props":6511,"children":6512},{"style":190},[6513],{"type":76,"value":1745},{"type":70,"tag":177,"props":6515,"children":6516},{"style":190},[6517],{"type":76,"value":6518}," build\n",{"type":70,"tag":177,"props":6520,"children":6521},{"class":179,"line":761},[6522],{"type":70,"tag":177,"props":6523,"children":6524},{"style":232},[6525],{"type":76,"value":6526},"# Or faster parallel build\n",{"type":70,"tag":177,"props":6528,"children":6529},{"class":179,"line":770},[6530,6534,6538],{"type":70,"tag":177,"props":6531,"children":6532},{"style":184},[6533],{"type":76,"value":6381},{"type":70,"tag":177,"props":6535,"children":6536},{"style":190},[6537],{"type":76,"value":1745},{"type":70,"tag":177,"props":6539,"children":6540},{"style":190},[6541],{"type":76,"value":6542}," build:fast\n",{"type":70,"tag":177,"props":6544,"children":6545},{"class":179,"line":779},[6546],{"type":70,"tag":177,"props":6547,"children":6548},{"emptyLinePlaceholder":265},[6549],{"type":76,"value":268},{"type":70,"tag":177,"props":6551,"children":6552},{"class":179,"line":787},[6553],{"type":70,"tag":177,"props":6554,"children":6555},{"style":232},[6556],{"type":76,"value":6557},"# Serve built site\n",{"type":70,"tag":177,"props":6559,"children":6560},{"class":179,"line":2377},[6561,6565,6569],{"type":70,"tag":177,"props":6562,"children":6563},{"style":184},[6564],{"type":76,"value":6381},{"type":70,"tag":177,"props":6566,"children":6567},{"style":190},[6568],{"type":76,"value":1745},{"type":70,"tag":177,"props":6570,"children":6571},{"style":190},[6572],{"type":76,"value":6573}," serve\n",{"type":70,"tag":100,"props":6575,"children":6577},{"id":6576},"adding-a-new-version",[6578],{"type":76,"value":6579},"Adding a New Version",{"type":70,"tag":165,"props":6581,"children":6583},{"className":167,"code":6582,"language":169,"meta":170,"style":170},"# 1. Create versioned snapshot\nnpm run version \u003Ctarget_version>\n\n# 2. Update download links\n# Edit src\u002Fpages\u002Fdownload\u002Fst_data.json\n",[6584],{"type":70,"tag":173,"props":6585,"children":6586},{"__ignoreMap":170},[6587,6595,6629,6636,6644],{"type":70,"tag":177,"props":6588,"children":6589},{"class":179,"line":180},[6590],{"type":70,"tag":177,"props":6591,"children":6592},{"style":232},[6593],{"type":76,"value":6594},"# 1. Create versioned snapshot\n",{"type":70,"tag":177,"props":6596,"children":6597},{"class":179,"line":201},[6598,6602,6606,6611,6615,6620,6625],{"type":70,"tag":177,"props":6599,"children":6600},{"style":184},[6601],{"type":76,"value":6381},{"type":70,"tag":177,"props":6603,"children":6604},{"style":190},[6605],{"type":76,"value":1745},{"type":70,"tag":177,"props":6607,"children":6608},{"style":190},[6609],{"type":76,"value":6610}," version",{"type":70,"tag":177,"props":6612,"children":6613},{"style":348},[6614],{"type":76,"value":3706},{"type":70,"tag":177,"props":6616,"children":6617},{"style":190},[6618],{"type":76,"value":6619},"target_versio",{"type":70,"tag":177,"props":6621,"children":6622},{"style":342},[6623],{"type":76,"value":6624},"n",{"type":70,"tag":177,"props":6626,"children":6627},{"style":348},[6628],{"type":76,"value":3721},{"type":70,"tag":177,"props":6630,"children":6631},{"class":179,"line":261},[6632],{"type":70,"tag":177,"props":6633,"children":6634},{"emptyLinePlaceholder":265},[6635],{"type":76,"value":268},{"type":70,"tag":177,"props":6637,"children":6638},{"class":179,"line":271},[6639],{"type":70,"tag":177,"props":6640,"children":6641},{"style":232},[6642],{"type":76,"value":6643},"# 2. Update download links\n",{"type":70,"tag":177,"props":6645,"children":6646},{"class":179,"line":280},[6647],{"type":70,"tag":177,"props":6648,"children":6649},{"style":232},[6650],{"type":76,"value":6651},"# Edit src\u002Fpages\u002Fdownload\u002Fst_data.json\n",{"type":70,"tag":100,"props":6653,"children":6655},{"id":6654},"branching-strategy",[6656],{"type":76,"value":6657},"Branching Strategy",{"type":70,"tag":2069,"props":6659,"children":6660},{},[6661,6677],{"type":70,"tag":2073,"props":6662,"children":6663},{},[6664],{"type":70,"tag":2077,"props":6665,"children":6666},{},[6667,6672],{"type":70,"tag":2081,"props":6668,"children":6669},{},[6670],{"type":76,"value":6671},"Branch",{"type":70,"tag":2081,"props":6673,"children":6674},{},[6675],{"type":76,"value":6676},"Purpose",{"type":70,"tag":2092,"props":6678,"children":6679},{},[6680,6697,6721],{"type":70,"tag":2077,"props":6681,"children":6682},{},[6683,6692],{"type":70,"tag":2099,"props":6684,"children":6685},{},[6686],{"type":70,"tag":173,"props":6687,"children":6689},{"className":6688},[],[6690],{"type":76,"value":6691},"main",{"type":70,"tag":2099,"props":6693,"children":6694},{},[6695],{"type":76,"value":6696},"Default development branch",{"type":70,"tag":2077,"props":6698,"children":6699},{},[6700,6709],{"type":70,"tag":2099,"props":6701,"children":6702},{},[6703],{"type":70,"tag":173,"props":6704,"children":6706},{"className":6705},[],[6707],{"type":76,"value":6708},"asf-site",{"type":70,"tag":2099,"props":6710,"children":6711},{},[6712,6714,6719],{"type":76,"value":6713},"Production (",{"type":70,"tag":320,"props":6715,"children":6717},{"href":5854,"rel":6716},[324],[6718],{"type":76,"value":5854},{"type":76,"value":6720},")",{"type":70,"tag":2077,"props":6722,"children":6723},{},[6724,6733],{"type":70,"tag":2099,"props":6725,"children":6726},{},[6727],{"type":70,"tag":173,"props":6728,"children":6730},{"className":6729},[],[6731],{"type":76,"value":6732},"asf-staging",{"type":70,"tag":2099,"props":6734,"children":6735},{},[6736,6738,6744],{"type":76,"value":6737},"Staging (",{"type":70,"tag":320,"props":6739,"children":6742},{"href":6740,"rel":6741},"https:\u002F\u002Fseatunnel.staged.apache.org",[324],[6743],{"type":76,"value":6740},{"type":76,"value":6720},{"type":70,"tag":100,"props":6746,"children":6748},{"id":6747},"cicd",[6749],{"type":76,"value":6750},"CI\u002FCD",{"type":70,"tag":79,"props":6752,"children":6753},{},[6754,6756,6762],{"type":76,"value":6755},"GitHub Actions workflow (",{"type":70,"tag":173,"props":6757,"children":6759},{"className":6758},[],[6760],{"type":76,"value":6761},".github\u002Fworkflows\u002Fdeploy.yml",{"type":76,"value":6763},"):",{"type":70,"tag":107,"props":6765,"children":6766},{},[6767,6786,6791],{"type":70,"tag":111,"props":6768,"children":6769},{},[6770,6772,6777,6779,6784],{"type":76,"value":6771},"Triggers: push to ",{"type":70,"tag":173,"props":6773,"children":6775},{"className":6774},[],[6776],{"type":76,"value":6691},{"type":76,"value":6778},", PRs to ",{"type":70,"tag":173,"props":6780,"children":6782},{"className":6781},[],[6783],{"type":76,"value":6691},{"type":76,"value":6785},", daily cron (5:00 AM UTC)",{"type":70,"tag":111,"props":6787,"children":6788},{},[6789],{"type":76,"value":6790},"Node.js 18.20.7",{"type":70,"tag":111,"props":6792,"children":6793},{},[6794,6796,6802,6804,6809,6810,6816,6818,6823],{"type":76,"value":6795},"Steps: ",{"type":70,"tag":173,"props":6797,"children":6799},{"className":6798},[],[6800],{"type":76,"value":6801},"npm install",{"type":76,"value":6803}," -> ",{"type":70,"tag":173,"props":6805,"children":6807},{"className":6806},[],[6808],{"type":76,"value":5912},{"type":76,"value":6803},{"type":70,"tag":173,"props":6811,"children":6813},{"className":6812},[],[6814],{"type":76,"value":6815},"npm run build",{"type":76,"value":6817}," -> deploy to ",{"type":70,"tag":173,"props":6819,"children":6821},{"className":6820},[],[6822],{"type":76,"value":6708},{"type":76,"value":6824}," branch",{"type":70,"tag":100,"props":6826,"children":6828},{"id":6827},"key-conventions",[6829],{"type":76,"value":6830},"Key Conventions",{"type":70,"tag":107,"props":6832,"children":6833},{},[6834,6853,6865,6876,6887],{"type":70,"tag":111,"props":6835,"children":6836},{},[6837,6839,6845,6846,6852],{"type":76,"value":6838},"Directory names: lowercase, underscore-separated, plural (e.g., ",{"type":70,"tag":173,"props":6840,"children":6842},{"className":6841},[],[6843],{"type":76,"value":6844},"scripts",{"type":76,"value":6268},{"type":70,"tag":173,"props":6847,"children":6849},{"className":6848},[],[6850],{"type":76,"value":6851},"components",{"type":76,"value":6720},{"type":70,"tag":111,"props":6854,"children":6855},{},[6856,6858,6864],{"type":76,"value":6857},"JS\u002Fstatic files: lowercase, dash-separated (e.g., ",{"type":70,"tag":173,"props":6859,"children":6861},{"className":6860},[],[6862],{"type":76,"value":6863},"render-dom.js",{"type":76,"value":6720},{"type":70,"tag":111,"props":6866,"children":6867},{},[6868,6870],{"type":76,"value":6869},"Images: stored under ",{"type":70,"tag":173,"props":6871,"children":6873},{"className":6872},[],[6874],{"type":76,"value":6875},"static\u002F{module_name}",{"type":70,"tag":111,"props":6877,"children":6878},{},[6879,6881],{"type":76,"value":6880},"Styles: placed in ",{"type":70,"tag":173,"props":6882,"children":6884},{"className":6883},[],[6885],{"type":76,"value":6886},"src\u002Fcss\u002F",{"type":70,"tag":111,"props":6888,"children":6889},{},[6890],{"type":76,"value":6891},"Most pages have \"Edit this page\" link pointing to GitHub source",{"type":70,"tag":866,"props":6893,"children":6894},{},[],{"type":70,"tag":93,"props":6896,"children":6898},{"id":6897},"development",[6899],{"type":76,"value":6900},"Development",{"type":70,"tag":100,"props":6902,"children":6904},{"id":6903},"project-architecture",[6905],{"type":76,"value":6906},"Project Architecture",{"type":70,"tag":79,"props":6908,"children":6909},{},[6910,6914],{"type":70,"tag":85,"props":6911,"children":6912},{},[6913],{"type":76,"value":888},{"type":76,"value":6915}," follows a modular architecture:",{"type":70,"tag":165,"props":6917,"children":6920},{"className":6918,"code":6919,"language":76},[5103],"seatunnel\u002F\n├── seatunnel-api\u002F              # Core APIs\n├── seatunnel-core\u002F             # Execution engine\n├── seatunnel-engines\u002F          # Engine implementations\n│   ├── seatunnel-engine-flink\u002F\n│   ├── seatunnel-engine-spark\u002F\n│   └── seatunnel-engine-zeta\u002F\n├── seatunnel-connectors\u002F       # 100+ connector implementations\n│   ├── seatunnel-connectors-*\u002F # One per connector type\n└── seatunnel-dist\u002F             # Distribution package\n",[6921],{"type":70,"tag":173,"props":6922,"children":6923},{"__ignoreMap":170},[6924],{"type":76,"value":6919},{"type":70,"tag":100,"props":6926,"children":6928},{"id":6927},"building-from-source",[6929],{"type":76,"value":6930},"Building from Source",{"type":70,"tag":158,"props":6932,"children":6934},{"id":6933},"full-build",[6935],{"type":76,"value":6936},"Full Build",{"type":70,"tag":165,"props":6938,"children":6940},{"className":167,"code":6939,"language":169,"meta":170,"style":170},"# Clone repository\ngit clone https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel.git\ncd seatunnel\n\n# Build all modules\nmvn clean install -DskipTests\n\n# Build with tests (slower)\nmvn clean install\n",[6941],{"type":70,"tag":173,"props":6942,"children":6943},{"__ignoreMap":170},[6944,6952,6967,6978,6985,6993,7012,7019,7027],{"type":70,"tag":177,"props":6945,"children":6946},{"class":179,"line":180},[6947],{"type":70,"tag":177,"props":6948,"children":6949},{"style":232},[6950],{"type":76,"value":6951},"# Clone repository\n",{"type":70,"tag":177,"props":6953,"children":6954},{"class":179,"line":201},[6955,6959,6963],{"type":70,"tag":177,"props":6956,"children":6957},{"style":184},[6958],{"type":76,"value":187},{"type":70,"tag":177,"props":6960,"children":6961},{"style":190},[6962],{"type":76,"value":193},{"type":70,"tag":177,"props":6964,"children":6965},{"style":190},[6966],{"type":76,"value":198},{"type":70,"tag":177,"props":6968,"children":6969},{"class":179,"line":261},[6970,6974],{"type":70,"tag":177,"props":6971,"children":6972},{"style":205},[6973],{"type":76,"value":208},{"type":70,"tag":177,"props":6975,"children":6976},{"style":190},[6977],{"type":76,"value":213},{"type":70,"tag":177,"props":6979,"children":6980},{"class":179,"line":271},[6981],{"type":70,"tag":177,"props":6982,"children":6983},{"emptyLinePlaceholder":265},[6984],{"type":76,"value":268},{"type":70,"tag":177,"props":6986,"children":6987},{"class":179,"line":280},[6988],{"type":70,"tag":177,"props":6989,"children":6990},{"style":232},[6991],{"type":76,"value":6992},"# Build all modules\n",{"type":70,"tag":177,"props":6994,"children":6995},{"class":179,"line":29},[6996,7000,7004,7008],{"type":70,"tag":177,"props":6997,"children":6998},{"style":184},[6999],{"type":76,"value":243},{"type":70,"tag":177,"props":7001,"children":7002},{"style":190},[7003],{"type":76,"value":248},{"type":70,"tag":177,"props":7005,"children":7006},{"style":190},[7007],{"type":76,"value":253},{"type":70,"tag":177,"props":7009,"children":7010},{"style":190},[7011],{"type":76,"value":258},{"type":70,"tag":177,"props":7013,"children":7014},{"class":179,"line":646},[7015],{"type":70,"tag":177,"props":7016,"children":7017},{"emptyLinePlaceholder":265},[7018],{"type":76,"value":268},{"type":70,"tag":177,"props":7020,"children":7021},{"class":179,"line":655},[7022],{"type":70,"tag":177,"props":7023,"children":7024},{"style":232},[7025],{"type":76,"value":7026},"# Build with tests (slower)\n",{"type":70,"tag":177,"props":7028,"children":7029},{"class":179,"line":664},[7030,7034,7038],{"type":70,"tag":177,"props":7031,"children":7032},{"style":184},[7033],{"type":76,"value":243},{"type":70,"tag":177,"props":7035,"children":7036},{"style":190},[7037],{"type":76,"value":248},{"type":70,"tag":177,"props":7039,"children":7040},{"style":190},[7041],{"type":76,"value":6425},{"type":70,"tag":158,"props":7043,"children":7045},{"id":7044},"build-specific-module",[7046],{"type":76,"value":7047},"Build Specific Module",{"type":70,"tag":165,"props":7049,"children":7051},{"className":167,"code":7050,"language":169,"meta":170,"style":170},"# Build only Kafka connector\nmvn clean install -pl seatunnel-connectors\u002Fseatunnel-connectors-seatunnel-kafka -DskipTests\n\n# Build only Flink engine\nmvn clean install -pl seatunnel-engines\u002Fseatunnel-engine-flink -DskipTests\n",[7052],{"type":70,"tag":173,"props":7053,"children":7054},{"__ignoreMap":170},[7055,7063,7091,7098,7106],{"type":70,"tag":177,"props":7056,"children":7057},{"class":179,"line":180},[7058],{"type":70,"tag":177,"props":7059,"children":7060},{"style":232},[7061],{"type":76,"value":7062},"# Build only Kafka connector\n",{"type":70,"tag":177,"props":7064,"children":7065},{"class":179,"line":201},[7066,7070,7074,7078,7082,7087],{"type":70,"tag":177,"props":7067,"children":7068},{"style":184},[7069],{"type":76,"value":243},{"type":70,"tag":177,"props":7071,"children":7072},{"style":190},[7073],{"type":76,"value":248},{"type":70,"tag":177,"props":7075,"children":7076},{"style":190},[7077],{"type":76,"value":253},{"type":70,"tag":177,"props":7079,"children":7080},{"style":190},[7081],{"type":76,"value":298},{"type":70,"tag":177,"props":7083,"children":7084},{"style":190},[7085],{"type":76,"value":7086}," seatunnel-connectors\u002Fseatunnel-connectors-seatunnel-kafka",{"type":70,"tag":177,"props":7088,"children":7089},{"style":190},[7090],{"type":76,"value":258},{"type":70,"tag":177,"props":7092,"children":7093},{"class":179,"line":261},[7094],{"type":70,"tag":177,"props":7095,"children":7096},{"emptyLinePlaceholder":265},[7097],{"type":76,"value":268},{"type":70,"tag":177,"props":7099,"children":7100},{"class":179,"line":271},[7101],{"type":70,"tag":177,"props":7102,"children":7103},{"style":232},[7104],{"type":76,"value":7105},"# Build only Flink engine\n",{"type":70,"tag":177,"props":7107,"children":7108},{"class":179,"line":280},[7109,7113,7117,7121,7125,7130],{"type":70,"tag":177,"props":7110,"children":7111},{"style":184},[7112],{"type":76,"value":243},{"type":70,"tag":177,"props":7114,"children":7115},{"style":190},[7116],{"type":76,"value":248},{"type":70,"tag":177,"props":7118,"children":7119},{"style":190},[7120],{"type":76,"value":253},{"type":70,"tag":177,"props":7122,"children":7123},{"style":190},[7124],{"type":76,"value":298},{"type":70,"tag":177,"props":7126,"children":7127},{"style":190},[7128],{"type":76,"value":7129}," seatunnel-engines\u002Fseatunnel-engine-flink",{"type":70,"tag":177,"props":7131,"children":7132},{"style":190},[7133],{"type":76,"value":258},{"type":70,"tag":158,"props":7135,"children":7137},{"id":7136},"build-distribution",[7138],{"type":76,"value":7139},"Build Distribution",{"type":70,"tag":165,"props":7141,"children":7143},{"className":167,"code":7142,"language":169,"meta":170,"style":170},"# Create binary distribution\nmvn clean install -DskipTests\ncd seatunnel-dist\ntar -tzf target\u002Fapache-seatunnel-*-bin.tar.gz | head\n",[7144],{"type":70,"tag":173,"props":7145,"children":7146},{"__ignoreMap":170},[7147,7155,7174,7186],{"type":70,"tag":177,"props":7148,"children":7149},{"class":179,"line":180},[7150],{"type":70,"tag":177,"props":7151,"children":7152},{"style":232},[7153],{"type":76,"value":7154},"# Create binary distribution\n",{"type":70,"tag":177,"props":7156,"children":7157},{"class":179,"line":201},[7158,7162,7166,7170],{"type":70,"tag":177,"props":7159,"children":7160},{"style":184},[7161],{"type":76,"value":243},{"type":70,"tag":177,"props":7163,"children":7164},{"style":190},[7165],{"type":76,"value":248},{"type":70,"tag":177,"props":7167,"children":7168},{"style":190},[7169],{"type":76,"value":253},{"type":70,"tag":177,"props":7171,"children":7172},{"style":190},[7173],{"type":76,"value":258},{"type":70,"tag":177,"props":7175,"children":7176},{"class":179,"line":261},[7177,7181],{"type":70,"tag":177,"props":7178,"children":7179},{"style":205},[7180],{"type":76,"value":208},{"type":70,"tag":177,"props":7182,"children":7183},{"style":190},[7184],{"type":76,"value":7185}," seatunnel-dist\n",{"type":70,"tag":177,"props":7187,"children":7188},{"class":179,"line":271},[7189,7193,7198,7203,7207,7212,7217],{"type":70,"tag":177,"props":7190,"children":7191},{"style":184},[7192],{"type":76,"value":413},{"type":70,"tag":177,"props":7194,"children":7195},{"style":190},[7196],{"type":76,"value":7197}," -tzf",{"type":70,"tag":177,"props":7199,"children":7200},{"style":190},[7201],{"type":76,"value":7202}," target\u002Fapache-seatunnel-",{"type":70,"tag":177,"props":7204,"children":7205},{"style":342},[7206],{"type":76,"value":1643},{"type":70,"tag":177,"props":7208,"children":7209},{"style":190},[7210],{"type":76,"value":7211},"-bin.tar.gz",{"type":70,"tag":177,"props":7213,"children":7214},{"style":348},[7215],{"type":76,"value":7216}," |",{"type":70,"tag":177,"props":7218,"children":7219},{"style":184},[7220],{"type":76,"value":7221}," head\n",{"type":70,"tag":100,"props":7223,"children":7225},{"id":7224},"running-tests",[7226],{"type":76,"value":7227},"Running Tests",{"type":70,"tag":158,"props":7229,"children":7231},{"id":7230},"unit-tests",[7232],{"type":76,"value":7233},"Unit Tests",{"type":70,"tag":165,"props":7235,"children":7237},{"className":167,"code":7236,"language":169,"meta":170,"style":170},"# Run all tests\nmvn test\n\n# Run specific test class\nmvn test -Dtest=MySqlConnectorTest\n\n# Run with coverage\nmvn test jacoco:report\n",[7238],{"type":70,"tag":173,"props":7239,"children":7240},{"__ignoreMap":170},[7241,7249,7261,7268,7276,7293,7300,7308],{"type":70,"tag":177,"props":7242,"children":7243},{"class":179,"line":180},[7244],{"type":70,"tag":177,"props":7245,"children":7246},{"style":232},[7247],{"type":76,"value":7248},"# Run all tests\n",{"type":70,"tag":177,"props":7250,"children":7251},{"class":179,"line":201},[7252,7256],{"type":70,"tag":177,"props":7253,"children":7254},{"style":184},[7255],{"type":76,"value":243},{"type":70,"tag":177,"props":7257,"children":7258},{"style":190},[7259],{"type":76,"value":7260}," test\n",{"type":70,"tag":177,"props":7262,"children":7263},{"class":179,"line":261},[7264],{"type":70,"tag":177,"props":7265,"children":7266},{"emptyLinePlaceholder":265},[7267],{"type":76,"value":268},{"type":70,"tag":177,"props":7269,"children":7270},{"class":179,"line":271},[7271],{"type":70,"tag":177,"props":7272,"children":7273},{"style":232},[7274],{"type":76,"value":7275},"# Run specific test class\n",{"type":70,"tag":177,"props":7277,"children":7278},{"class":179,"line":280},[7279,7283,7288],{"type":70,"tag":177,"props":7280,"children":7281},{"style":184},[7282],{"type":76,"value":243},{"type":70,"tag":177,"props":7284,"children":7285},{"style":190},[7286],{"type":76,"value":7287}," test",{"type":70,"tag":177,"props":7289,"children":7290},{"style":190},[7291],{"type":76,"value":7292}," -Dtest=MySqlConnectorTest\n",{"type":70,"tag":177,"props":7294,"children":7295},{"class":179,"line":29},[7296],{"type":70,"tag":177,"props":7297,"children":7298},{"emptyLinePlaceholder":265},[7299],{"type":76,"value":268},{"type":70,"tag":177,"props":7301,"children":7302},{"class":179,"line":646},[7303],{"type":70,"tag":177,"props":7304,"children":7305},{"style":232},[7306],{"type":76,"value":7307},"# Run with coverage\n",{"type":70,"tag":177,"props":7309,"children":7310},{"class":179,"line":655},[7311,7315,7319],{"type":70,"tag":177,"props":7312,"children":7313},{"style":184},[7314],{"type":76,"value":243},{"type":70,"tag":177,"props":7316,"children":7317},{"style":190},[7318],{"type":76,"value":7287},{"type":70,"tag":177,"props":7320,"children":7321},{"style":190},[7322],{"type":76,"value":7323}," jacoco:report\n",{"type":70,"tag":158,"props":7325,"children":7327},{"id":7326},"integration-tests",[7328],{"type":76,"value":7329},"Integration Tests",{"type":70,"tag":165,"props":7331,"children":7333},{"className":167,"code":7332,"language":169,"meta":170,"style":170},"# Run integration tests\nmvn verify\n\n# Run with Docker containers\nmvn verify -Pintegration-tests\n",[7334],{"type":70,"tag":173,"props":7335,"children":7336},{"__ignoreMap":170},[7337,7345,7357,7364,7372],{"type":70,"tag":177,"props":7338,"children":7339},{"class":179,"line":180},[7340],{"type":70,"tag":177,"props":7341,"children":7342},{"style":232},[7343],{"type":76,"value":7344},"# Run integration tests\n",{"type":70,"tag":177,"props":7346,"children":7347},{"class":179,"line":201},[7348,7352],{"type":70,"tag":177,"props":7349,"children":7350},{"style":184},[7351],{"type":76,"value":243},{"type":70,"tag":177,"props":7353,"children":7354},{"style":190},[7355],{"type":76,"value":7356}," verify\n",{"type":70,"tag":177,"props":7358,"children":7359},{"class":179,"line":261},[7360],{"type":70,"tag":177,"props":7361,"children":7362},{"emptyLinePlaceholder":265},[7363],{"type":76,"value":268},{"type":70,"tag":177,"props":7365,"children":7366},{"class":179,"line":271},[7367],{"type":70,"tag":177,"props":7368,"children":7369},{"style":232},[7370],{"type":76,"value":7371},"# Run with Docker containers\n",{"type":70,"tag":177,"props":7373,"children":7374},{"class":179,"line":280},[7375,7379,7384],{"type":70,"tag":177,"props":7376,"children":7377},{"style":184},[7378],{"type":76,"value":243},{"type":70,"tag":177,"props":7380,"children":7381},{"style":190},[7382],{"type":76,"value":7383}," verify",{"type":70,"tag":177,"props":7385,"children":7386},{"style":190},[7387],{"type":76,"value":7388}," -Pintegration-tests\n",{"type":70,"tag":100,"props":7390,"children":7392},{"id":7391},"development-setup",[7393],{"type":76,"value":7394},"Development Setup",{"type":70,"tag":158,"props":7396,"children":7398},{"id":7397},"ide-configuration-intellij-idea",[7399],{"type":76,"value":7400},"IDE Configuration (IntelliJ IDEA)",{"type":70,"tag":951,"props":7402,"children":7403},{},[7404,7425,7446,7467],{"type":70,"tag":111,"props":7405,"children":7406},{},[7407,7412],{"type":70,"tag":85,"props":7408,"children":7409},{},[7410],{"type":76,"value":7411},"Import Project",{"type":70,"tag":107,"props":7413,"children":7414},{},[7415,7420],{"type":70,"tag":111,"props":7416,"children":7417},{},[7418],{"type":76,"value":7419},"File → Open → Select seatunnel directory",{"type":70,"tag":111,"props":7421,"children":7422},{},[7423],{"type":76,"value":7424},"Choose Maven as build system",{"type":70,"tag":111,"props":7426,"children":7427},{},[7428,7433],{"type":70,"tag":85,"props":7429,"children":7430},{},[7431],{"type":76,"value":7432},"Configure JDK",{"type":70,"tag":107,"props":7434,"children":7435},{},[7436,7441],{"type":70,"tag":111,"props":7437,"children":7438},{},[7439],{"type":76,"value":7440},"Project Settings → Project → JDK",{"type":70,"tag":111,"props":7442,"children":7443},{},[7444],{"type":76,"value":7445},"Select JDK 1.8 or higher",{"type":70,"tag":111,"props":7447,"children":7448},{},[7449,7454],{"type":70,"tag":85,"props":7450,"children":7451},{},[7452],{"type":76,"value":7453},"Enable Annotation Processing",{"type":70,"tag":107,"props":7455,"children":7456},{},[7457,7462],{"type":70,"tag":111,"props":7458,"children":7459},{},[7460],{"type":76,"value":7461},"Project Settings → Build → Compiler → Annotation Processors",{"type":70,"tag":111,"props":7463,"children":7464},{},[7465],{"type":76,"value":7466},"Enable annotation processing",{"type":70,"tag":111,"props":7468,"children":7469},{},[7470,7475],{"type":70,"tag":85,"props":7471,"children":7472},{},[7473],{"type":76,"value":7474},"Run Configuration",{"type":70,"tag":107,"props":7476,"children":7477},{},[7478,7483,7488],{"type":70,"tag":111,"props":7479,"children":7480},{},[7481],{"type":76,"value":7482},"Run → Edit Configurations",{"type":70,"tag":111,"props":7484,"children":7485},{},[7486],{"type":76,"value":7487},"Add new \"Application\" configuration",{"type":70,"tag":111,"props":7489,"children":7490},{},[7491,7493],{"type":76,"value":7492},"Set main class: ",{"type":70,"tag":173,"props":7494,"children":7496},{"className":7495},[],[7497],{"type":76,"value":7498},"org.apache.seatunnel.core.starter.command.CommandExecuteRunner",{"type":70,"tag":158,"props":7500,"children":7502},{"id":7501},"code-style",[7503],{"type":76,"value":7504},"Code Style",{"type":70,"tag":79,"props":7506,"children":7507},{},[7508],{"type":76,"value":7509},"SeaTunnel follows Apache project conventions:",{"type":70,"tag":107,"props":7511,"children":7512},{},[7513,7518,7523,7528],{"type":70,"tag":111,"props":7514,"children":7515},{},[7516],{"type":76,"value":7517},"4-space indentation (not tabs)",{"type":70,"tag":111,"props":7519,"children":7520},{},[7521],{"type":76,"value":7522},"Line length max 120 characters",{"type":70,"tag":111,"props":7524,"children":7525},{},[7526],{"type":76,"value":7527},"Standard Java naming conventions",{"type":70,"tag":111,"props":7529,"children":7530},{},[7531],{"type":76,"value":7532},"Organize imports alphabetically",{"type":70,"tag":79,"props":7534,"children":7535},{},[7536,7538,7544],{"type":76,"value":7537},"Use the provided ",{"type":70,"tag":173,"props":7539,"children":7541},{"className":7540},[],[7542],{"type":76,"value":7543},".editorconfig",{"type":76,"value":5441},{"type":70,"tag":165,"props":7546,"children":7548},{"className":167,"code":7547,"language":169,"meta":170,"style":170},"# Install EditorConfig plugin (IntelliJ)\n# Then your IDE will auto-format code\n",[7549],{"type":70,"tag":173,"props":7550,"children":7551},{"__ignoreMap":170},[7552,7560],{"type":70,"tag":177,"props":7553,"children":7554},{"class":179,"line":180},[7555],{"type":70,"tag":177,"props":7556,"children":7557},{"style":232},[7558],{"type":76,"value":7559},"# Install EditorConfig plugin (IntelliJ)\n",{"type":70,"tag":177,"props":7561,"children":7562},{"class":179,"line":201},[7563],{"type":70,"tag":177,"props":7564,"children":7565},{"style":232},[7566],{"type":76,"value":7567},"# Then your IDE will auto-format code\n",{"type":70,"tag":100,"props":7569,"children":7571},{"id":7570},"creating-custom-connectors",[7572],{"type":76,"value":7573},"Creating Custom Connectors",{"type":70,"tag":158,"props":7575,"children":7577},{"id":7576},"_1-extend-seconnector-interface",[7578],{"type":76,"value":7579},"1. Extend SeConnector Interface",{"type":70,"tag":165,"props":7581,"children":7584},{"className":7582,"code":7583,"language":59,"meta":170,"style":170},"language-java shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import org.apache.seatunnel.api.source.SeSource;\nimport org.apache.seatunnel.api.table.catalog.Table;\n\npublic class CustomSource extends SeSource {\n    @Override\n    public String getPluginName() {\n        return \"Custom\";\n    }\n\n    @Override\n    public void validate() {\n        \u002F\u002F Validation logic\n    }\n\n    @Override\n    public ResultSet read(Boundedness boundedness) {\n        \u002F\u002F Implementation\n    }\n}\n",[7585],{"type":70,"tag":173,"props":7586,"children":7587},{"__ignoreMap":170},[7588,7596,7604,7611,7619,7627,7635,7643,7650,7657,7664,7672,7680,7687,7694,7701,7709,7717,7724],{"type":70,"tag":177,"props":7589,"children":7590},{"class":179,"line":180},[7591],{"type":70,"tag":177,"props":7592,"children":7593},{},[7594],{"type":76,"value":7595},"import org.apache.seatunnel.api.source.SeSource;\n",{"type":70,"tag":177,"props":7597,"children":7598},{"class":179,"line":201},[7599],{"type":70,"tag":177,"props":7600,"children":7601},{},[7602],{"type":76,"value":7603},"import org.apache.seatunnel.api.table.catalog.Table;\n",{"type":70,"tag":177,"props":7605,"children":7606},{"class":179,"line":261},[7607],{"type":70,"tag":177,"props":7608,"children":7609},{"emptyLinePlaceholder":265},[7610],{"type":76,"value":268},{"type":70,"tag":177,"props":7612,"children":7613},{"class":179,"line":271},[7614],{"type":70,"tag":177,"props":7615,"children":7616},{},[7617],{"type":76,"value":7618},"public class CustomSource extends SeSource {\n",{"type":70,"tag":177,"props":7620,"children":7621},{"class":179,"line":280},[7622],{"type":70,"tag":177,"props":7623,"children":7624},{},[7625],{"type":76,"value":7626},"    @Override\n",{"type":70,"tag":177,"props":7628,"children":7629},{"class":179,"line":29},[7630],{"type":70,"tag":177,"props":7631,"children":7632},{},[7633],{"type":76,"value":7634},"    public String getPluginName() {\n",{"type":70,"tag":177,"props":7636,"children":7637},{"class":179,"line":646},[7638],{"type":70,"tag":177,"props":7639,"children":7640},{},[7641],{"type":76,"value":7642},"        return \"Custom\";\n",{"type":70,"tag":177,"props":7644,"children":7645},{"class":179,"line":655},[7646],{"type":70,"tag":177,"props":7647,"children":7648},{},[7649],{"type":76,"value":724},{"type":70,"tag":177,"props":7651,"children":7652},{"class":179,"line":664},[7653],{"type":70,"tag":177,"props":7654,"children":7655},{"emptyLinePlaceholder":265},[7656],{"type":76,"value":268},{"type":70,"tag":177,"props":7658,"children":7659},{"class":179,"line":673},[7660],{"type":70,"tag":177,"props":7661,"children":7662},{},[7663],{"type":76,"value":7626},{"type":70,"tag":177,"props":7665,"children":7666},{"class":179,"line":682},[7667],{"type":70,"tag":177,"props":7668,"children":7669},{},[7670],{"type":76,"value":7671},"    public void validate() {\n",{"type":70,"tag":177,"props":7673,"children":7674},{"class":179,"line":691},[7675],{"type":70,"tag":177,"props":7676,"children":7677},{},[7678],{"type":76,"value":7679},"        \u002F\u002F Validation logic\n",{"type":70,"tag":177,"props":7681,"children":7682},{"class":179,"line":700},[7683],{"type":70,"tag":177,"props":7684,"children":7685},{},[7686],{"type":76,"value":724},{"type":70,"tag":177,"props":7688,"children":7689},{"class":179,"line":709},[7690],{"type":70,"tag":177,"props":7691,"children":7692},{"emptyLinePlaceholder":265},[7693],{"type":76,"value":268},{"type":70,"tag":177,"props":7695,"children":7696},{"class":179,"line":718},[7697],{"type":70,"tag":177,"props":7698,"children":7699},{},[7700],{"type":76,"value":7626},{"type":70,"tag":177,"props":7702,"children":7703},{"class":179,"line":727},[7704],{"type":70,"tag":177,"props":7705,"children":7706},{},[7707],{"type":76,"value":7708},"    public ResultSet read(Boundedness boundedness) {\n",{"type":70,"tag":177,"props":7710,"children":7711},{"class":179,"line":736},[7712],{"type":70,"tag":177,"props":7713,"children":7714},{},[7715],{"type":76,"value":7716},"        \u002F\u002F Implementation\n",{"type":70,"tag":177,"props":7718,"children":7719},{"class":179,"line":744},[7720],{"type":70,"tag":177,"props":7721,"children":7722},{},[7723],{"type":76,"value":724},{"type":70,"tag":177,"props":7725,"children":7726},{"class":179,"line":752},[7727],{"type":70,"tag":177,"props":7728,"children":7729},{},[7730],{"type":76,"value":463},{"type":70,"tag":158,"props":7732,"children":7734},{"id":7733},"_2-create-configuration-class",[7735],{"type":76,"value":7736},"2. Create Configuration Class",{"type":70,"tag":165,"props":7738,"children":7740},{"className":7582,"code":7739,"language":59,"meta":170,"style":170},"import org.apache.seatunnel.api.configuration.Option;\nimport org.apache.seatunnel.api.configuration.Options;\n\npublic class CustomSourceOptions {\n    public static final Option\u003CString> HOST =\n        Options.key(\"host\")\n            .stringType()\n            .noDefaultValue()\n            .withDescription(\"Source hostname\");\n\n    public static final Option\u003CInteger> PORT =\n        Options.key(\"port\")\n            .intType()\n            .defaultValue(9200)\n            .withDescription(\"Source port\");\n}\n",[7741],{"type":70,"tag":173,"props":7742,"children":7743},{"__ignoreMap":170},[7744,7752,7760,7767,7775,7783,7791,7799,7807,7815,7822,7830,7838,7846,7854,7862],{"type":70,"tag":177,"props":7745,"children":7746},{"class":179,"line":180},[7747],{"type":70,"tag":177,"props":7748,"children":7749},{},[7750],{"type":76,"value":7751},"import org.apache.seatunnel.api.configuration.Option;\n",{"type":70,"tag":177,"props":7753,"children":7754},{"class":179,"line":201},[7755],{"type":70,"tag":177,"props":7756,"children":7757},{},[7758],{"type":76,"value":7759},"import org.apache.seatunnel.api.configuration.Options;\n",{"type":70,"tag":177,"props":7761,"children":7762},{"class":179,"line":261},[7763],{"type":70,"tag":177,"props":7764,"children":7765},{"emptyLinePlaceholder":265},[7766],{"type":76,"value":268},{"type":70,"tag":177,"props":7768,"children":7769},{"class":179,"line":271},[7770],{"type":70,"tag":177,"props":7771,"children":7772},{},[7773],{"type":76,"value":7774},"public class CustomSourceOptions {\n",{"type":70,"tag":177,"props":7776,"children":7777},{"class":179,"line":280},[7778],{"type":70,"tag":177,"props":7779,"children":7780},{},[7781],{"type":76,"value":7782},"    public static final Option\u003CString> HOST =\n",{"type":70,"tag":177,"props":7784,"children":7785},{"class":179,"line":29},[7786],{"type":70,"tag":177,"props":7787,"children":7788},{},[7789],{"type":76,"value":7790},"        Options.key(\"host\")\n",{"type":70,"tag":177,"props":7792,"children":7793},{"class":179,"line":646},[7794],{"type":70,"tag":177,"props":7795,"children":7796},{},[7797],{"type":76,"value":7798},"            .stringType()\n",{"type":70,"tag":177,"props":7800,"children":7801},{"class":179,"line":655},[7802],{"type":70,"tag":177,"props":7803,"children":7804},{},[7805],{"type":76,"value":7806},"            .noDefaultValue()\n",{"type":70,"tag":177,"props":7808,"children":7809},{"class":179,"line":664},[7810],{"type":70,"tag":177,"props":7811,"children":7812},{},[7813],{"type":76,"value":7814},"            .withDescription(\"Source hostname\");\n",{"type":70,"tag":177,"props":7816,"children":7817},{"class":179,"line":673},[7818],{"type":70,"tag":177,"props":7819,"children":7820},{"emptyLinePlaceholder":265},[7821],{"type":76,"value":268},{"type":70,"tag":177,"props":7823,"children":7824},{"class":179,"line":682},[7825],{"type":70,"tag":177,"props":7826,"children":7827},{},[7828],{"type":76,"value":7829},"    public static final Option\u003CInteger> PORT =\n",{"type":70,"tag":177,"props":7831,"children":7832},{"class":179,"line":691},[7833],{"type":70,"tag":177,"props":7834,"children":7835},{},[7836],{"type":76,"value":7837},"        Options.key(\"port\")\n",{"type":70,"tag":177,"props":7839,"children":7840},{"class":179,"line":700},[7841],{"type":70,"tag":177,"props":7842,"children":7843},{},[7844],{"type":76,"value":7845},"            .intType()\n",{"type":70,"tag":177,"props":7847,"children":7848},{"class":179,"line":709},[7849],{"type":70,"tag":177,"props":7850,"children":7851},{},[7852],{"type":76,"value":7853},"            .defaultValue(9200)\n",{"type":70,"tag":177,"props":7855,"children":7856},{"class":179,"line":718},[7857],{"type":70,"tag":177,"props":7858,"children":7859},{},[7860],{"type":76,"value":7861},"            .withDescription(\"Source port\");\n",{"type":70,"tag":177,"props":7863,"children":7864},{"class":179,"line":727},[7865],{"type":70,"tag":177,"props":7866,"children":7867},{},[7868],{"type":76,"value":463},{"type":70,"tag":158,"props":7870,"children":7872},{"id":7871},"_3-register-connector",[7873],{"type":76,"value":7874},"3. Register Connector",{"type":70,"tag":165,"props":7876,"children":7879},{"className":7877,"code":7878,"language":76},[5103],"META-INF\u002Fservices\u002Forg.apache.seatunnel.api.source.SeSource\n",[7880],{"type":70,"tag":173,"props":7881,"children":7882},{"__ignoreMap":170},[7883],{"type":76,"value":7878},{"type":70,"tag":100,"props":7885,"children":7887},{"id":7886},"contributing-guide",[7888],{"type":76,"value":7889},"Contributing Guide",{"type":70,"tag":951,"props":7891,"children":7892},{},[7893,7960,7997,8023,8105,8136],{"type":70,"tag":111,"props":7894,"children":7895},{},[7896,7901],{"type":70,"tag":85,"props":7897,"children":7898},{},[7899],{"type":76,"value":7900},"Fork and Clone",{"type":70,"tag":165,"props":7902,"children":7904},{"className":167,"code":7903,"language":169,"meta":170,"style":170},"git clone https:\u002F\u002Fgithub.com\u002FYOUR_USERNAME\u002Fseatunnel.git\ncd seatunnel\ngit remote add upstream https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel.git\n",[7905],{"type":70,"tag":173,"props":7906,"children":7907},{"__ignoreMap":170},[7908,7924,7935],{"type":70,"tag":177,"props":7909,"children":7910},{"class":179,"line":180},[7911,7915,7919],{"type":70,"tag":177,"props":7912,"children":7913},{"style":184},[7914],{"type":76,"value":187},{"type":70,"tag":177,"props":7916,"children":7917},{"style":190},[7918],{"type":76,"value":193},{"type":70,"tag":177,"props":7920,"children":7921},{"style":190},[7922],{"type":76,"value":7923}," https:\u002F\u002Fgithub.com\u002FYOUR_USERNAME\u002Fseatunnel.git\n",{"type":70,"tag":177,"props":7925,"children":7926},{"class":179,"line":201},[7927,7931],{"type":70,"tag":177,"props":7928,"children":7929},{"style":205},[7930],{"type":76,"value":208},{"type":70,"tag":177,"props":7932,"children":7933},{"style":190},[7934],{"type":76,"value":213},{"type":70,"tag":177,"props":7936,"children":7937},{"class":179,"line":261},[7938,7942,7946,7951,7956],{"type":70,"tag":177,"props":7939,"children":7940},{"style":184},[7941],{"type":76,"value":187},{"type":70,"tag":177,"props":7943,"children":7944},{"style":190},[7945],{"type":76,"value":3605},{"type":70,"tag":177,"props":7947,"children":7948},{"style":190},[7949],{"type":76,"value":7950}," add",{"type":70,"tag":177,"props":7952,"children":7953},{"style":190},[7954],{"type":76,"value":7955}," upstream",{"type":70,"tag":177,"props":7957,"children":7958},{"style":190},[7959],{"type":76,"value":198},{"type":70,"tag":111,"props":7961,"children":7962},{},[7963,7968],{"type":70,"tag":85,"props":7964,"children":7965},{},[7966],{"type":76,"value":7967},"Create Feature Branch",{"type":70,"tag":165,"props":7969,"children":7971},{"className":167,"code":7970,"language":169,"meta":170,"style":170},"git checkout -b feature\u002Fmy-feature\n",[7972],{"type":70,"tag":173,"props":7973,"children":7974},{"__ignoreMap":170},[7975],{"type":70,"tag":177,"props":7976,"children":7977},{"class":179,"line":180},[7978,7982,7987,7992],{"type":70,"tag":177,"props":7979,"children":7980},{"style":184},[7981],{"type":76,"value":187},{"type":70,"tag":177,"props":7983,"children":7984},{"style":190},[7985],{"type":76,"value":7986}," checkout",{"type":70,"tag":177,"props":7988,"children":7989},{"style":190},[7990],{"type":76,"value":7991}," -b",{"type":70,"tag":177,"props":7993,"children":7994},{"style":190},[7995],{"type":76,"value":7996}," feature\u002Fmy-feature\n",{"type":70,"tag":111,"props":7998,"children":7999},{},[8000,8005],{"type":70,"tag":85,"props":8001,"children":8002},{},[8003],{"type":76,"value":8004},"Make Changes",{"type":70,"tag":107,"props":8006,"children":8007},{},[8008,8013,8018],{"type":70,"tag":111,"props":8009,"children":8010},{},[8011],{"type":76,"value":8012},"Follow code style guide",{"type":70,"tag":111,"props":8014,"children":8015},{},[8016],{"type":76,"value":8017},"Add tests for new features",{"type":70,"tag":111,"props":8019,"children":8020},{},[8021],{"type":76,"value":8022},"Update documentation",{"type":70,"tag":111,"props":8024,"children":8025},{},[8026,8031],{"type":70,"tag":85,"props":8027,"children":8028},{},[8029],{"type":76,"value":8030},"Commit and Push",{"type":70,"tag":165,"props":8032,"children":8034},{"className":167,"code":8033,"language":169,"meta":170,"style":170},"git add .\ngit commit -m \"feat: add new feature\"\ngit push origin feature\u002Fmy-feature\n",[8035],{"type":70,"tag":173,"props":8036,"children":8037},{"__ignoreMap":170},[8038,8054,8084],{"type":70,"tag":177,"props":8039,"children":8040},{"class":179,"line":180},[8041,8045,8049],{"type":70,"tag":177,"props":8042,"children":8043},{"style":184},[8044],{"type":76,"value":187},{"type":70,"tag":177,"props":8046,"children":8047},{"style":190},[8048],{"type":76,"value":7950},{"type":70,"tag":177,"props":8050,"children":8051},{"style":190},[8052],{"type":76,"value":8053}," .\n",{"type":70,"tag":177,"props":8055,"children":8056},{"class":179,"line":201},[8057,8061,8066,8070,8075,8080],{"type":70,"tag":177,"props":8058,"children":8059},{"style":184},[8060],{"type":76,"value":187},{"type":70,"tag":177,"props":8062,"children":8063},{"style":190},[8064],{"type":76,"value":8065}," commit",{"type":70,"tag":177,"props":8067,"children":8068},{"style":190},[8069],{"type":76,"value":3542},{"type":70,"tag":177,"props":8071,"children":8072},{"style":348},[8073],{"type":76,"value":8074}," \"",{"type":70,"tag":177,"props":8076,"children":8077},{"style":190},[8078],{"type":76,"value":8079},"feat: add new feature",{"type":70,"tag":177,"props":8081,"children":8082},{"style":348},[8083],{"type":76,"value":5180},{"type":70,"tag":177,"props":8085,"children":8086},{"class":179,"line":261},[8087,8091,8096,8101],{"type":70,"tag":177,"props":8088,"children":8089},{"style":184},[8090],{"type":76,"value":187},{"type":70,"tag":177,"props":8092,"children":8093},{"style":190},[8094],{"type":76,"value":8095}," push",{"type":70,"tag":177,"props":8097,"children":8098},{"style":190},[8099],{"type":76,"value":8100}," origin",{"type":70,"tag":177,"props":8102,"children":8103},{"style":190},[8104],{"type":76,"value":7996},{"type":70,"tag":111,"props":8106,"children":8107},{},[8108,8113],{"type":70,"tag":85,"props":8109,"children":8110},{},[8111],{"type":76,"value":8112},"Create Pull Request",{"type":70,"tag":107,"props":8114,"children":8115},{},[8116,8121,8126,8131],{"type":70,"tag":111,"props":8117,"children":8118},{},[8119],{"type":76,"value":8120},"Go to GitHub repository",{"type":70,"tag":111,"props":8122,"children":8123},{},[8124],{"type":76,"value":8125},"Create PR with clear description",{"type":70,"tag":111,"props":8127,"children":8128},{},[8129],{"type":76,"value":8130},"Link any related issues",{"type":70,"tag":111,"props":8132,"children":8133},{},[8134],{"type":76,"value":8135},"Wait for review",{"type":70,"tag":111,"props":8137,"children":8138},{},[8139,8144],{"type":70,"tag":85,"props":8140,"children":8141},{},[8142],{"type":76,"value":8143},"Code Review Process",{"type":70,"tag":107,"props":8145,"children":8146},{},[8147,8152,8157],{"type":70,"tag":111,"props":8148,"children":8149},{},[8150],{"type":76,"value":8151},"Address feedback from maintainers",{"type":70,"tag":111,"props":8153,"children":8154},{},[8155],{"type":76,"value":8156},"Update PR with changes",{"type":70,"tag":111,"props":8158,"children":8159},{},[8160],{"type":76,"value":8161},"After approval, maintainers will merge",{"type":70,"tag":866,"props":8163,"children":8164},{},[],{"type":70,"tag":93,"props":8166,"children":8168},{"id":8167},"troubleshooting",[8169],{"type":76,"value":8170},"Troubleshooting",{"type":70,"tag":100,"props":8172,"children":8174},{"id":8173},"common-issues-and-solutions",[8175],{"type":76,"value":8176},"Common Issues and Solutions",{"type":70,"tag":158,"props":8178,"children":8180},{"id":8179},"issue-1-classnotfoundexception-commysqljdbcdriver",[8181],{"type":76,"value":8182},"Issue 1: \"ClassNotFoundException: com.mysql.jdbc.Driver\"",{"type":70,"tag":79,"props":8184,"children":8185},{},[8186,8191],{"type":70,"tag":85,"props":8187,"children":8188},{},[8189],{"type":76,"value":8190},"Cause",{"type":76,"value":8192},": JDBC driver JAR not in classpath",{"type":70,"tag":79,"props":8194,"children":8195},{},[8196,8201],{"type":70,"tag":85,"props":8197,"children":8198},{},[8199],{"type":76,"value":8200},"Solution",{"type":76,"value":5441},{"type":70,"tag":165,"props":8203,"children":8205},{"className":167,"code":8204,"language":169,"meta":170,"style":170},"# 1. Download MySQL JDBC driver\nwget https:\u002F\u002Fdev.mysql.com\u002Fget\u002FDownloads\u002FConnector-J\u002Fmysql-connector-java-8.0.33.jar\n\n# 2. Copy to lib directory\ncp mysql-connector-java-8.0.33.jar $SEATUNNEL_HOME\u002Flib\u002F\n\n# 3. Restart job\nseatunnel.sh -c config\u002Fjob.conf -e spark\n",[8206],{"type":70,"tag":173,"props":8207,"children":8208},{"__ignoreMap":170},[8209,8217,8229,8236,8244,8267,8274,8282],{"type":70,"tag":177,"props":8210,"children":8211},{"class":179,"line":180},[8212],{"type":70,"tag":177,"props":8213,"children":8214},{"style":232},[8215],{"type":76,"value":8216},"# 1. Download MySQL JDBC driver\n",{"type":70,"tag":177,"props":8218,"children":8219},{"class":179,"line":201},[8220,8224],{"type":70,"tag":177,"props":8221,"children":8222},{"style":184},[8223],{"type":76,"value":364},{"type":70,"tag":177,"props":8225,"children":8226},{"style":190},[8227],{"type":76,"value":8228}," https:\u002F\u002Fdev.mysql.com\u002Fget\u002FDownloads\u002FConnector-J\u002Fmysql-connector-java-8.0.33.jar\n",{"type":70,"tag":177,"props":8230,"children":8231},{"class":179,"line":261},[8232],{"type":70,"tag":177,"props":8233,"children":8234},{"emptyLinePlaceholder":265},[8235],{"type":76,"value":268},{"type":70,"tag":177,"props":8237,"children":8238},{"class":179,"line":271},[8239],{"type":70,"tag":177,"props":8240,"children":8241},{"style":232},[8242],{"type":76,"value":8243},"# 2. Copy to lib directory\n",{"type":70,"tag":177,"props":8245,"children":8246},{"class":179,"line":280},[8247,8252,8257,8262],{"type":70,"tag":177,"props":8248,"children":8249},{"style":184},[8250],{"type":76,"value":8251},"cp",{"type":70,"tag":177,"props":8253,"children":8254},{"style":190},[8255],{"type":76,"value":8256}," mysql-connector-java-8.0.33.jar",{"type":70,"tag":177,"props":8258,"children":8259},{"style":342},[8260],{"type":76,"value":8261}," $SEATUNNEL_HOME",{"type":70,"tag":177,"props":8263,"children":8264},{"style":190},[8265],{"type":76,"value":8266},"\u002Flib\u002F\n",{"type":70,"tag":177,"props":8268,"children":8269},{"class":179,"line":29},[8270],{"type":70,"tag":177,"props":8271,"children":8272},{"emptyLinePlaceholder":265},[8273],{"type":76,"value":268},{"type":70,"tag":177,"props":8275,"children":8276},{"class":179,"line":646},[8277],{"type":70,"tag":177,"props":8278,"children":8279},{"style":232},[8280],{"type":76,"value":8281},"# 3. Restart job\n",{"type":70,"tag":177,"props":8283,"children":8284},{"class":179,"line":655},[8285,8289,8293,8297,8301],{"type":70,"tag":177,"props":8286,"children":8287},{"style":184},[8288],{"type":76,"value":812},{"type":70,"tag":177,"props":8290,"children":8291},{"style":190},[8292],{"type":76,"value":817},{"type":70,"tag":177,"props":8294,"children":8295},{"style":190},[8296],{"type":76,"value":3407},{"type":70,"tag":177,"props":8298,"children":8299},{"style":190},[8300],{"type":76,"value":827},{"type":70,"tag":177,"props":8302,"children":8303},{"style":190},[8304],{"type":76,"value":832},{"type":70,"tag":158,"props":8306,"children":8308},{"id":8307},"issue-2-outofmemoryerror-java-heap-space",[8309],{"type":76,"value":8310},"Issue 2: \"OutOfMemoryError: Java heap space\"",{"type":70,"tag":79,"props":8312,"children":8313},{},[8314,8318],{"type":70,"tag":85,"props":8315,"children":8316},{},[8317],{"type":76,"value":8190},{"type":76,"value":8319},": Insufficient JVM heap memory",{"type":70,"tag":79,"props":8321,"children":8322},{},[8323,8327],{"type":70,"tag":85,"props":8324,"children":8325},{},[8326],{"type":76,"value":8200},{"type":76,"value":5441},{"type":70,"tag":165,"props":8329,"children":8331},{"className":167,"code":8330,"language":169,"meta":170,"style":170},"# Increase JVM memory\nexport JVM_OPTS=\"-Xms2G -Xmx8G\"\n\n# Or set in seatunnel-env.sh\necho 'JVM_OPTS=\"-Xms2G -Xmx8G\"' >> $SEATUNNEL_HOME\u002Fbin\u002Fseatunnel-env.sh\n",[8332],{"type":70,"tag":173,"props":8333,"children":8334},{"__ignoreMap":170},[8335,8343,8371,8378,8386],{"type":70,"tag":177,"props":8336,"children":8337},{"class":179,"line":180},[8338],{"type":70,"tag":177,"props":8339,"children":8340},{"style":232},[8341],{"type":76,"value":8342},"# Increase JVM memory\n",{"type":70,"tag":177,"props":8344,"children":8345},{"class":179,"line":201},[8346,8350,8354,8358,8362,8367],{"type":70,"tag":177,"props":8347,"children":8348},{"style":490},[8349],{"type":76,"value":493},{"type":70,"tag":177,"props":8351,"children":8352},{"style":342},[8353],{"type":76,"value":5161},{"type":70,"tag":177,"props":8355,"children":8356},{"style":348},[8357],{"type":76,"value":351},{"type":70,"tag":177,"props":8359,"children":8360},{"style":348},[8361],{"type":76,"value":5170},{"type":70,"tag":177,"props":8363,"children":8364},{"style":190},[8365],{"type":76,"value":8366},"-Xms2G -Xmx8G",{"type":70,"tag":177,"props":8368,"children":8369},{"style":348},[8370],{"type":76,"value":5180},{"type":70,"tag":177,"props":8372,"children":8373},{"class":179,"line":261},[8374],{"type":70,"tag":177,"props":8375,"children":8376},{"emptyLinePlaceholder":265},[8377],{"type":76,"value":268},{"type":70,"tag":177,"props":8379,"children":8380},{"class":179,"line":271},[8381],{"type":70,"tag":177,"props":8382,"children":8383},{"style":232},[8384],{"type":76,"value":8385},"# Or set in seatunnel-env.sh\n",{"type":70,"tag":177,"props":8387,"children":8388},{"class":179,"line":280},[8389,8394,8399,8404,8409,8414,8418],{"type":70,"tag":177,"props":8390,"children":8391},{"style":205},[8392],{"type":76,"value":8393},"echo",{"type":70,"tag":177,"props":8395,"children":8396},{"style":348},[8397],{"type":76,"value":8398}," '",{"type":70,"tag":177,"props":8400,"children":8401},{"style":190},[8402],{"type":76,"value":8403},"JVM_OPTS=\"-Xms2G -Xmx8G\"",{"type":70,"tag":177,"props":8405,"children":8406},{"style":348},[8407],{"type":76,"value":8408},"'",{"type":70,"tag":177,"props":8410,"children":8411},{"style":348},[8412],{"type":76,"value":8413}," >>",{"type":70,"tag":177,"props":8415,"children":8416},{"style":342},[8417],{"type":76,"value":8261},{"type":70,"tag":177,"props":8419,"children":8420},{"style":190},[8421],{"type":76,"value":8422},"\u002Fbin\u002Fseatunnel-env.sh\n",{"type":70,"tag":158,"props":8424,"children":8426},{"id":8425},"issue-3-connection-refused-connect",[8427],{"type":76,"value":8428},"Issue 3: \"Connection refused: connect\"",{"type":70,"tag":79,"props":8430,"children":8431},{},[8432,8436],{"type":70,"tag":85,"props":8433,"children":8434},{},[8435],{"type":76,"value":8190},{"type":76,"value":8437},": Source\u002Fsink service not reachable",{"type":70,"tag":79,"props":8439,"children":8440},{},[8441,8445],{"type":70,"tag":85,"props":8442,"children":8443},{},[8444],{"type":76,"value":8200},{"type":76,"value":5441},{"type":70,"tag":165,"props":8447,"children":8449},{"className":167,"code":8448,"language":169,"meta":170,"style":170},"# 1. Verify connectivity\nping source-host\ntelnet source-host 3306\n\n# 2. Check credentials\nmysql -h source-host -u root -p\n\n# 3. Check firewall rules\n# Ensure port 3306 is open\n",[8450],{"type":70,"tag":173,"props":8451,"children":8452},{"__ignoreMap":170},[8453,8461,8474,8492,8499,8507,8539,8546,8554],{"type":70,"tag":177,"props":8454,"children":8455},{"class":179,"line":180},[8456],{"type":70,"tag":177,"props":8457,"children":8458},{"style":232},[8459],{"type":76,"value":8460},"# 1. Verify connectivity\n",{"type":70,"tag":177,"props":8462,"children":8463},{"class":179,"line":201},[8464,8469],{"type":70,"tag":177,"props":8465,"children":8466},{"style":184},[8467],{"type":76,"value":8468},"ping",{"type":70,"tag":177,"props":8470,"children":8471},{"style":190},[8472],{"type":76,"value":8473}," source-host\n",{"type":70,"tag":177,"props":8475,"children":8476},{"class":179,"line":261},[8477,8482,8487],{"type":70,"tag":177,"props":8478,"children":8479},{"style":184},[8480],{"type":76,"value":8481},"telnet",{"type":70,"tag":177,"props":8483,"children":8484},{"style":190},[8485],{"type":76,"value":8486}," source-host",{"type":70,"tag":177,"props":8488,"children":8489},{"style":3618},[8490],{"type":76,"value":8491}," 3306\n",{"type":70,"tag":177,"props":8493,"children":8494},{"class":179,"line":271},[8495],{"type":70,"tag":177,"props":8496,"children":8497},{"emptyLinePlaceholder":265},[8498],{"type":76,"value":268},{"type":70,"tag":177,"props":8500,"children":8501},{"class":179,"line":280},[8502],{"type":70,"tag":177,"props":8503,"children":8504},{"style":232},[8505],{"type":76,"value":8506},"# 2. Check credentials\n",{"type":70,"tag":177,"props":8508,"children":8509},{"class":179,"line":29},[8510,8515,8520,8524,8529,8534],{"type":70,"tag":177,"props":8511,"children":8512},{"style":184},[8513],{"type":76,"value":8514},"mysql",{"type":70,"tag":177,"props":8516,"children":8517},{"style":190},[8518],{"type":76,"value":8519}," -h",{"type":70,"tag":177,"props":8521,"children":8522},{"style":190},[8523],{"type":76,"value":8486},{"type":70,"tag":177,"props":8525,"children":8526},{"style":190},[8527],{"type":76,"value":8528}," -u",{"type":70,"tag":177,"props":8530,"children":8531},{"style":190},[8532],{"type":76,"value":8533}," root",{"type":70,"tag":177,"props":8535,"children":8536},{"style":190},[8537],{"type":76,"value":8538}," -p\n",{"type":70,"tag":177,"props":8540,"children":8541},{"class":179,"line":646},[8542],{"type":70,"tag":177,"props":8543,"children":8544},{"emptyLinePlaceholder":265},[8545],{"type":76,"value":268},{"type":70,"tag":177,"props":8547,"children":8548},{"class":179,"line":655},[8549],{"type":70,"tag":177,"props":8550,"children":8551},{"style":232},[8552],{"type":76,"value":8553},"# 3. Check firewall rules\n",{"type":70,"tag":177,"props":8555,"children":8556},{"class":179,"line":664},[8557],{"type":70,"tag":177,"props":8558,"children":8559},{"style":232},[8560],{"type":76,"value":8561},"# Ensure port 3306 is open\n",{"type":70,"tag":158,"props":8563,"children":8565},{"id":8564},"issue-4-table-not-found-during-cdc",[8566],{"type":76,"value":8567},"Issue 4: \"Table not found\" during CDC",{"type":70,"tag":79,"props":8569,"children":8570},{},[8571,8575],{"type":70,"tag":85,"props":8572,"children":8573},{},[8574],{"type":76,"value":8190},{"type":76,"value":8576},": Binlog not enabled on MySQL",{"type":70,"tag":79,"props":8578,"children":8579},{},[8580,8584],{"type":70,"tag":85,"props":8581,"children":8582},{},[8583],{"type":76,"value":8200},{"type":76,"value":5441},{"type":70,"tag":165,"props":8586,"children":8590},{"className":8587,"code":8588,"language":8589,"meta":170,"style":170},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Check binlog status\nSHOW VARIABLES LIKE 'log_bin';\n\n-- Enable binlog in my.cnf\n[mysqld]\nlog_bin = mysql-bin\nbinlog_format = row  # Important for CDC\n\n-- Restart MySQL and verify\nSHOW MASTER STATUS;\n","sql",[8591],{"type":70,"tag":173,"props":8592,"children":8593},{"__ignoreMap":170},[8594,8602,8610,8617,8625,8633,8641,8649,8656,8664],{"type":70,"tag":177,"props":8595,"children":8596},{"class":179,"line":180},[8597],{"type":70,"tag":177,"props":8598,"children":8599},{},[8600],{"type":76,"value":8601},"-- Check binlog status\n",{"type":70,"tag":177,"props":8603,"children":8604},{"class":179,"line":201},[8605],{"type":70,"tag":177,"props":8606,"children":8607},{},[8608],{"type":76,"value":8609},"SHOW VARIABLES LIKE 'log_bin';\n",{"type":70,"tag":177,"props":8611,"children":8612},{"class":179,"line":261},[8613],{"type":70,"tag":177,"props":8614,"children":8615},{"emptyLinePlaceholder":265},[8616],{"type":76,"value":268},{"type":70,"tag":177,"props":8618,"children":8619},{"class":179,"line":271},[8620],{"type":70,"tag":177,"props":8621,"children":8622},{},[8623],{"type":76,"value":8624},"-- Enable binlog in my.cnf\n",{"type":70,"tag":177,"props":8626,"children":8627},{"class":179,"line":280},[8628],{"type":70,"tag":177,"props":8629,"children":8630},{},[8631],{"type":76,"value":8632},"[mysqld]\n",{"type":70,"tag":177,"props":8634,"children":8635},{"class":179,"line":29},[8636],{"type":70,"tag":177,"props":8637,"children":8638},{},[8639],{"type":76,"value":8640},"log_bin = mysql-bin\n",{"type":70,"tag":177,"props":8642,"children":8643},{"class":179,"line":646},[8644],{"type":70,"tag":177,"props":8645,"children":8646},{},[8647],{"type":76,"value":8648},"binlog_format = row  # Important for CDC\n",{"type":70,"tag":177,"props":8650,"children":8651},{"class":179,"line":655},[8652],{"type":70,"tag":177,"props":8653,"children":8654},{"emptyLinePlaceholder":265},[8655],{"type":76,"value":268},{"type":70,"tag":177,"props":8657,"children":8658},{"class":179,"line":664},[8659],{"type":70,"tag":177,"props":8660,"children":8661},{},[8662],{"type":76,"value":8663},"-- Restart MySQL and verify\n",{"type":70,"tag":177,"props":8665,"children":8666},{"class":179,"line":673},[8667],{"type":70,"tag":177,"props":8668,"children":8669},{},[8670],{"type":76,"value":8671},"SHOW MASTER STATUS;\n",{"type":70,"tag":158,"props":8673,"children":8675},{"id":8674},"issue-5-slow-job-performance",[8676],{"type":76,"value":8677},"Issue 5: Slow Job Performance",{"type":70,"tag":79,"props":8679,"children":8680},{},[8681,8685],{"type":70,"tag":85,"props":8682,"children":8683},{},[8684],{"type":76,"value":8190},{"type":76,"value":8686},": Suboptimal configuration",{"type":70,"tag":79,"props":8688,"children":8689},{},[8690,8695],{"type":70,"tag":85,"props":8691,"children":8692},{},[8693],{"type":76,"value":8694},"Solutions",{"type":76,"value":5441},{"type":70,"tag":165,"props":8697,"children":8699},{"className":591,"code":8698,"language":593,"meta":170,"style":170},"# 1. Increase parallelism\nenv {\n  parallelism = 8  # or higher based on cluster\n}\n\n# 2. Increase batch sizes\nsource {\n  Jdbc {\n    fetch_size = 5000\n    split_size = 100000\n  }\n}\n\nsink {\n  Jdbc {\n    batch_size = 2000\n  }\n}\n\n# 3. Enable connection pooling\nsource {\n  Jdbc {\n    pool_size = 10\n    max_idle_time = 300\n  }\n}\n",[8700],{"type":70,"tag":173,"props":8701,"children":8702},{"__ignoreMap":170},[8703,8711,8718,8726,8733,8740,8748,8755,8762,8769,8776,8783,8790,8797,8804,8811,8819,8826,8833,8840,8848,8855,8862,8870,8878,8885],{"type":70,"tag":177,"props":8704,"children":8705},{"class":179,"line":180},[8706],{"type":70,"tag":177,"props":8707,"children":8708},{},[8709],{"type":76,"value":8710},"# 1. Increase parallelism\n",{"type":70,"tag":177,"props":8712,"children":8713},{"class":179,"line":201},[8714],{"type":70,"tag":177,"props":8715,"children":8716},{},[8717],{"type":76,"value":605},{"type":70,"tag":177,"props":8719,"children":8720},{"class":179,"line":261},[8721],{"type":70,"tag":177,"props":8722,"children":8723},{},[8724],{"type":76,"value":8725},"  parallelism = 8  # or higher based on cluster\n",{"type":70,"tag":177,"props":8727,"children":8728},{"class":179,"line":271},[8729],{"type":70,"tag":177,"props":8730,"children":8731},{},[8732],{"type":76,"value":463},{"type":70,"tag":177,"props":8734,"children":8735},{"class":179,"line":280},[8736],{"type":70,"tag":177,"props":8737,"children":8738},{"emptyLinePlaceholder":265},[8739],{"type":76,"value":268},{"type":70,"tag":177,"props":8741,"children":8742},{"class":179,"line":29},[8743],{"type":70,"tag":177,"props":8744,"children":8745},{},[8746],{"type":76,"value":8747},"# 2. Increase batch sizes\n",{"type":70,"tag":177,"props":8749,"children":8750},{"class":179,"line":646},[8751],{"type":70,"tag":177,"props":8752,"children":8753},{},[8754],{"type":76,"value":643},{"type":70,"tag":177,"props":8756,"children":8757},{"class":179,"line":655},[8758],{"type":70,"tag":177,"props":8759,"children":8760},{},[8761],{"type":76,"value":2525},{"type":70,"tag":177,"props":8763,"children":8764},{"class":179,"line":664},[8765],{"type":70,"tag":177,"props":8766,"children":8767},{},[8768],{"type":76,"value":5641},{"type":70,"tag":177,"props":8770,"children":8771},{"class":179,"line":673},[8772],{"type":70,"tag":177,"props":8773,"children":8774},{},[8775],{"type":76,"value":5633},{"type":70,"tag":177,"props":8777,"children":8778},{"class":179,"line":682},[8779],{"type":70,"tag":177,"props":8780,"children":8781},{},[8782],{"type":76,"value":733},{"type":70,"tag":177,"props":8784,"children":8785},{"class":179,"line":691},[8786],{"type":70,"tag":177,"props":8787,"children":8788},{},[8789],{"type":76,"value":463},{"type":70,"tag":177,"props":8791,"children":8792},{"class":179,"line":700},[8793],{"type":70,"tag":177,"props":8794,"children":8795},{"emptyLinePlaceholder":265},[8796],{"type":76,"value":268},{"type":70,"tag":177,"props":8798,"children":8799},{"class":179,"line":709},[8800],{"type":70,"tag":177,"props":8801,"children":8802},{},[8803],{"type":76,"value":758},{"type":70,"tag":177,"props":8805,"children":8806},{"class":179,"line":718},[8807],{"type":70,"tag":177,"props":8808,"children":8809},{},[8810],{"type":76,"value":2525},{"type":70,"tag":177,"props":8812,"children":8813},{"class":179,"line":727},[8814],{"type":70,"tag":177,"props":8815,"children":8816},{},[8817],{"type":76,"value":8818},"    batch_size = 2000\n",{"type":70,"tag":177,"props":8820,"children":8821},{"class":179,"line":736},[8822],{"type":70,"tag":177,"props":8823,"children":8824},{},[8825],{"type":76,"value":733},{"type":70,"tag":177,"props":8827,"children":8828},{"class":179,"line":744},[8829],{"type":70,"tag":177,"props":8830,"children":8831},{},[8832],{"type":76,"value":463},{"type":70,"tag":177,"props":8834,"children":8835},{"class":179,"line":752},[8836],{"type":70,"tag":177,"props":8837,"children":8838},{"emptyLinePlaceholder":265},[8839],{"type":76,"value":268},{"type":70,"tag":177,"props":8841,"children":8842},{"class":179,"line":761},[8843],{"type":70,"tag":177,"props":8844,"children":8845},{},[8846],{"type":76,"value":8847},"# 3. Enable connection pooling\n",{"type":70,"tag":177,"props":8849,"children":8850},{"class":179,"line":770},[8851],{"type":70,"tag":177,"props":8852,"children":8853},{},[8854],{"type":76,"value":643},{"type":70,"tag":177,"props":8856,"children":8857},{"class":179,"line":779},[8858],{"type":70,"tag":177,"props":8859,"children":8860},{},[8861],{"type":76,"value":2525},{"type":70,"tag":177,"props":8863,"children":8864},{"class":179,"line":787},[8865],{"type":70,"tag":177,"props":8866,"children":8867},{},[8868],{"type":76,"value":8869},"    pool_size = 10\n",{"type":70,"tag":177,"props":8871,"children":8872},{"class":179,"line":2377},[8873],{"type":70,"tag":177,"props":8874,"children":8875},{},[8876],{"type":76,"value":8877},"    max_idle_time = 300\n",{"type":70,"tag":177,"props":8879,"children":8880},{"class":179,"line":2385},[8881],{"type":70,"tag":177,"props":8882,"children":8883},{},[8884],{"type":76,"value":733},{"type":70,"tag":177,"props":8886,"children":8887},{"class":179,"line":2393},[8888],{"type":70,"tag":177,"props":8889,"children":8890},{},[8891],{"type":76,"value":463},{"type":70,"tag":158,"props":8893,"children":8895},{"id":8894},"issue-6-kafka-topic-offset-out-of-range",[8896],{"type":76,"value":8897},"Issue 6: \"Kafka topic offset out of range\"",{"type":70,"tag":79,"props":8899,"children":8900},{},[8901,8905],{"type":70,"tag":85,"props":8902,"children":8903},{},[8904],{"type":76,"value":8190},{"type":76,"value":8906},": Offset doesn't exist in topic",{"type":70,"tag":79,"props":8908,"children":8909},{},[8910,8914],{"type":70,"tag":85,"props":8911,"children":8912},{},[8913],{"type":76,"value":8200},{"type":76,"value":5441},{"type":70,"tag":165,"props":8916,"children":8918},{"className":591,"code":8917,"language":593,"meta":170,"style":170},"source {\n  Kafka {\n    # Reset to earliest or latest\n    auto.offset.reset = \"earliest\"  # or \"latest\"\n\n    # Or specify explicit offsets\n    start_mode = \"earliest\"\n  }\n}\n",[8919],{"type":70,"tag":173,"props":8920,"children":8921},{"__ignoreMap":170},[8922,8929,8936,8944,8952,8959,8967,8975,8982],{"type":70,"tag":177,"props":8923,"children":8924},{"class":179,"line":180},[8925],{"type":70,"tag":177,"props":8926,"children":8927},{},[8928],{"type":76,"value":643},{"type":70,"tag":177,"props":8930,"children":8931},{"class":179,"line":201},[8932],{"type":70,"tag":177,"props":8933,"children":8934},{},[8935],{"type":76,"value":2801},{"type":70,"tag":177,"props":8937,"children":8938},{"class":179,"line":261},[8939],{"type":70,"tag":177,"props":8940,"children":8941},{},[8942],{"type":76,"value":8943},"    # Reset to earliest or latest\n",{"type":70,"tag":177,"props":8945,"children":8946},{"class":179,"line":271},[8947],{"type":70,"tag":177,"props":8948,"children":8949},{},[8950],{"type":76,"value":8951},"    auto.offset.reset = \"earliest\"  # or \"latest\"\n",{"type":70,"tag":177,"props":8953,"children":8954},{"class":179,"line":280},[8955],{"type":70,"tag":177,"props":8956,"children":8957},{"emptyLinePlaceholder":265},[8958],{"type":76,"value":268},{"type":70,"tag":177,"props":8960,"children":8961},{"class":179,"line":29},[8962],{"type":70,"tag":177,"props":8963,"children":8964},{},[8965],{"type":76,"value":8966},"    # Or specify explicit offsets\n",{"type":70,"tag":177,"props":8968,"children":8969},{"class":179,"line":646},[8970],{"type":70,"tag":177,"props":8971,"children":8972},{},[8973],{"type":76,"value":8974},"    start_mode = \"earliest\"\n",{"type":70,"tag":177,"props":8976,"children":8977},{"class":179,"line":655},[8978],{"type":70,"tag":177,"props":8979,"children":8980},{},[8981],{"type":76,"value":733},{"type":70,"tag":177,"props":8983,"children":8984},{"class":179,"line":664},[8985],{"type":70,"tag":177,"props":8986,"children":8987},{},[8988],{"type":76,"value":463},{"type":70,"tag":100,"props":8990,"children":8992},{"id":8991},"faq",[8993],{"type":76,"value":8994},"FAQ",{"type":70,"tag":79,"props":8996,"children":8997},{},[8998],{"type":70,"tag":85,"props":8999,"children":9000},{},[9001],{"type":76,"value":9002},"Q: What's the difference between BATCH and STREAMING mode?",{"type":70,"tag":79,"props":9004,"children":9005},{},[9006],{"type":76,"value":9007},"A:",{"type":70,"tag":107,"props":9009,"children":9010},{},[9011,9021],{"type":70,"tag":111,"props":9012,"children":9013},{},[9014,9019],{"type":70,"tag":85,"props":9015,"children":9016},{},[9017],{"type":76,"value":9018},"BATCH",{"type":76,"value":9020},": One-time execution, suitable for full database migration",{"type":70,"tag":111,"props":9022,"children":9023},{},[9024,9029],{"type":70,"tag":85,"props":9025,"children":9026},{},[9027],{"type":76,"value":9028},"STREAMING",{"type":76,"value":9030},": Continuous execution, suitable for real-time data sync and CDC",{"type":70,"tag":79,"props":9032,"children":9033},{},[9034],{"type":70,"tag":85,"props":9035,"children":9036},{},[9037],{"type":76,"value":9038},"Q: How do I handle schema changes during CDC?",{"type":70,"tag":79,"props":9040,"children":9041},{},[9042],{"type":76,"value":9043},"A: SeaTunnel automatically detects schema changes in CDC mode. Configure in source:",{"type":70,"tag":165,"props":9045,"children":9047},{"className":591,"code":9046,"language":593,"meta":170,"style":170},"source {\n  Mysql {\n    schema_change_mode = \"auto\"  # auto-detect and apply\n  }\n}\n",[9048],{"type":70,"tag":173,"props":9049,"children":9050},{"__ignoreMap":170},[9051,9058,9065,9073,9080],{"type":70,"tag":177,"props":9052,"children":9053},{"class":179,"line":180},[9054],{"type":70,"tag":177,"props":9055,"children":9056},{},[9057],{"type":76,"value":643},{"type":70,"tag":177,"props":9059,"children":9060},{"class":179,"line":201},[9061],{"type":70,"tag":177,"props":9062,"children":9063},{},[9064],{"type":76,"value":3146},{"type":70,"tag":177,"props":9066,"children":9067},{"class":179,"line":261},[9068],{"type":70,"tag":177,"props":9069,"children":9070},{},[9071],{"type":76,"value":9072},"    schema_change_mode = \"auto\"  # auto-detect and apply\n",{"type":70,"tag":177,"props":9074,"children":9075},{"class":179,"line":271},[9076],{"type":70,"tag":177,"props":9077,"children":9078},{},[9079],{"type":76,"value":733},{"type":70,"tag":177,"props":9081,"children":9082},{"class":179,"line":280},[9083],{"type":70,"tag":177,"props":9084,"children":9085},{},[9086],{"type":76,"value":463},{"type":70,"tag":79,"props":9088,"children":9089},{},[9090],{"type":70,"tag":85,"props":9091,"children":9092},{},[9093],{"type":76,"value":9094},"Q: Can I transform data during synchronization?",{"type":70,"tag":79,"props":9096,"children":9097},{},[9098],{"type":76,"value":9099},"A: Yes, use SQL transform:",{"type":70,"tag":165,"props":9101,"children":9103},{"className":591,"code":9102,"language":593,"meta":170,"style":170},"transform {\n  Sql {\n    sql = \"SELECT id, UPPER(name) as name FROM source\"\n  }\n}\n",[9104],{"type":70,"tag":173,"props":9105,"children":9106},{"__ignoreMap":170},[9107,9114,9121,9129,9136],{"type":70,"tag":177,"props":9108,"children":9109},{"class":179,"line":180},[9110],{"type":70,"tag":177,"props":9111,"children":9112},{},[9113],{"type":76,"value":2358},{"type":70,"tag":177,"props":9115,"children":9116},{"class":179,"line":201},[9117],{"type":70,"tag":177,"props":9118,"children":9119},{},[9120],{"type":76,"value":2936},{"type":70,"tag":177,"props":9122,"children":9123},{"class":179,"line":261},[9124],{"type":70,"tag":177,"props":9125,"children":9126},{},[9127],{"type":76,"value":9128},"    sql = \"SELECT id, UPPER(name) as name FROM source\"\n",{"type":70,"tag":177,"props":9130,"children":9131},{"class":179,"line":271},[9132],{"type":70,"tag":177,"props":9133,"children":9134},{},[9135],{"type":76,"value":733},{"type":70,"tag":177,"props":9137,"children":9138},{"class":179,"line":280},[9139],{"type":70,"tag":177,"props":9140,"children":9141},{},[9142],{"type":76,"value":463},{"type":70,"tag":79,"props":9144,"children":9145},{},[9146],{"type":70,"tag":85,"props":9147,"children":9148},{},[9149],{"type":76,"value":9150},"Q: What's the maximum throughput?",{"type":70,"tag":79,"props":9152,"children":9153},{},[9154],{"type":76,"value":9155},"A: Depends on:",{"type":70,"tag":107,"props":9157,"children":9158},{},[9159,9164,9169,9174],{"type":70,"tag":111,"props":9160,"children":9161},{},[9162],{"type":76,"value":9163},"Hardware (CPU, RAM, Network)",{"type":70,"tag":111,"props":9165,"children":9166},{},[9167],{"type":76,"value":9168},"Source\u002Fsink database configuration",{"type":70,"tag":111,"props":9170,"children":9171},{},[9172],{"type":76,"value":9173},"Data size per record",{"type":70,"tag":111,"props":9175,"children":9176},{},[9177],{"type":76,"value":9178},"Network latency",{"type":70,"tag":79,"props":9180,"children":9181},{},[9182],{"type":76,"value":9183},"Typical throughput: 100K - 1M records\u002Fsecond per executor",{"type":70,"tag":79,"props":9185,"children":9186},{},[9187],{"type":70,"tag":85,"props":9188,"children":9189},{},[9190],{"type":76,"value":9191},"Q: How do I handle errors in production?",{"type":70,"tag":79,"props":9193,"children":9194},{},[9195],{"type":76,"value":9196},"A: Configure restart strategy:",{"type":70,"tag":165,"props":9198,"children":9200},{"className":591,"code":9199,"language":593,"meta":170,"style":170},"env {\n  restart_strategy = \"exponential_delay\"\n  restart_strategy.exponential_delay.initial_delay = 1000\n  restart_strategy.exponential_delay.max_delay = 30000\n  restart_strategy.exponential_delay.multiplier = 2.0\n  restart_strategy.exponential_delay.attempts_unlimited = true\n}\n",[9201],{"type":70,"tag":173,"props":9202,"children":9203},{"__ignoreMap":170},[9204,9211,9219,9227,9235,9243,9251],{"type":70,"tag":177,"props":9205,"children":9206},{"class":179,"line":180},[9207],{"type":70,"tag":177,"props":9208,"children":9209},{},[9210],{"type":76,"value":605},{"type":70,"tag":177,"props":9212,"children":9213},{"class":179,"line":201},[9214],{"type":70,"tag":177,"props":9215,"children":9216},{},[9217],{"type":76,"value":9218},"  restart_strategy = \"exponential_delay\"\n",{"type":70,"tag":177,"props":9220,"children":9221},{"class":179,"line":261},[9222],{"type":70,"tag":177,"props":9223,"children":9224},{},[9225],{"type":76,"value":9226},"  restart_strategy.exponential_delay.initial_delay = 1000\n",{"type":70,"tag":177,"props":9228,"children":9229},{"class":179,"line":271},[9230],{"type":70,"tag":177,"props":9231,"children":9232},{},[9233],{"type":76,"value":9234},"  restart_strategy.exponential_delay.max_delay = 30000\n",{"type":70,"tag":177,"props":9236,"children":9237},{"class":179,"line":280},[9238],{"type":70,"tag":177,"props":9239,"children":9240},{},[9241],{"type":76,"value":9242},"  restart_strategy.exponential_delay.multiplier = 2.0\n",{"type":70,"tag":177,"props":9244,"children":9245},{"class":179,"line":29},[9246],{"type":70,"tag":177,"props":9247,"children":9248},{},[9249],{"type":76,"value":9250},"  restart_strategy.exponential_delay.attempts_unlimited = true\n",{"type":70,"tag":177,"props":9252,"children":9253},{"class":179,"line":646},[9254],{"type":70,"tag":177,"props":9255,"children":9256},{},[9257],{"type":76,"value":463},{"type":70,"tag":79,"props":9259,"children":9260},{},[9261],{"type":70,"tag":85,"props":9262,"children":9263},{},[9264],{"type":76,"value":9265},"Q: Is there a web UI for job management?",{"type":70,"tag":79,"props":9267,"children":9268},{},[9269,9271,9276],{"type":76,"value":9270},"A: Yes! Use ",{"type":70,"tag":85,"props":9272,"children":9273},{},[9274],{"type":76,"value":9275},"SeaTunnel Web Project",{"type":76,"value":5441},{"type":70,"tag":165,"props":9278,"children":9280},{"className":167,"code":9279,"language":169,"meta":170,"style":170},"# Check out web UI project\ngit clone https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-web.git\ncd seatunnel-web\nmvn clean install\n\n# Run web UI\njava -jar target\u002Fseatunnel-web-*.jar\n# Access at http:\u002F\u002Flocalhost:8080\n",[9281],{"type":70,"tag":173,"props":9282,"children":9283},{"__ignoreMap":170},[9284,9292,9308,9320,9335,9342,9350,9376],{"type":70,"tag":177,"props":9285,"children":9286},{"class":179,"line":180},[9287],{"type":70,"tag":177,"props":9288,"children":9289},{"style":232},[9290],{"type":76,"value":9291},"# Check out web UI project\n",{"type":70,"tag":177,"props":9293,"children":9294},{"class":179,"line":201},[9295,9299,9303],{"type":70,"tag":177,"props":9296,"children":9297},{"style":184},[9298],{"type":76,"value":187},{"type":70,"tag":177,"props":9300,"children":9301},{"style":190},[9302],{"type":76,"value":193},{"type":70,"tag":177,"props":9304,"children":9305},{"style":190},[9306],{"type":76,"value":9307}," https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-web.git\n",{"type":70,"tag":177,"props":9309,"children":9310},{"class":179,"line":261},[9311,9315],{"type":70,"tag":177,"props":9312,"children":9313},{"style":205},[9314],{"type":76,"value":208},{"type":70,"tag":177,"props":9316,"children":9317},{"style":190},[9318],{"type":76,"value":9319}," seatunnel-web\n",{"type":70,"tag":177,"props":9321,"children":9322},{"class":179,"line":271},[9323,9327,9331],{"type":70,"tag":177,"props":9324,"children":9325},{"style":184},[9326],{"type":76,"value":243},{"type":70,"tag":177,"props":9328,"children":9329},{"style":190},[9330],{"type":76,"value":248},{"type":70,"tag":177,"props":9332,"children":9333},{"style":190},[9334],{"type":76,"value":6425},{"type":70,"tag":177,"props":9336,"children":9337},{"class":179,"line":280},[9338],{"type":70,"tag":177,"props":9339,"children":9340},{"emptyLinePlaceholder":265},[9341],{"type":76,"value":268},{"type":70,"tag":177,"props":9343,"children":9344},{"class":179,"line":29},[9345],{"type":70,"tag":177,"props":9346,"children":9347},{"style":232},[9348],{"type":76,"value":9349},"# Run web UI\n",{"type":70,"tag":177,"props":9351,"children":9352},{"class":179,"line":646},[9353,9357,9362,9367,9371],{"type":70,"tag":177,"props":9354,"children":9355},{"style":184},[9356],{"type":76,"value":59},{"type":70,"tag":177,"props":9358,"children":9359},{"style":190},[9360],{"type":76,"value":9361}," -jar",{"type":70,"tag":177,"props":9363,"children":9364},{"style":190},[9365],{"type":76,"value":9366}," target\u002Fseatunnel-web-",{"type":70,"tag":177,"props":9368,"children":9369},{"style":342},[9370],{"type":76,"value":1643},{"type":70,"tag":177,"props":9372,"children":9373},{"style":190},[9374],{"type":76,"value":9375},".jar\n",{"type":70,"tag":177,"props":9377,"children":9378},{"class":179,"line":655},[9379],{"type":70,"tag":177,"props":9380,"children":9381},{"style":232},[9382],{"type":76,"value":9383},"# Access at http:\u002F\u002Flocalhost:8080\n",{"type":70,"tag":866,"props":9385,"children":9386},{},[],{"type":70,"tag":93,"props":9388,"children":9390},{"id":9389},"resources",[9391],{"type":76,"value":9392},"Resources",{"type":70,"tag":100,"props":9394,"children":9396},{"id":9395},"official-links",[9397],{"type":76,"value":9398},"Official Links",{"type":70,"tag":107,"props":9400,"children":9401},{},[9402,9412,9421,9430,9440,9450,9460],{"type":70,"tag":111,"props":9403,"children":9404},{},[9405],{"type":70,"tag":320,"props":9406,"children":9409},{"href":9407,"rel":9408},"https:\u002F\u002Fseatunnel.apache.org\u002F",[324],[9410],{"type":76,"value":9411},"SeaTunnel Official Website",{"type":70,"tag":111,"props":9413,"children":9414},{},[9415],{"type":70,"tag":320,"props":9416,"children":9418},{"href":53,"rel":9417},[324],[9419],{"type":76,"value":9420},"GitHub (Engine)",{"type":70,"tag":111,"props":9422,"children":9423},{},[9424],{"type":70,"tag":320,"props":9425,"children":9427},{"href":54,"rel":9426},[324],[9428],{"type":76,"value":9429},"GitHub (Website)",{"type":70,"tag":111,"props":9431,"children":9432},{},[9433],{"type":70,"tag":320,"props":9434,"children":9437},{"href":9435,"rel":9436},"https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel-web",[324],[9438],{"type":76,"value":9439},"GitHub (Web UI)",{"type":70,"tag":111,"props":9441,"children":9442},{},[9443],{"type":70,"tag":320,"props":9444,"children":9447},{"href":9445,"rel":9446},"https:\u002F\u002Fseatunnel.apache.org\u002Fdocs\u002F",[324],[9448],{"type":76,"value":9449},"Documentation Hub",{"type":70,"tag":111,"props":9451,"children":9452},{},[9453],{"type":70,"tag":320,"props":9454,"children":9457},{"href":9455,"rel":9456},"https:\u002F\u002Fseatunnel.apache.org\u002Fdocs\u002F2.3.12\u002Fconnector-v2\u002Foverview",[324],[9458],{"type":76,"value":9459},"Connector List",{"type":70,"tag":111,"props":9461,"children":9462},{},[9463],{"type":70,"tag":320,"props":9464,"children":9466},{"href":322,"rel":9465},[324],[9467],{"type":76,"value":9468},"Downloads",{"type":70,"tag":100,"props":9470,"children":9472},{"id":9471},"community",[9473],{"type":76,"value":9474},"Community",{"type":70,"tag":107,"props":9476,"children":9477},{},[9478,9488,9498,9508],{"type":70,"tag":111,"props":9479,"children":9480},{},[9481],{"type":70,"tag":320,"props":9482,"children":9485},{"href":9483,"rel":9484},"https:\u002F\u002Fthe-asf.slack.com\u002Farchives\u002FC01CB5186TL",[324],[9486],{"type":76,"value":9487},"Slack Channel",{"type":70,"tag":111,"props":9489,"children":9490},{},[9491],{"type":70,"tag":320,"props":9492,"children":9495},{"href":9493,"rel":9494},"https:\u002F\u002Fseatunnel.apache.org\u002Fcommunity\u002Fmail-lists\u002F",[324],[9496],{"type":76,"value":9497},"Mailing Lists",{"type":70,"tag":111,"props":9499,"children":9500},{},[9501],{"type":70,"tag":320,"props":9502,"children":9505},{"href":9503,"rel":9504},"https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel\u002Fissues",[324],[9506],{"type":76,"value":9507},"Issue Tracker",{"type":70,"tag":111,"props":9509,"children":9510},{},[9511],{"type":70,"tag":320,"props":9512,"children":9515},{"href":9513,"rel":9514},"https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel\u002Fdiscussions",[324],[9516],{"type":76,"value":9517},"Discussion Forum",{"type":70,"tag":100,"props":9519,"children":9521},{"id":9520},"related-projects",[9522],{"type":76,"value":9523},"Related Projects",{"type":70,"tag":107,"props":9525,"children":9526},{},[9527,9536,9546,9555],{"type":70,"tag":111,"props":9528,"children":9529},{},[9530],{"type":70,"tag":320,"props":9531,"children":9533},{"href":9435,"rel":9532},[324],[9534],{"type":76,"value":9535},"SeaTunnel Web UI",{"type":70,"tag":111,"props":9537,"children":9538},{},[9539],{"type":70,"tag":320,"props":9540,"children":9543},{"href":9541,"rel":9542},"https:\u002F\u002Fkafka.apache.org\u002F",[324],[9544],{"type":76,"value":9545},"Apache Kafka",{"type":70,"tag":111,"props":9547,"children":9548},{},[9549],{"type":70,"tag":320,"props":9550,"children":9553},{"href":9551,"rel":9552},"https:\u002F\u002Fflink.apache.org\u002F",[324],[9554],{"type":76,"value":1125},{"type":70,"tag":111,"props":9556,"children":9557},{},[9558],{"type":70,"tag":320,"props":9559,"children":9562},{"href":9560,"rel":9561},"https:\u002F\u002Fspark.apache.org\u002F",[324],[9563],{"type":76,"value":1135},{"type":70,"tag":100,"props":9565,"children":9567},{"id":9566},"learning-resources",[9568],{"type":76,"value":9569},"Learning Resources",{"type":70,"tag":107,"props":9571,"children":9572},{},[9573,9583,9593,9603],{"type":70,"tag":111,"props":9574,"children":9575},{},[9576],{"type":70,"tag":320,"props":9577,"children":9580},{"href":9578,"rel":9579},"https:\u002F\u002Fgithub.com\u002Flightbend\u002Fconfig\u002Fblob\u002Fmain\u002FHOCON.md",[324],[9581],{"type":76,"value":9582},"HOCON Configuration Guide",{"type":70,"tag":111,"props":9584,"children":9585},{},[9586],{"type":70,"tag":320,"props":9587,"children":9590},{"href":9588,"rel":9589},"https:\u002F\u002Fseatunnel.apache.org\u002Fdocs\u002F2.3.12\u002Ftransform-v2\u002Fsql",[324],[9591],{"type":76,"value":9592},"SQL Functions Reference",{"type":70,"tag":111,"props":9594,"children":9595},{},[9596],{"type":70,"tag":320,"props":9597,"children":9600},{"href":9598,"rel":9599},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FChange_data_capture",[324],[9601],{"type":76,"value":9602},"CDC Pattern Explained",{"type":70,"tag":111,"props":9604,"children":9605},{},[9606],{"type":70,"tag":320,"props":9607,"children":9610},{"href":9608,"rel":9609},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDistributed_computing",[324],[9611],{"type":76,"value":9612},"Distributed Systems Concepts",{"type":70,"tag":100,"props":9614,"children":9616},{"id":9615},"version-history",[9617],{"type":76,"value":9618},"Version History",{"type":70,"tag":107,"props":9620,"children":9621},{},[9622,9631,9641,9646],{"type":70,"tag":111,"props":9623,"children":9624},{},[9625,9629],{"type":70,"tag":85,"props":9626,"children":9627},{},[9628],{"type":76,"value":6304},{"type":76,"value":9630}," (Latest Stable) - Current recommended version",{"type":70,"tag":111,"props":9632,"children":9633},{},[9634,9639],{"type":70,"tag":85,"props":9635,"children":9636},{},[9637],{"type":76,"value":9638},"2.3.13-SNAPSHOT",{"type":76,"value":9640}," (Development)",{"type":70,"tag":111,"props":9642,"children":9643},{},[9644],{"type":76,"value":9645},"20 historical versions maintained in documentation (1.x ~ 2.3.12)",{"type":70,"tag":111,"props":9647,"children":9648},{},[9649],{"type":70,"tag":320,"props":9650,"children":9653},{"href":9651,"rel":9652},"https:\u002F\u002Farchive.apache.org\u002Fdist\u002Fseatunnel\u002F",[324],[9654],{"type":76,"value":9655},"All Releases",{"type":70,"tag":866,"props":9657,"children":9658},{},[],{"type":70,"tag":93,"props":9660,"children":9662},{"id":9661},"additional-notes",[9663],{"type":76,"value":9664},"Additional Notes",{"type":70,"tag":100,"props":9666,"children":9668},{"id":9667},"license",[9669],{"type":76,"value":9670},"License",{"type":70,"tag":79,"props":9672,"children":9673},{},[9674,9676,9683],{"type":76,"value":9675},"Apache License 2.0 - See ",{"type":70,"tag":320,"props":9677,"children":9680},{"href":9678,"rel":9679},"https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel\u002Fblob\u002Fmaster\u002FLICENSE",[324],[9681],{"type":76,"value":9682},"LICENSE",{"type":76,"value":9684}," file",{"type":70,"tag":100,"props":9686,"children":9688},{"id":9687},"security",[9689],{"type":76,"value":9690},"Security",{"type":70,"tag":107,"props":9692,"children":9693},{},[9694,9706],{"type":70,"tag":111,"props":9695,"children":9696},{},[9697,9699],{"type":76,"value":9698},"Report security issues via ",{"type":70,"tag":320,"props":9700,"children":9703},{"href":9701,"rel":9702},"https:\u002F\u002Fwww.apache.org\u002Fsecurity\u002F",[324],[9704],{"type":76,"value":9705},"Apache Security",{"type":70,"tag":111,"props":9707,"children":9708},{},[9709],{"type":76,"value":9710},"Do NOT create public issues for security vulnerabilities",{"type":70,"tag":100,"props":9712,"children":9714},{"id":9713},"support-contribution",[9715],{"type":76,"value":9716},"Support & Contribution",{"type":70,"tag":107,"props":9718,"children":9719},{},[9720,9725,9730,9735],{"type":70,"tag":111,"props":9721,"children":9722},{},[9723],{"type":76,"value":9724},"Join the community Slack for support",{"type":70,"tag":111,"props":9726,"children":9727},{},[9728],{"type":76,"value":9729},"Submit feature requests on GitHub Issues",{"type":70,"tag":111,"props":9731,"children":9732},{},[9733],{"type":76,"value":9734},"Contribute code via Pull Requests",{"type":70,"tag":111,"props":9736,"children":9737},{},[9738,9740],{"type":76,"value":9739},"Follow ",{"type":70,"tag":320,"props":9741,"children":9744},{"href":9742,"rel":9743},"https:\u002F\u002Fgithub.com\u002Fapache\u002Fseatunnel\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md",[324],[9745],{"type":76,"value":7889},{"type":70,"tag":866,"props":9747,"children":9748},{},[],{"type":70,"tag":79,"props":9750,"children":9751},{},[9752,9757,9759,9764,9766,9771],{"type":70,"tag":85,"props":9753,"children":9754},{},[9755],{"type":76,"value":9756},"Last Updated",{"type":76,"value":9758},": 2026-02-26\n",{"type":70,"tag":85,"props":9760,"children":9761},{},[9762],{"type":76,"value":9763},"Skill Version",{"type":76,"value":9765},": 2.3.13\n",{"type":70,"tag":85,"props":9767,"children":9768},{},[9769],{"type":76,"value":9770},"Sources",{"type":76,"value":9772},": apache\u002Fseatunnel + apache\u002Fseatunnel-website",{"type":70,"tag":9774,"props":9775,"children":9776},"style",{},[9777],{"type":76,"value":9778},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":9780,"total":180},[9781],{"slug":4,"name":4,"fn":5,"description":6,"org":9782,"tags":9783,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9784,9785,9786,9787],{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"items":9789,"total":9939},[9790,9806,9822,9835,9847,9860,9876,9887,9897,9908,9918,9928],{"slug":9791,"name":9791,"fn":9792,"description":9793,"org":9794,"tags":9795,"stars":9803,"repoUrl":9804,"updatedAt":9805},"datafusion-python","write Apache DataFusion Python code","Use when the user is writing datafusion-python (Apache DataFusion Python bindings) DataFrame or SQL code. Covers imports, data loading, DataFrame operations, expression building, SQL-to-DataFrame mappings, idiomatic patterns, and common pitfalls.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9796,9799,9801],{"name":9797,"slug":9798,"type":15},"Data Analysis","data-analysis",{"name":138,"slug":9800,"type":15},"python",{"name":9802,"slug":8589,"type":15},"SQL",593,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fdatafusion-python","2026-07-12T08:36:04.957626",{"slug":9807,"name":9807,"fn":9808,"description":9809,"org":9810,"tags":9811,"stars":9819,"repoUrl":9820,"updatedAt":9821},"bydbql","generate and execute BanyanDB BydbQL queries","Generate, validate, and optionally execute read-only BanyanDB BydbQL for STREAM, MEASURE, TRACE, and PROPERTY resources. Use when the user asks to query BanyanDB, translate natural language to BydbQL, inspect BanyanDB schema or data, validate BydbQL, or fetch raw BanyanDB records.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9812,9815,9818],{"name":9813,"slug":9814,"type":15},"Analytics","analytics",{"name":9816,"slug":9817,"type":15},"Database","database",{"name":9802,"slug":8589,"type":15},344,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking-banyandb","2026-07-12T08:31:01.294423",{"slug":9823,"name":9823,"fn":9824,"description":9825,"org":9826,"tags":9827,"stars":9819,"repoUrl":9820,"updatedAt":9834},"compiling","compile and build BanyanDB projects","Compile and build the SkyWalking BanyanDB project. Use when the user asks to compile, build, or generate code for this project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9828,9831],{"name":9829,"slug":9830,"type":15},"Build","build",{"name":9832,"slug":9833,"type":15},"Engineering","engineering","2026-07-12T08:31:06.373309",{"slug":9836,"name":9836,"fn":9837,"description":9838,"org":9839,"tags":9840,"stars":9819,"repoUrl":9820,"updatedAt":9846},"gh-pull-request","create GitHub pull requests for BanyanDB","Create a GitHub pull request for SkyWalking BanyanDB. Use when the user asks to create a PR, submit changes, or open a pull request.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9841,9843],{"name":9842,"slug":52,"type":15},"GitHub",{"name":9844,"slug":9845,"type":15},"Pull Requests","pull-requests","2026-07-12T08:31:03.792415",{"slug":9848,"name":9848,"fn":9849,"description":9850,"org":9851,"tags":9852,"stars":9819,"repoUrl":9820,"updatedAt":9859},"vendor-update","update Go and Node.js vendor dependencies","Upgrade Go\u002FNode.js vendor dependencies and sync tool versions. Use whenever the user says \"upgrade dependencies\", \"update vendors\", \"vendor update\", \"run vendor-upgrade\", \"bump dependencies\", \"update packages\", or asks to run the `vendor-update` Make target. This skill also checks `scripts\u002Fbuild\u002Fversion.mk` after upgrading to see if any tracked tool versions need updating too, and removes stale binaries from `bin\u002F` when versions change.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9853,9856],{"name":9854,"slug":9855,"type":15},"Go","go",{"name":9857,"slug":9858,"type":15},"Node.js","node-js","2026-07-12T08:31:02.555555",{"slug":9861,"name":9861,"fn":9862,"description":9863,"org":9864,"tags":9865,"stars":9873,"repoUrl":9874,"updatedAt":9875},"cayenne-cgen","generate Cayenne entity Java classes","Use this skill whenever the user wants to (re)generate Cayenne entity Java classes from a DataMap. Trigger on phrases like 'generate Java classes', 'regenerate entities', 'run cgen', 'create the entity classes', 'why is the Artist class missing fields', 'where did the `_Abstract*` classes come from', 'sync the entity classes with the model', or any request to materialize Java from the DataMap. Also trigger as a follow-up after modeling changes (someone added an entity, attribute, or relationship and now the Java side is stale). This skill exclusively uses the `mcp__cayenne__cgen_run` MCP tool — it does NOT use `mvn cayenne:cgen` or the Gradle cgen task.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9866,9869,9870],{"name":9867,"slug":9868,"type":15},"Data Modeling","data-modeling",{"name":118,"slug":59,"type":15},{"name":9871,"slug":9872,"type":15},"ORM","orm",343,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fcayenne","2026-07-12T08:32:33.575211",{"slug":9877,"name":9877,"fn":9878,"description":9879,"org":9880,"tags":9881,"stars":9873,"repoUrl":9874,"updatedAt":9886},"cayenne-db-import","import database schema into Cayenne DataMaps","Use this skill when the user wants to import database schema metadata into a Cayenne DataMap — the *model\u002Fmapping only*, not names or Java classes. Trigger on phrases like 'reverse engineer the database', 'import the schema', 'generate a DataMap from my DB', 'add the new tables from the DB into the model', 'import the customer table', 'create entities from these tables', or any request to read database metadata to populate or update a DataMap's XML. This is for *full schema* or *bulk table* import; one-off a-la-carte entity additions belong in the cayenne-modeling skill. IMPORTANT — scope: this imports the mapping ONLY; it does not clean up the Object-layer names or (re)generate Java classes. When the user wants their whole project brought in line with the DB ('sync my project with the database', 'my schema changed, update everything', 'update my entities\u002Fclasses from the DB'), that is the end-to-end `cayenne-full-db-sync` skill, which runs this import and then name cleanup and class generation. To regenerate classes alone use `cayenne-cgen`. The skill runs reverse engineering directly via the `mcp__cayenne__dbimport_run` MCP tool when a DBConnector is already configured; otherwise it opens the CayenneModeler GUI via `mcp__cayenne__open_project` to configure the connection first.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9882,9883,9884,9885],{"name":9816,"slug":9817,"type":15},{"name":118,"slug":59,"type":15},{"name":9871,"slug":9872,"type":15},{"name":9802,"slug":8589,"type":15},"2026-07-19T05:40:33.655062",{"slug":9888,"name":9888,"fn":9889,"description":9890,"org":9891,"tags":9892,"stars":9873,"repoUrl":9874,"updatedAt":9896},"cayenne-full-db-sync","synchronize Cayenne projects with database","Use this skill when the user wants to bring their WHOLE Cayenne project in line with the database in one shot — the mapping, the Object-layer names, and the generated Java classes together. This is the end-to-end 'sync with the DB' workflow, and it orchestrates three skills in order: `cayenne-db-import` (import schema metadata into the DataMap) → `cayenne-model-naming` (polish the just-imported names) → `cayenne-cgen` (regenerate Java classes). Trigger on holistic phrases like 'sync my project with the database', 'sync with the DB', 'my schema changed, update everything', 'update my entities\u002Fclasses from the database', 'reverse engineer and regenerate the classes', 'import the new tables and rebuild the entities', 'full DB sync', 'bring the model and classes up to date with the DB'. The distinguishing signal is scope: the user wants the whole project (mapping + names + Java code), not just one stage. For the *model\u002Fmapping only* (no name cleanup, no class generation) use `cayenne-db-import`; to (re)generate classes alone use `cayenne-cgen`; to clean names alone use `cayenne-model-naming`. Uses the `mcp__cayenne__dbimport_run` and `mcp__cayenne__cgen_run` MCP tools via the sub-skills; does NOT use Maven or Gradle goals.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9893,9894,9895],{"name":9816,"slug":9817,"type":15},{"name":118,"slug":59,"type":15},{"name":9871,"slug":9872,"type":15},"2026-07-19T06:03:49.112969",{"slug":9898,"name":9898,"fn":9899,"description":9900,"org":9901,"tags":9902,"stars":9873,"repoUrl":9874,"updatedAt":9907},"cayenne-model-naming","clean up Cayenne object-layer names","Use this skill to clean up Object-layer names in a Cayenne DataMap — ObjEntity, ObjAttribute, and ObjRelationship names, plus DbRelationship names (the first-class unit of relationship cleanup — every FK has one whether or not an ObjRelationship was generated; the ObjRelationship name is synced to it when one exists) — so they read as descriptive, consistent Java. Trigger on phrases like 'clean up the model names', 'fix the entity names', 'these names look ugly', 'make the names descriptive', 'normalize the ObjEntity\u002Fattribute\u002Frelationship names', 'why is this relationship called team1', 'rename entities to be consistent', 'the import produced Gametype instead of GameType'. Invoke it on an explicit user request, or as a manual follow-up after a `cayenne-db-import` to polish the just-imported additions — it is never triggered automatically. IMPORTANT: this is a LIGHT polish pass — CayenneModeler's reverse-engineering already produces good names for the common case; only improve the specific things its deterministic algorithm cannot (run-together names with no separators like `gametype`, meaningless numbered names like `team1` from multiple relationships between two tables, and a common entity prefix that leaks into relationship names like `aaOrders`). Do NOT rewrite names that are already correct. This is Obj-layer naming polish; for structural model edits use `cayenne-modeling`, and for regenerating classes afterward use `cayenne-cgen`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9903,9904,9905,9906],{"name":9867,"slug":9868,"type":15},{"name":9816,"slug":9817,"type":15},{"name":118,"slug":59,"type":15},{"name":9871,"slug":9872,"type":15},"2026-07-22T05:35:32.342548",{"slug":9909,"name":9909,"fn":9910,"description":9911,"org":9912,"tags":9913,"stars":9873,"repoUrl":9874,"updatedAt":9917},"cayenne-modeler","manage Cayenne projects with CayenneModeler","Use this skill when the user explicitly wants to open CayenneModeler (the GUI) on a Cayenne project, or when the modeling task is inherently visual — reverse engineering (delegated to cayenne-db-import), bulk relationship layout, multi-entity visual refactoring. Trigger on phrases like 'open the Modeler', 'open in CayenneModeler', 'launch the GUI', 'edit visually', 'show me the project in the Modeler'. Do NOT trigger as a fallback for ordinary a-la-carte XML edits — those belong in the cayenne-modeling skill, which is faster and doesn't require the user to context-switch.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9914,9915,9916],{"name":9867,"slug":9868,"type":15},{"name":118,"slug":59,"type":15},{"name":9871,"slug":9872,"type":15},"2026-07-12T08:32:37.199428",{"slug":9919,"name":9919,"fn":9920,"description":9921,"org":9922,"tags":9923,"stars":9873,"repoUrl":9874,"updatedAt":9927},"cayenne-modeling","edit and extend Cayenne ORM models","Use this skill whenever the user wants to edit, inspect, or extend the Cayenne ORM model in a project — adding or modifying entities, attributes, relationships, embeddables, named queries, stored procedures, or DataNodes. Trigger on phrases like 'add an ObjEntity', 'add a DbEntity', 'add a relationship', 'expose this column as an attribute', 'create a new DataMap', 'add a named query', 'create an embeddable', 'add a stored procedure', 'change the attribute type', 'mark this column as nullable', 'rename this entity', or any mention of a Cayenne `*.map.xml` or `cayenne-*.xml` file. Also trigger when the user references modeling concepts (ObjEntity, DbEntity, ObjAttribute, DbAttribute, ObjRelationship, DbRelationship, Embeddable, dbEntityName, deleteRule, db-attribute-path, db-relationship-path, defaultPackage) in the context of a Cayenne-using app. This is the *primary* skill for a-la-carte ORM model manipulation — direct XML edits, not the Modeler GUI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9924,9925,9926],{"name":9816,"slug":9817,"type":15},{"name":118,"slug":59,"type":15},{"name":9871,"slug":9872,"type":15},"2026-07-19T05:40:32.6889",{"slug":9929,"name":9929,"fn":9930,"description":9931,"org":9932,"tags":9933,"stars":9873,"repoUrl":9874,"updatedAt":9938},"cayenne-query","write and modify Cayenne database queries","Use this skill whenever the user wants to write or modify a Cayenne query — fetching entities by criteria, joining, prefetching to avoid N+1, ordering, paginating, aggregating, or running raw SQL through Cayenne. Trigger on phrases like 'query for X', 'fetch all artists where ...', 'write an ObjectSelect', 'use SQLSelect', 'use SelectById', 'add a prefetch', 'get distinct values', 'count rows', 'find by ID', 'load by primary key', 'build a Cayenne expression', 'why am I getting N+1', 'how do I paginate', 'select a single column', 'select columns into a DTO', 'named query in the DataMap'. Do NOT trigger for modeling changes (use cayenne-modeling) or runtime bootstrap (use cayenne-runtime).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9934,9935,9936,9937],{"name":9816,"slug":9817,"type":15},{"name":118,"slug":59,"type":15},{"name":9871,"slug":9872,"type":15},{"name":9802,"slug":8589,"type":15},"2026-07-12T08:32:35.072322",108]