All Products
Search
Document Center

Realtime Compute for Apache Flink:MySQL

Last Updated:Jul 11, 2026

Topik ini menjelaskan cara menggunakan konektor MySQL.

Informasi latar belakang

Konektor MySQL mendukung semua database yang kompatibel dengan protokol MySQL, seperti ApsaraDB RDS for MySQL, PolarDB for MySQL, OceanBase (mode MySQL), dan self-managed MySQL.

Penting

Saat menggunakan konektor MySQL untuk membaca data dari OceanBase, pastikan binary logging (binlog) diaktifkan dan dikonfigurasi dengan benar. Untuk informasi selengkapnya, lihat Operasi terkait binlog. Fitur ini berada dalam pratinjau publik. Gunakan fitur ini dengan hati-hati.

Konektor MySQL mendukung hal-hal berikut.

Kategori

Detail

Tipe yang didukung

Tabel sumber, tabel dimensi, tabel sink, dan sumber data ingesti data

Mode runtime

Hanya mode streaming yang didukung.

Format data

Tidak berlaku

Metrik pemantauan spesifik

Metrik pemantauan

  • Tabel sumber

    • currentFetchEventTimeLag: Interval dari saat data dihasilkan hingga ditarik oleh operator Source.

      Metrik ini hanya berlaku pada fase binary logging. Pada fase snapshot, nilainya selalu 0.

    • currentEmitEventTimeLag: Interval dari saat data dihasilkan hingga meninggalkan operator Source.

      Metrik ini hanya berlaku pada fase binary logging. Pada fase snapshot, nilainya selalu 0.

    • sourceIdleTime: Durasi tabel sumber tidak menghasilkan data baru.

  • Tabel dimensi dan tabel sink: Tidak ada.

Catatan

Untuk informasi selengkapnya tentang metrik, lihat Deskripsi metrik.

Tipe API

DataStream, SQL, dan YAML ingesti data

Mendukung pembaruan atau penghapusan data di tabel sink

Ya

Fitur

Tabel sumber change data capture (CDC) MySQL, juga dikenal sebagai tabel sumber streaming MySQL, pertama-tama membaca seluruh data historis dari database, lalu secara mulus beralih ke pembacaan log biner. Proses ini memastikan tidak ada data yang terlewat atau diduplikasi. Bahkan jika terjadi kegagalan, data diproses dengan semantik tepat-sekali (exactly-once semantics). Tabel sumber CDC MySQL mendukung pembacaan data penuh secara konkuren menggunakan algoritma snapshot inkremental untuk mencapai pembacaan tanpa penguncian (lock-free) dan transfer data yang dapat dilanjutkan (resumable). Untuk informasi selengkapnya, lihat Tentang tabel sumber CDC MySQL.

  • Pemrosesan batch dan stream terpadu yang mendukung pembacaan data penuh dan inkremental, sehingga menghilangkan kebutuhan untuk memelihara dua proses terpisah.

  • Pembacaan data penuh secara konkuren untuk penskalaan kinerja horizontal.

  • Peralihan mulus dari pembacaan data penuh ke pembacaan data inkremental dan skala-masuk otomatis untuk menghemat sumber daya komputasi.

  • Transfer data yang dapat dilanjutkan selama fase pembacaan data penuh untuk meningkatkan stabilitas.

  • Pembacaan data penuh tanpa penguncian, yang tidak memengaruhi layanan online.

  • Dukungan untuk membaca log cadangan ApsaraDB RDS for MySQL.

  • Penguraian paralel file log biner untuk latensi baca yang lebih rendah.

Prasyarat

Sebelum menggunakan tabel sumber CDC MySQL, Anda harus menyelesaikan operasi prasyarat yang dijelaskan dalam Konfigurasi MySQL.

ApsaraDB RDS for MySQL

  • Lakukan probe jaringan untuk memastikan konektivitas jaringan ke Realtime Compute for Apache Flink.

  • Versi MySQL: 5.6, 5.7, 8.0.x, atau 8.4.

  • Binary logging harus diaktifkan. Fitur ini diaktifkan secara default.

  • Format log biner harus ROW. Ini adalah format default.

  • Parameter `binlog_row_image` harus diatur ke FULL. Ini adalah pengaturan default.

  • Kompresi Transaksi Log Biner harus dinonaktifkan. Fitur ini diperkenalkan di MySQL 8.0.20 dan dinonaktifkan secara default.

  • Pengguna MySQL telah dibuat dengan izin SELECT, SHOW DATABASES, REPLICATION SLAVE, dan REPLICATION CLIENT.

  • Buat database dan tabel MySQL. Untuk informasi selengkapnya, lihat Buat database dan akun untuk instans ApsaraDB RDS for MySQL. Gunakan akun istimewa untuk membuat database MySQL guna mencegah kegagalan operasi akibat izin yang tidak mencukupi.

  • Konfigurasikan daftar putih alamat IP. Untuk informasi selengkapnya, lihat Konfigurasi daftar putih alamat IP untuk instans ApsaraDB RDS for MySQL.

PolarDB for MySQL

  • Lakukan probe jaringan untuk memastikan konektivitas jaringan ke Realtime Compute for Apache Flink.

  • Versi MySQL: 5.6, 5.7, 8.0.x, atau 8.4.

  • Binary logging harus diaktifkan. Fitur ini dinonaktifkan secara default.

  • Format log biner harus ROW. Ini adalah format default.

  • Parameter `binlog_row_image` harus diatur ke FULL. Ini adalah pengaturan default.

  • Kompresi Transaksi Log Biner harus dinonaktifkan. Fitur ini diperkenalkan di MySQL 8.0.20 dan dinonaktifkan secara default.

  • Pengguna MySQL telah dibuat dengan izin SELECT, SHOW DATABASES, REPLICATION SLAVE, dan REPLICATION CLIENT.

  • Buat database dan tabel MySQL. Untuk informasi selengkapnya, lihat Buat database dan akun untuk kluster PolarDB for MySQL. Gunakan akun istimewa untuk membuat database MySQL guna mencegah kegagalan operasi akibat izin yang tidak mencukupi.

  • Konfigurasikan daftar putih alamat IP. Untuk informasi selengkapnya, lihat Konfigurasi daftar putih alamat IP untuk kluster PolarDB for MySQL.

Self-managed MySQL

  • Lakukan probe jaringan untuk memastikan konektivitas jaringan ke Realtime Compute for Apache Flink.

  • Versi MySQL: 5.6, 5.7, 8.0.x, atau 8.4.

  • Binary logging harus diaktifkan. Fitur ini dinonaktifkan secara default.

  • Format log biner harus ROW. Format default adalah STATEMENT.

  • Parameter `binlog_row_image` harus diatur ke FULL. Ini adalah pengaturan default.

  • Kompresi Transaksi Log Biner harus dinonaktifkan. Fitur ini diperkenalkan di MySQL 8.0.20 dan dinonaktifkan secara default.

  • Buat pengguna MySQL dan berikan izin SELECT, SHOW DATABASES, REPLICATION SLAVE, dan REPLICATION CLIENT.

  • Buat database dan tabel MySQL. Untuk informasi selengkapnya, lihat Buat database dan akun untuk instans self-managed MySQL. Gunakan akun istimewa untuk membuat database MySQL guna mencegah kegagalan operasi akibat izin yang tidak mencukupi.

  • Konfigurasikan daftar putih alamat IP. Untuk informasi selengkapnya, lihat Konfigurasi daftar putih alamat IP untuk instans self-managed MySQL.

Batasan

Batasan umum

  • Tabel sumber CDC MySQL tidak mendukung definisi watermark.

  • Pada pekerjaan Create Table As Select (CTAS) dan Create Database As Select (CDAS), tabel sumber CDC MySQL dapat menyinkronkan beberapa perubahan skema. Untuk informasi selengkapnya tentang tipe perubahan yang didukung, lihat Kebijakan sinkronisasi evolusi skema.

  • Konektor CDC MySQL tidak mendukung fitur Kompresi Transaksi Log Biner. Oleh karena itu, saat menggunakan konektor CDC MySQL untuk mengonsumsi data inkremental, pastikan Kompresi Transaksi Log Biner dinonaktifkan. Jika tidak, konektor mungkin gagal mengambil data inkremental.

ApsaraDB RDS for MySQL batasan

  • Untuk ApsaraDB RDS for MySQL, jangan membaca data dari database secondary atau replika read-only. Hal ini karena periode retensi log biner default untuk database secondary dan replika read-only singkat. Jika log biner kedaluwarsa dan dihapus, pekerjaan mungkin gagal mengonsumsi data log biner dan melaporkan error.

  • ApsaraDB RDS for MySQL mengaktifkan sinkronisasi primer/sekunder paralel secara default tetapi tidak menjamin urutan transaksi yang konsisten antara instans primer dan sekunder. Hal ini dapat menyebabkan data terlewat selama alih bencana primer/sekunder dan pemulihan checkpoint. Untuk menghindari masalah ini, Anda dapat mengaktifkan opsi `slave_preserve_commit_order` secara manual untuk ApsaraDB RDS for MySQL.

PolarDB for MySQL batasan

Tabel sumber CDC MySQL tidak mendukung pembacaan data dari kluster arsitektur Multi-master Cluster PolarDB for MySQL V1.0.19 dan versi sebelumnya. Untuk informasi selengkapnya, lihat Apa itu Kluster Multi-master?. Log biner yang dihasilkan oleh kluster ini mungkin berisi ID tabel duplikat. Hal ini dapat menyebabkan error pemetaan skema pada tabel sumber CDC, yang mengakibatkan error saat mengurai data log biner.

Open source MySQL batasan

Secara default, MySQL mempertahankan urutan transaksi selama replikasi log biner primer/sekunder. Jika replika MySQL memiliki replikasi paralel diaktifkan (slave_parallel_workers > 1) tetapi tidak memiliki slave_preserve_commit_order=ON diaktifkan, urutan commit transaksinya mungkin tidak konsisten dengan database primer. Saat Flink CDC pulih dari checkpoint, data mungkin terlewat karena urutan yang tidak teratur. Anda dapat mengatur `slave_preserve_commit_order` = ON pada replika MySQL. Atau, Anda dapat mengatur `slave_parallel_workers` = 1, tetapi ini akan mengorbankan kinerja replikasi.

Catatan penggunaan

  • Tabel sumber

    • Setiap sumber data CDC MySQL memerlukan server ID yang unik.

      Tujuan Server ID

      Setiap sumber data CDC MySQL memerlukan server ID yang unik. Jika beberapa sumber data CDC MySQL berbagi server ID yang sama dan tidak dapat digunakan kembali, offset log biner dapat menjadi tidak teratur. Hal ini dapat menyebabkan data dibaca lebih dari sekali atau terlewat.

      Konfigurasi Server ID untuk berbagai skenario

      Anda dapat menentukan server ID dalam pernyataan Data Definition Language (DDL). Namun, kami menyarankan agar Anda mengonfigurasi server ID menggunakan dynamic hints daripada parameter DDL.

      • Tingkat paralelisme = 1 atau snapshot inkremental dinonaktifkan

        ## Jika framework snapshot inkremental dinonaktifkan atau tingkat paralelisme adalah 1, Anda dapat menentukan Server ID tertentu.
        SELECT * FROM source_table /*+ OPTIONS('server-id'='123456') */ ;
      • Tingkat paralelisme > 1 dan snapshot inkremental diaktifkan

        ## Anda harus menentukan rentang Server ID. Jumlah Server ID yang tersedia dalam rentang tersebut harus lebih besar dari atau sama dengan tingkat paralelisme. Misalnya, tingkat paralelisme adalah 3.
        SELECT * FROM source_table /*+ OPTIONS('server-id'='123456-123458') */ ;
      • CTAS untuk sinkronisasi data

        Saat Anda menggunakan CTAS untuk sinkronisasi data, jika sumber data CDC memiliki konfigurasi yang sama, sumber data tersebut akan digunakan kembali secara otomatis. Dalam kasus ini, Anda dapat mengonfigurasi server ID yang sama untuk beberapa sumber data CDC. Untuk informasi selengkapnya, lihat Contoh 4: Beberapa pernyataan CTAS.

      • Beberapa tabel sumber non-CTAS yang tidak dapat digunakan kembali

        Jika pekerjaan berisi beberapa tabel sumber CDC MySQL dan tidak menggunakan pernyataan CTAS untuk sinkronisasi, sumber data tidak dapat digunakan kembali. Anda harus memberikan server ID yang berbeda untuk setiap tabel sumber CDC. Demikian pula, jika framework snapshot inkremental diaktifkan dan tingkat paralelisme lebih besar dari 1, Anda harus menentukan rentang server ID.

        select * from 
          source_table1 /*+ OPTIONS('server-id'='123456-123457') */
        left join 
          source_table2 /*+ OPTIONS('server-id'='123458-123459') */
        on source_table1.id=source_table2.id;
    • Selama fase pembacaan data penuh, Anda tidak dapat menyimpan titik simpan, menambahkan atau menghapus tabel dari tabel sumber, lalu me-restart pekerjaan dari titik simpan tersebut. Jika Anda melakukan operasi ini, pekerjaan akan gagal membaca data.

  • Tabel sink

    • Primary key auto-increment: Jangan deklarasikan primary key auto-increment dalam DDL. MySQL akan mengisinya secara otomatis saat menulis data.

    • Anda harus mendeklarasikan setidaknya satu bidang non-primary key. Jika tidak, error akan dilaporkan.

    • Kendala `NOT ENFORCED` dalam DDL menunjukkan bahwa Flink tidak menegakkan validasi primary key. Anda bertanggung jawab untuk memastikan kebenaran dan integritas primary key. Untuk informasi selengkapnya, lihat Pemeriksaan Validitas.

  • Tabel dimensi

    Jika Anda ingin menggunakan indeks untuk mempercepat kueri, urutan bidang dalam klausa JOIN harus sesuai dengan urutan yang ditentukan dalam indeks, sesuai aturan awalan paling kiri (leftmost prefix rule). Misalnya, jika indeksnya adalah (a, b, c), kondisi JOIN-nya adalah ON t.a = x AND t.b = y.

    Pernyataan SQL yang dihasilkan oleh Flink mungkin ditulis ulang oleh pengoptimal. Hal ini dapat mencegah indeks terkena selama kueri database aktual. Untuk memastikan apakah indeks digunakan, periksa rencana eksekusi (EXPLAIN) atau log kueri lambat di MySQL untuk melihat pernyataan SELECT aktual yang dieksekusi.

SQL

Anda dapat menggunakan konektor MySQL dalam pekerjaan SQL sebagai tabel sumber, tabel dimensi, atau tabel sink.

Sintaks

CREATE TEMPORARY TABLE mysqlcdc_source (
   order_id INT,
   order_date TIMESTAMP(0),
   customer_name STRING,
   price DECIMAL(10, 5),
   product_id INT,
   order_status BOOLEAN,
   PRIMARY KEY(order_id) NOT ENFORCED
) WITH (
  'connector' = 'mysql',
  'hostname' = '<yourHostname>',
  'port' = '3306',
  'username' = '<yourUsername>',
  'password' = '<yourPassword>',
  'database-name' = '<yourDatabaseName>',
  'table-name' = '<yourTableName>'
);

Catatan
  • Saat menulis ke tabel sink, konektor membuat dan mengeksekusi pernyataan SQL untuk setiap catatan data yang diterima. Pernyataannya disusun sebagai berikut:

    • Untuk tabel sink tanpa primary key, pernyataan INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); dieksekusi.

    • Untuk tabel sink dengan primary key, pernyataan INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...) ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2), ...; dieksekusi. Catatan: Jika tabel fisik memiliki kendala indeks unik selain primary key, memasukkan dua catatan dengan primary key berbeda tetapi nilai indeks unik yang sama menyebabkan konflik indeks unik. Hal ini mengakibatkan data ditimpa dan hilang.

  • Jika primary key auto-increment didefinisikan dalam database MySQL, jangan deklarasikan kolom auto-increment dalam DDL Flink. Database akan mengisi bidang ini secara otomatis saat menulis data. Konektor mendukung penulisan dan penghapusan data dengan kolom auto-increment, tetapi tidak mendukung pembaruan data ini.

Parameter WITH

  • Umum

    Parameter

    Deskripsi

    Wajib

    Tipe data

    Nilai default

    Catatan

    connector

    Tipe tabel.

    Ya

    STRING

    Tidak ada

    Saat digunakan sebagai tabel sumber, Anda dapat mengatur parameter ini ke mysql-cdc atau mysql. Keduanya setara. Saat digunakan sebagai tabel dimensi atau tabel sink, nilainya harus mysql.

    hostname

    Alamat IP atau hostname database MySQL.

    Ya

    STRING

    Tidak ada

    Kami menyarankan agar Anda menentukan alamat virtual private cloud (VPC).

    Catatan

    Jika database MySQL dan Realtime Compute for Apache Flink tidak berada dalam VPC yang sama, Anda harus membuat koneksi jaringan cross-VPC atau menggunakan titik akhir publik untuk mengakses database. Untuk informasi selengkapnya, lihat Kelola dan operasikan ruang kerja dan Bagaimana kluster Flink yang sepenuhnya dikelola mengakses Internet?.

    username

    Nama pengguna untuk layanan database MySQL.

    Ya

    STRING

    Tidak ada

    Tidak ada.

    password

    Kata sandi untuk layanan database MySQL.

    Ya

    STRING

    Tidak ada

    Tidak ada.

    database-name

    Nama database MySQL.

    Ya

    STRING

    Tidak ada

    • Saat database digunakan sebagai tabel sumber, Anda dapat menggunakan ekspresi reguler untuk nama database guna membaca data dari beberapa database.

    • Saat menggunakan ekspresi reguler, jangan gunakan simbol ^ dan $ untuk mencocokkan awal dan akhir string. Untuk informasi selengkapnya, lihat catatan untuk parameter table-name.

    table-name

    Nama tabel MySQL.

    Ya

    STRING

    Tidak ada

    • Anda dapat menggunakan ekspresi reguler untuk nama tabel sumber guna membaca data dari beberapa tabel.

      Saat Anda membaca data dari beberapa tabel MySQL, kirim beberapa pernyataan CTAS sebagai satu Pekerjaan. Hal ini menghindari pengaktifan beberapa Pendengar log biner dan meningkatkan performa dan efisiensi. Untuk informasi selengkapnya, lihat Beberapa pernyataan CTAS: Kirim sebagai satu Pekerjaan.

    • Saat menggunakan ekspresi reguler, jangan gunakan simbol ^ dan $ untuk mencocokkan awal dan akhir string. Untuk informasi selengkapnya, lihat catatan berikut.

    Catatan

    Saat tabel sumber CDC MySQL mencocokkan nama tabel menggunakan ekspresi reguler, konektor menggabungkan database-name dan table-name yang Anda tentukan dengan string \\. untuk membentuk ekspresi reguler jalur lengkap. Sebelum VVR 8.0.1, karakter . digunakan. Konektor kemudian menggunakan ekspresi reguler ini untuk mencocokkan nama tabel yang memenuhi syarat sepenuhnya di database MySQL.

    Misalnya, jika Anda mengatur 'database-name'='db_.*' dan 'table-name'='tb_.+', konektor menggunakan ekspresi reguler db_.*\\.tb_.+ untuk mencocokkan nama tabel yang memenuhi syarat sepenuhnya guna menentukan tabel mana yang akan dibaca. Sebelum VVR 8.0.1, ekspresi regulernya adalah db_.*.tb_.+.

    port

    Nomor port layanan database MySQL.

    Tidak

    INTEGER

    3306

    Tidak ada.

  • Hanya untuk tabel sumber

    Parameter

    Deskripsi

    Wajib

    Tipe data

    Nilai default

    Catatan

    server-id

    ID numerik untuk klien database.

    Tidak

    STRING

    Nilai acak antara 5400 dan 6400 dihasilkan.

    ID ini harus unik secara global dalam kluster MySQL. Tetapkan ID yang berbeda untuk setiap pekerjaan yang terhubung ke database yang sama.

    Parameter ini juga mendukung format rentang ID, seperti 5400-5408. Saat pembacaan inkremental diaktifkan, pembacaan konkuren didukung. Dalam hal ini, tetapkan rentang ID sehingga setiap pembaca konkuren menggunakan ID yang berbeda. Untuk informasi selengkapnya, lihat Gunakan Server ID.

    scan.incremental.snapshot.enabled

    Menentukan apakah akan mengaktifkan snapshot inkremental.

    Tidak

    BOOLEAN

    true

    Snapshot inkremental diaktifkan secara default. Snapshot inkremental adalah mekanisme baru untuk membaca snapshot data penuh. Dibandingkan dengan metode pembacaan snapshot lama, snapshot inkremental memiliki banyak keunggulan, termasuk:

    • Sumber dapat membaca data penuh secara paralel.

    • Sumber mendukung checkpoint tingkat chunk saat membaca data penuh.

    • Sumber tidak perlu memperoleh kunci baca global (FLUSH TABLES WITH read lock) saat membaca data penuh.

    Jika Anda ingin sumber mendukung pembacaan konkuren, setiap pembaca konkuren memerlukan server ID yang unik. Oleh karena itu, server-id harus berupa rentang, seperti 5400-6400, dan ukuran rentangnya harus lebih besar dari atau sama dengan tingkat konkurensi.

    Catatan

    Item konfigurasi ini dihapus di Ververica Runtime (VVR) 11.1 dan versi selanjutnya.

    scan.incremental.snapshot.chunk.size

    Ukuran setiap chunk dalam jumlah baris.

    Tidak

    INTEGER

    8096

    Saat pembacaan snapshot inkremental diaktifkan, tabel dibagi menjadi beberapa chunk untuk dibaca. Data chunk di-cache dalam memori sebelum sepenuhnya dibaca.

    Semakin sedikit baris yang dikandung setiap chunk, semakin besar jumlah total chunk dalam tabel. Meskipun hal ini mengurangi granularitas pemulihan kesalahan, hal ini dapat menyebabkan error kehabisan memori (OOM) dan menurunkan throughput keseluruhan. Oleh karena itu, Anda perlu membuat pertimbangan dan mengatur ukuran chunk yang wajar.

    scan.snapshot.fetch.size

    Jumlah maksimum catatan yang ditarik sekaligus saat membaca data penuh tabel.

    Tidak

    INTEGER

    1024

    Tidak ada.

    scan.startup.mode

    Mode startup untuk konsumsi data.

    Tidak

    STRING

    initial

    Nilai yang valid:

    • initial (default): Saat startup pertama, konektor memindai data historis penuh lalu membaca data log biner terbaru.

    • latest-offset: Saat startup pertama, konektor tidak memindai data historis. Konektor mulai membaca dari akhir log biner, artinya hanya membaca perubahan terbaru setelah konektor dimulai.

    • earliest-offset: Konektor tidak memindai data historis. Konektor mulai membaca dari log biner yang tersedia paling awal.

    • specific-offset: Konektor tidak memindai data historis. Konektor mulai dari offset log biner tertentu. Anda dapat menentukan offset dengan mengonfigurasi scan.startup.specific-offset.file dan scan.startup.specific-offset.pos, atau hanya mengonfigurasi scan.startup.specific-offset.gtid-set untuk memulai dari set GTID tertentu.

    • timestamp: Konektor tidak memindai data historis. Konektor mulai membaca log biner dari timestamp tertentu. Timestamp ditentukan oleh scan.startup.timestamp-millis dalam milidetik.

    Penting

    Saat menggunakan mode startup earliest-offset, specific-offset, atau timestamp, pastikan skema tabel yang sesuai tidak berubah antara posisi konsumsi log biner yang ditentukan dan waktu startup pekerjaan. Hal ini mencegah error akibat ketidakcocokan skema.

    scan.startup.specific-offset.file

    Nama file log biner untuk offset awal saat menggunakan mode startup specific-offset.

    Tidak

    STRING

    Tidak ada

    Saat menggunakan parameter ini, Anda harus mengatur scan.startup.mode ke specific-offset. Contoh format nama file: mysql-bin.000003.

    scan.startup.specific-offset.pos

    Offset dalam file log biner yang ditentukan untuk offset awal saat menggunakan mode startup specific-offset.

    Tidak

    INTEGER

    Tidak ada

    Saat menggunakan parameter ini, Anda harus mengatur scan.startup.mode ke specific-offset.

    scan.startup.specific-offset.gtid-set

    Set GTID untuk offset awal saat menggunakan mode startup specific-offset.

    Tidak

    STRING

    Tidak ada

    Saat menggunakan parameter ini, Anda harus mengatur scan.startup.mode ke specific-offset. Contoh format set GTID: 24DA167-0C0C-11E8-8442-00059A3C7B00:1-19.

    scan.startup.timestamp-millis

    Timestamp dalam milidetik untuk offset awal saat menggunakan mode startup timestamp.

    Tidak

    LONG

    Tidak ada

    Saat menggunakan parameter ini, Anda harus mengatur scan.startup.mode ke timestamp. Satuan timestamp adalah milidetik.

    Penting

    Saat Anda menentukan waktu, CDC MySQL mencoba membaca event awal setiap file log biner untuk menentukan timestamp-nya. Kemudian, CDC MySQL menemukan file log biner yang sesuai dengan waktu yang ditentukan. Pastikan file log biner yang sesuai dengan timestamp yang ditentukan belum dihapus dari database dan dapat dibaca.

    server-time-zone

    Zona waktu sesi yang digunakan oleh database.

    Tidak

    STRING

    Jika Anda tidak menentukan parameter ini, sistem menggunakan zona waktu lingkungan runtime pekerjaan Flink sebagai zona waktu server database. Ini adalah zona waktu zona yang Anda pilih.

    Contoh: Asia/Shanghai. Parameter ini mengontrol bagaimana tipe TIMESTAMP di MySQL dikonversi ke tipe STRING. Untuk informasi selengkapnya, lihat Nilai temporal Debezium.

    debezium.min.row.count.to.stream.results

    Saat jumlah baris dalam tabel lebih besar dari nilai ini, mode pembacaan batch digunakan.

    Tidak

    INTEGER

    1000

    Flink membaca data dari tabel sumber MySQL dengan salah satu cara berikut:

    • Baca penuh: Membaca seluruh data tabel langsung ke memori. Metode ini cepat tetapi mengonsumsi memori yang sesuai. Jika tabel sumber sangat besar, ada risiko error OOM.

    • Baca batch: Membaca data dalam beberapa batch, dengan jumlah baris tertentu per batch, hingga semua data dibaca. Metode ini menghindari risiko OOM saat membaca tabel besar tetapi relatif lambat.

    connect.timeout

    Waktu maksimum menunggu koneksi ke server database MySQL hingga timeout sebelum mencoba lagi.

    Tidak

    DURATION

    30s

    Tidak ada.

    connect.max-retries

    Jumlah maksimum percobaan ulang setelah koneksi ke layanan database MySQL gagal.

    Tidak

    INTEGER

    3

    Tidak ada.

    connection.pool.size

    Ukuran kolam koneksi database.

    Tidak

    INTEGER

    20

    Kolam koneksi database digunakan untuk menggunakan kembali koneksi, yang dapat mengurangi jumlah koneksi database.

    jdbc.properties.*

    Parameter koneksi kustom dalam URL JDBC.

    Tidak

    STRING

    Tidak ada

    Anda dapat meneruskan parameter koneksi kustom. Misalnya, untuk tidak menggunakan protokol SSL, Anda dapat mengonfigurasi 'jdbc.properties.useSSL' = 'false'.

    Untuk informasi selengkapnya tentang parameter koneksi yang didukung, lihat Properti Konfigurasi MySQL.

    debezium.*

    Parameter kustom untuk Debezium guna membaca log biner.

    Tidak

    STRING

    Tidak ada

    Anda dapat meneruskan parameter Debezium kustom. Misalnya, gunakan 'debezium.event.deserialization.failure.handling.mode'='ignore' untuk menentukan logika penanganan error penguraian.

    Peringatan

    Jangan mengubah parameter Debezium secara sembarangan. Hal ini dapat menyebabkan konektor membaca data secara salah. Misalnya, parameter debezium.binlog.buffer.size tidak boleh dikonfigurasi.

    heartbeat.interval

    Interval sumber memajukan offset log biner menggunakan event heartbeat.

    Tidak

    DURATION

    30s

    Event heartbeat digunakan untuk memajukan offset log biner di sumber. Hal ini sangat berguna untuk tabel di MySQL yang jarang diperbarui. Untuk tabel tersebut, offset log biner tidak dapat maju secara otomatis. Event heartbeat dapat mendorong offset log biner maju, yang mencegah masalah akibat offset log biner yang kedaluwarsa. Offset log biner yang kedaluwarsa dapat menyebabkan pekerjaan gagal dan tidak dapat dipulihkan, sehingga memerlukan restart tanpa status.

    scan.incremental.snapshot.chunk.key-column

    Menentukan kolom yang akan digunakan sebagai kolom pemisah untuk sharding selama fase snapshot.

    Lihat kolom Catatan.

    STRING

    Tidak ada

    • Wajib untuk tabel tanpa primary key. Kolom yang dipilih harus bertipe non-null (NOT NULL).

    • Opsional untuk tabel dengan primary key. Hanya satu kolom yang dapat dipilih dari primary key.

    rds.region-id

    ID wilayah instans Alibaba Cloud ApsaraDB RDS for MySQL.

    Wajib saat menggunakan fitur untuk membaca log arsip dari OSS.

    STRING

    Tidak ada

    Untuk informasi selengkapnya tentang ID wilayah, lihat Wilayah dan zona.

    Penting

    Karena string GTID untuk CDC MySQL dihasilkan secara acak dan tidak meningkat secara monoton seperti offset file log biner, menemukan GTID dalam file memerlukan pengunduhan dan penguraian semua log arsip dari OSS. Proses ini sangat intensif sumber daya dan memakan waktu, sehingga fitur yang bergantung pada offset GTID tidak layak. Oleh karena itu, fitur log arsip OSS hanya mendukung pemulaian dari timestamp tertentu atau offset file log biner tertentu. Fitur ini tidak mendukung pemulaian dari GTID tertentu, maupun skenario dengan alih bencana primer/sekunder dalam log arsip, karena alih bencana primer/sekunder MySQL bergantung pada GTID. Evaluasi fitur ini dengan hati-hati sebelum digunakan.

    rds.access-key-id

    ID AccessKey akun Alibaba Cloud ApsaraDB RDS for MySQL.

    Wajib saat menggunakan fitur untuk membaca log arsip dari OSS.

    STRING

    Tidak ada

    Untuk informasi selengkapnya, lihat Bagaimana cara melihat ID AccessKey dan Rahasia AccessKey?.

    Penting

    Untuk mencegah informasi AccessKey Anda bocor, gunakan fitur manajemen rahasia untuk menentukan ID AccessKey. Untuk informasi selengkapnya, lihat Kelola variabel.

    rds.access-key-secret

    Rahasia AccessKey akun Alibaba Cloud ApsaraDB RDS for MySQL.

    Wajib saat menggunakan fitur untuk membaca log arsip dari OSS.

    STRING

    Tidak ada

    Untuk informasi selengkapnya, lihat Bagaimana cara melihat ID AccessKey dan Rahasia AccessKey?

    Penting

    Untuk mencegah informasi AccessKey Anda bocor, gunakan fitur manajemen rahasia untuk menentukan Rahasia AccessKey. Untuk informasi selengkapnya, lihat Kelola variabel.

    rds.db-instance-id

    ID instans Alibaba Cloud ApsaraDB RDS for MySQL.

    Wajib saat menggunakan fitur untuk membaca log arsip dari OSS.

    STRING

    Tidak ada

    Tidak ada.

    rds.main-db-id

    Nomor database primer instans Alibaba Cloud ApsaraDB RDS for MySQL.

    Tidak

    STRING

    Tidak ada

    Catatan

    Jika parameter ini tidak ditentukan, VVR 11.7 dan versi selanjutnya secara otomatis mengkueri nomor database primer berdasarkan informasi koneksi ApsaraDB RDS for MySQL.

    rds.download.timeout

    Periode timeout untuk mengunduh satu log arsip dari OSS.

    Tidak

    DURATION

    60s

    Tidak ada.

    rds.endpoint

    Titik akhir layanan untuk mendapatkan informasi log biner OSS.

    Tidak

    STRING

    Tidak ada

    • Untuk informasi selengkapnya tentang nilai yang valid, lihat Titik akhir.

    • Didukung hanya di VVR 8.0.8 dan versi selanjutnya.

    scan.incremental.close-idle-reader.enabled

    Menentukan apakah akan menutup pembaca idle setelah snapshot selesai.

    Tidak

    BOOLEAN

    false

    • Didukung hanya di VVR 8.0.1 dan versi selanjutnya.

    • Agar konfigurasi ini berlaku, Anda harus mengatur execution.checkpointing.checkpoints-after-tasks-finish.enabled ke true.

    scan.read-changelog-as-append-only.enabled

    Menentukan apakah akan mengonversi aliran data changelog menjadi aliran data append-only.

    Tidak

    BOOLEAN

    false

    Nilai yang valid:

    • true: Semua jenis pesan, termasuk INSERT, DELETE, UPDATE_BEFORE, dan UPDATE_AFTER, dikonversi menjadi pesan INSERT. Aktifkan opsi ini hanya dalam skenario khusus, seperti saat Anda perlu menyimpan pesan hapus dari tabel hulu.

    • false (default): Semua jenis pesan dikirim ke hilir sebagaimana adanya.

    Catatan

    Didukung hanya di VVR 8.0.8 dan versi selanjutnya.

    scan.only.deserialize.captured.tables.changelog.enabled

    Pada fase inkremental, menentukan apakah hanya akan mendeserialisasi event perubahan dari tabel yang ditentukan.

    Tidak

    BOOLEAN

    • Nilai default adalah false di versi VVR 8.x.

    • Nilai default adalah true di VVR 11.1 dan versi selanjutnya.

    Nilai yang valid:

    • true: Hanya mendeserialisasi data perubahan dari tabel target untuk mempercepat pembacaan log biner.

    • false (default): Mendeserialisasi data perubahan dari semua tabel.

    Catatan
    • Didukung hanya di VVR 8.0.7 dan versi selanjutnya.

    • Saat Anda menggunakan VVR 8.0.8 atau versi sebelumnya, Anda harus mengubah nama parameter menjadi debezium.scan.only.deserialize.captured.tables.changelog.enable.

    scan.parse.online.schema.changes.enabled

    Pada fase inkremental, menentukan apakah akan mencoba mengurai event DDL perubahan tanpa penguncian RDS.

    Tidak

    BOOLEAN

    false

    Nilai yang valid:

    • true: Mengurai event DDL perubahan tanpa penguncian RDS.

    • false (default): Tidak mengurai event DDL perubahan tanpa penguncian RDS.

    Ini adalah fitur eksperimental. Sebelum melakukan perubahan tanpa penguncian online, ambil snapshot pekerjaan Flink untuk pemulihan.

    Catatan

    Didukung hanya di VVR 11.1 dan versi selanjutnya.

    scan.incremental.snapshot.backfill.skip

    Menentukan apakah akan melewati backfill selama fase pembacaan snapshot.

    Tidak

    BOOLEAN

    false

    Nilai yang valid:

    • true: Melewati backfill selama fase pembacaan snapshot.

    • false (default): Tidak melewati backfill selama fase pembacaan snapshot.

    Jika backfill dilewati, perubahan pada tabel selama fase snapshot dibaca dalam fase inkremental berikutnya, bukan digabungkan ke dalam snapshot.

    Penting

    Melewati backfill dapat menyebabkan ketidakkonsistenan data karena perubahan yang terjadi selama fase snapshot mungkin diputar ulang. Hanya semantik at-least-once yang dijamin.

    Catatan

    Didukung hanya di VVR 11.1 dan versi selanjutnya.

    scan.incremental.snapshot.unbounded-chunk-first.enabled

    Menentukan apakah akan mengirim chunk tak terbatas terlebih dahulu selama fase pembacaan snapshot.

    Tidak

    BOOELEAN

    false

    Nilai yang valid:

    • true: Mengirim chunk tak terbatas terlebih dahulu selama fase pembacaan snapshot.

    • false (default): Tidak mengirim chunk tak terbatas terlebih dahulu selama fase pembacaan snapshot.

    Ini adalah fitur eksperimental. Mengaktifkannya dapat mengurangi risiko error OOM pada Pengelola Tugas saat menyinkronkan chunk terakhir selama fase snapshot. Tambahkan parameter ini sebelum startup pertama pekerjaan.

    Catatan

    Didukung hanya di VVR 11.1 dan versi selanjutnya.

    binlog.session.network.timeout

    Timeout baca/tulis jaringan untuk koneksi log biner.

    Tidak

    DURATION

    10m

    Jika diatur ke 0s, timeout default server MySQL digunakan.

    Catatan

    Didukung hanya di VVR 11.5 dan versi selanjutnya.

    scan.rate-limit.records-per-second

    Membatasi jumlah maksimum catatan yang dikirim oleh sumber per detik.

    Tidak

    LONG

    Tidak ada

    Ini berlaku untuk skenario di mana pembacaan data perlu dibatasi. Batasan ini berlaku baik dalam fase penuh maupun inkremental.

    Metrik numRecordsOutPerSecond dari sumber mencerminkan jumlah catatan yang dikeluarkan oleh seluruh aliran data per detik. Anda dapat menyesuaikan parameter ini berdasarkan metrik tersebut.

    Dalam fase pembacaan data penuh, Anda biasanya perlu mengurangi jumlah baris yang dibaca dalam setiap batch. Anda dapat mengurangi nilai parameter scan.incremental.snapshot.chunk.size.

    Catatan

    Didukung hanya di VVR 11.5 dan versi selanjutnya.

    scan.binlog.tolerate.gtid-holes

    Mengaktifkan parameter ini mengabaikan celah dalam urutan GTID, memungkinkan pekerjaan melewati event yang tidak berurutan dan terus berjalan.

    Tidak

    BOOLEAN

    false

    Sebelum mengaktifkan parameter ini, Anda harus memastikan bahwa offset awal pekerjaan belum kedaluwarsa. Jika pekerjaan dimulai dari offset GTID yang dihapus atau kedaluwarsa, mesin akan diam-diam melewatkan log yang hilang, yang akan menyebabkan kehilangan data.

    Catatan

    Parameter ini didukung hanya di VVR 11.6 dan versi selanjutnya.

  • Parameter khusus tabel dimensi

    Parameter

    Deskripsi

    Wajib

    Tipe data

    Nilai default

    Catatan

    url

    URL JDBC MySQL.

    Tidak

    STRING

    Tidak ada

    Format URL adalah: jdbc:mysql://<endpoint>:<port>/<database_name>.

    lookup.max-retries

    Jumlah maksimum percobaan ulang setelah pembacaan data gagal.

    Tidak

    INTEGER

    3

    Didukung hanya di VVR 6.0.7 dan versi selanjutnya.

    lookup.cache.strategy

    Kebijakan cache.

    Tidak

    STRING

    Tidak ada

    Kebijakan cache yang didukung adalah None, LRU, dan ALL. Untuk informasi selengkapnya tentang nilai-nilai tersebut, lihat Pernyataan JOIN tabel dimensi.

    Catatan

    Saat Anda menggunakan kebijakan cache LRU, Anda juga harus mengonfigurasi parameter lookup.cache.max-rows.

    lookup.cache.max-rows

    Jumlah maksimum baris yang di-cache.

    Tidak

    INTEGER

    100000

    • Jika Anda memilih kebijakan cache LRU, Anda harus mengatur ukuran cache.

    • Jika Anda memilih kebijakan cache ALL, Anda tidak perlu mengatur ukuran cache.

    lookup.cache.ttl

    Waktu hidup (TTL) cache.

    Tidak

    DURATION

    10 s

    Konfigurasi lookup.cache.ttl bergantung pada lookup.cache.strategy:

    • Jika lookup.cache.strategy diatur ke None, Anda tidak perlu mengonfigurasi lookup.cache.ttl. Artinya cache tidak kedaluwarsa.

    • Jika lookup.cache.strategy diatur ke LRU, lookup.cache.ttl adalah TTL cache. Secara default, cache tidak kedaluwarsa.

    • Jika lookup.cache.strategy diatur ke ALL, lookup.cache.ttl adalah waktu pemuatan cache. Secara default, cache tidak dimuat ulang.

    Gunakan format waktu, seperti 1min atau 10s.

    lookup.max-join-rows

    Jumlah maksimum hasil yang dikembalikan saat catatan dari tabel primer cocok dengan catatan di tabel dimensi.

    Tidak

    INTEGER

    1024

    Tidak ada.

    lookup.filter-push-down.enabled

    Menentukan apakah akan mengaktifkan pushdown filter untuk tabel dimensi.

    Tidak

    BOOLEAN

    false

    Nilai yang valid:

    • true: Mengaktifkan pushdown filter untuk tabel dimensi. Saat memuat data dari tabel database MySQL, tabel dimensi memfilter data terlebih dahulu berdasarkan kondisi yang ditetapkan dalam pekerjaan SQL.

    • false (default): Menonaktifkan pushdown filter untuk tabel dimensi. Saat memuat data dari tabel database MySQL, tabel dimensi memuat semua data.

    Catatan

    Didukung hanya di VVR 8.0.7 dan versi selanjutnya.

    Penting

    Pushdown tabel dimensi hanya boleh diaktifkan saat tabel Flink digunakan sebagai tabel dimensi. Tabel sumber MySQL tidak mendukung pengaktifan pushdown filter. Jika tabel Flink digunakan sebagai tabel sumber dan tabel dimensi, dan pushdown filter diaktifkan untuk tabel dimensi, Anda harus secara eksplisit mengatur item konfigurasi ini ke false untuk tabel sumber menggunakan Petunjuk SQL. Jika tidak, pekerjaan mungkin berjalan tidak normal.

  • Hanya untuk tabel sink

    Parameter

    Deskripsi

    Wajib

    Tipe data

    Nilai default

    Catatan

    url

    URL JDBC MySQL.

    Tidak

    STRING

    Tidak ada

    Format URL adalah: jdbc:mysql://<endpoint>:<port>/<database_name>.

    sink.max-retries

    Jumlah maksimum percobaan ulang setelah penulisan data gagal.

    Tidak

    INTEGER

    3

    Tidak ada.

    sink.buffer-flush.batch-size

    Jumlah baris dalam satu penulisan batch.

    Tidak

    INTEGER

    4096

    Tidak ada.

    sink.buffer-flush.max-rows

    Jumlah baris data yang di-cache dalam memori.

    Tidak

    INTEGER

    10000

    Parameter ini hanya berlaku setelah primary key ditentukan.

    sink.buffer-flush.interval

    Interval untuk membersihkan cache. Jika data dalam cache tidak memenuhi kondisi output setelah waktu tunggu yang ditentukan, sistem secara otomatis mengeluarkan semua data dalam cache.

    Tidak

    DURATION

    1s

    Tidak ada.

    sink.ignore-delete

    Menentukan apakah akan mengabaikan operasi DELETE data.

    Tidak

    BOOLEAN

    false

    Saat aliran yang dihasilkan oleh Flink SQL menyertakan catatan hapus atau update-before, jika beberapa tugas output memperbarui bidang berbeda dari tabel yang sama secara bersamaan, ketidakkonsistenan data dapat terjadi.

    Misalnya, setelah catatan dihapus, tugas lain hanya memperbarui beberapa bidang. Bidang yang tidak diperbarui akan menjadi null atau nilai default, menyebabkan error data.

    Dengan mengatur sink.ignore-delete ke true, Anda dapat mengabaikan operasi DELETE dan UPDATE_BEFORE hulu untuk menghindari masalah tersebut.

    Catatan
    • UPDATE_BEFORE adalah bagian dari mekanisme retraksi Flink, digunakan untuk "menarik kembali" nilai lama dalam operasi pembaruan.

    • Saat ignoreDelete = true, semua catatan tipe DELETE dan UPDATE_BEFORE dilewati. Hanya catatan INSERT dan UPDATE_AFTER yang diproses.

    sink.ignore-null-when-update

    Saat memperbarui data, menentukan apakah akan memperbarui bidang yang sesuai menjadi null atau melewati pembaruan untuk bidang tersebut jika nilai bidang data yang masuk adalah null.

    Tidak

    BOOLEAN

    false

    Nilai yang valid:

    • true: Tidak memperbarui bidang. Parameter ini dapat diatur ke true hanya saat primary key ditetapkan untuk tabel Flink. Saat diatur ke true:

      • Untuk VVR 8.0.6 dan versi sebelumnya, tabel sink tidak mendukung penulisan batch.

      • Untuk VVR 8.0.7 dan versi selanjutnya, tabel sink mendukung penulisan batch.

        Penulisan batch dapat meningkatkan efisiensi penulisan dan throughput keseluruhan secara signifikan, tetapi memperkenalkan latensi data dan risiko error OOM. Oleh karena itu, Anda harus membuat pertimbangan berdasarkan skenario bisnis Anda.

    • false: Memperbarui bidang menjadi null.

    Catatan

    Parameter ini didukung hanya di VVR 8.0.5 dan versi selanjutnya.

Pemetaan tipe

  • Tabel sumber CDC

    Tipe bidang MySQL CDC

    Tipe bidang Flink

    TINYINT

    TINYINT

    SMALLINT

    SMALLINT

    TINYINT UNSIGNED

    TINYINT UNSIGNED ZEROFILL

    INT

    INT

    MEDIUMINT

    SMALLINT UNSIGNED

    SMALLINT UNSIGNED ZEROFILL

    BIGINT

    BIGINT

    INT UNSIGNED

    INT UNSIGNED ZEROFILL

    MEDIUMINT UNSIGNED

    MEDIUMINT UNSIGNED ZEROFILL

    BIGINT UNSIGNED

    DECIMAL(20, 0)

    BIGINT UNSIGNED ZEROFILL

    SERIAL

    FLOAT [UNSIGNED] [ZEROFILL]

    FLOAT

    DOUBLE [UNSIGNED] [ZEROFILL]

    DOUBLE

    DOUBLE PRECISION [UNSIGNED] [ZEROFILL]

    REAL [UNSIGNED] [ZEROFILL]

    NUMERIC(p, s) [UNSIGNED] [ZEROFILL]

    DECIMAL(p, s)

    DECIMAL(p, s) [UNSIGNED] [ZEROFILL]

    BOOLEAN

    BOOLEAN

    TINYINT(1)

    DATE

    DATE

    TIME [(p)]

    TIME [(p)] [WITHOUT TIME ZONE]

    DATETIME [(p)]

    TIMESTAMP [(p)] [WITHOUT TIME ZONE]

    TIMESTAMP [(p)]

    TIMESTAMP [(p)]

    TIMESTAMP [(p)] WITH LOCAL TIME ZONE

    CHAR(n)

    STRING

    VARCHAR(n)

    TEXT

    BINARY

    BYTES

    VARBINARY

    BLOB

    Penting

    Jangan gunakan tipe TINYINT(1) di MySQL untuk menyimpan nilai selain 0 dan 1. Saat property-version=0, tabel sumber CDC MySQL memetakan TINYINT(1) ke tipe BOOLEAN di Flink secara default. Hal ini dapat menyebabkan ketidakakuratan data. Untuk menggunakan tipe TINYINT(1) guna menyimpan nilai selain 0 dan 1, lihat parameter konfigurasi catalog.table.treat-tinyint1-as-boolean.

  • Tabel dimensi dan tabel sink

    Tipe bidang MySQL

    Tipe bidang Flink

    TINYINT

    TINYINT

    SMALLINT

    SMALLINT

    TINYINT UNSIGNED

    INT

    INT

    MEDIUMINT

    SMALLINT UNSIGNED

    BIGINT

    BIGINT

    INT UNSIGNED

    BIGINT UNSIGNED

    DECIMAL(20, 0)

    FLOAT

    FLOAT

    DOUBLE

    DOUBLE

    DOUBLE PRECISION

    NUMERIC(p, s)

    DECIMAL(p, s)

    Catatan

    dengan p <= 38.

    DECIMAL(p, s)

    BOOLEAN

    BOOLEAN

    TINYINT(1)

    DATE

    DATE

    TIME [(p)]

    TIME [(p)] [WITHOUT TIME ZONE]

    DATETIME [(p)]

    TIMESTAMP [(p)] [WITHOUT TIME ZONE]

    TIMESTAMP [(p)]

    CHAR(n)

    CHAR(n)

    VARCHAR(n)

    VARCHAR(n)

    BIT(n)

    BINARY(⌈n/8⌉)

    BINARY(n)

    BINARY(n)

    VARBINARY(N)

    VARBINARY(N)

    TINYTEXT

    STRING

    TEXT

    MEDIUMTEXT

    LONGTEXT

    TINYBLOB

    Byte

    Penting

    Flink hanya mendukung catatan tipe BLOB MySQL yang ukurannya kurang dari atau sama dengan 2.147.483.647 (2^31 - 1) byte.

    BLOB

    MEDIUMBLOB

    LONGBLOB

Ingesti Data

Anda dapat menggunakan konektor MySQL sebagai sumber data dalam pekerjaan YAML ingesti data.

Sintaks

source:
   type: mysql
   name: MySQL Source
   hostname: localhost
   port: 3306
   username: <username>
   password: <password>
   tables: adb.\.*, bdb.user_table_[0-9]+, [app|web].order_\.*
   server-id: 5401-5404

sink:
  type: xxx

Item konfigurasi

Parameter

Deskripsi

Wajib

Tipe data

Nilai default

Catatan

type

Tipe sumber data.

Ya

STRING

Tidak ada

Nilainya harus mysql.

name

Nama sumber data.

Tidak

STRING

Tidak ada

Tidak ada.

hostname

Alamat IP atau hostname database MySQL.

Ya

STRING

Tidak ada

Kami menyarankan agar Anda menentukan alamat VPC.

Catatan

Jika database MySQL dan Realtime Compute for Apache Flink tidak berada dalam VPC yang sama, Anda harus membuat koneksi jaringan cross-VPC atau menggunakan titik akhir publik untuk mengakses database. Untuk informasi selengkapnya, lihat Kelola dan operasikan ruang kerja dan Bagaimana kluster Flink yang sepenuhnya dikelola mengakses Internet?.

username

Nama pengguna untuk layanan database MySQL.

Ya

STRING

Tidak ada

Tidak ada.

password

Kata sandi untuk layanan database MySQL.

Ya

STRING

Tidak ada

Tidak ada.

tables

Tabel data MySQL yang akan disinkronkan.

Ya

STRING

Tidak ada

  • Parameter ini mendukung ekspresi reguler untuk membaca data dari beberapa tabel.

  • Anda dapat menggunakan koma untuk memisahkan beberapa ekspresi reguler.

Catatan
  • Jangan gunakan karakter pencocokan awal string ^ dan akhir string $ dalam ekspresi reguler. Di VVR 11.2, titik digunakan untuk memisahkan ekspresi reguler guna mendapatkan bagian database. Karakter pencocokan awal dan akhir akan membuat ekspresi reguler database yang dihasilkan tidak dapat digunakan. Misalnya, Anda harus mengubah ^db.user_[0-9]+$ menjadi db.user_[0-9]+.

  • Titik digunakan untuk memisahkan nama database dan nama tabel. Untuk menggunakan titik guna mencocokkan karakter apa pun, Anda harus meng-escape-nya dengan garis miring terbalik. Misalnya: db0.\.*, db1.user_table_[0-9]+, db[1-2].[app|web]order_\.*.

tables.exclude

Tabel yang akan dikecualikan dari sinkronisasi.

Tidak

STRING

Tidak ada

  • Parameter ini mendukung ekspresi reguler untuk mengecualikan beberapa tabel.

  • Anda dapat menggunakan koma untuk memisahkan beberapa ekspresi reguler.

Catatan

Titik digunakan untuk memisahkan nama database dan nama tabel. Untuk menggunakan titik guna mencocokkan karakter apa pun, Anda harus meng-escape-nya dengan garis miring terbalik. Misalnya: db0.\.*, db1.user_table_[0-9]+, db[1-2].[app|web]order_\.*.

port

Nomor port layanan database MySQL.

Tidak

INTEGER

3306

Tidak ada.

schema-change.enabled

Menentukan apakah akan mengirim event perubahan skema.

Tidak

BOOLEAN

true

Tidak ada.

server-id

ID numerik atau rentang untuk klien database yang digunakan untuk sinkronisasi.

Tidak

STRING

Nilai acak antara 5400 dan 6400 dihasilkan.

ID ini harus unik secara global dalam kluster MySQL. Tetapkan ID yang berbeda untuk setiap pekerjaan yang terhubung ke database yang sama.

Parameter ini juga mendukung format rentang ID, seperti 5400-5408. Saat pembacaan inkremental diaktifkan, pembacaan konkuren didukung. Dalam hal ini, tetapkan rentang ID sehingga setiap pembaca konkuren menggunakan ID yang berbeda.

jdbc.properties.*

Parameter koneksi kustom dalam URL JDBC.

Tidak

STRING

Tidak ada

Anda dapat meneruskan parameter koneksi kustom. Misalnya, untuk tidak menggunakan protokol SSL, Anda dapat mengonfigurasi 'jdbc.properties.useSSL' = 'false'.

Untuk informasi selengkapnya tentang parameter koneksi yang didukung, lihat Properti Konfigurasi MySQL.

debezium.*

Parameter kustom untuk Debezium guna membaca log biner.

Tidak

STRING

Tidak ada

Anda dapat meneruskan parameter Debezium kustom. Misalnya, gunakan 'debezium.event.deserialization.failure.handling.mode'='ignore' untuk menentukan logika penanganan error penguraian.

Peringatan

Jangan mengubah parameter Debezium secara sembarangan. Hal ini dapat menyebabkan konektor membaca data secara salah. Misalnya, parameter debezium.binlog.buffer.size tidak boleh dikonfigurasi.

scan.incremental.snapshot.chunk.size

Ukuran setiap chunk dalam jumlah baris.

Tidak

INTEGER

8096

Tabel MySQL dibagi menjadi beberapa chunk untuk dibaca. Data chunk di-cache dalam memori sebelum sepenuhnya dibaca.

Semakin sedikit baris yang dikandung setiap chunk, semakin besar jumlah total chunk dalam tabel. Meskipun hal ini mengurangi granularitas pemulihan kesalahan, hal ini dapat menyebabkan error OOM dan menurunkan throughput keseluruhan. Oleh karena itu, Anda perlu membuat pertimbangan dan mengatur ukuran chunk yang wajar.

scan.snapshot.fetch.size

Jumlah maksimum catatan yang ditarik sekaligus saat membaca data penuh tabel.

Tidak

INTEGER

1024

Tidak ada.

scan.startup.mode

Mode startup untuk konsumsi data.

Tidak

STRING

initial

Nilai yang valid:

  • initial (default): Saat startup pertama, konektor memindai data historis penuh lalu membaca data log biner terbaru.

  • latest-offset: Saat startup pertama, konektor tidak memindai data historis. Konektor mulai membaca dari akhir log biner, artinya hanya membaca perubahan terbaru setelah konektor dimulai.

  • earliest-offset: Konektor tidak memindai data historis. Konektor mulai membaca dari log biner yang tersedia paling awal.

  • specific-offset: Konektor tidak memindai data historis. Konektor mulai dari offset log biner tertentu. Anda dapat menentukan offset dengan mengonfigurasi scan.startup.specific-offset.file dan scan.startup.specific-offset.pos, atau hanya mengonfigurasi scan.startup.specific-offset.gtid-set untuk memulai dari set GTID tertentu.

  • timestamp: Konektor tidak memindai data historis. Konektor mulai membaca log biner dari timestamp tertentu. Timestamp ditentukan oleh scan.startup.timestamp-millis dalam milidetik.

Penting

Untuk mode startup earliest-offset, specific-offset, dan timestamp, jika skema tabel pada waktu startup berbeda dari skema pada waktu offset awal yang ditentukan, pekerjaan akan melaporkan error akibat ketidakcocokan skema. Dengan kata lain, saat menggunakan ketiga mode startup ini, Anda harus memastikan bahwa skema tabel yang sesuai tidak berubah antara posisi konsumsi log biner yang ditentukan dan waktu startup pekerjaan.

scan.startup.specific-offset.file

Nama file log biner untuk offset awal saat menggunakan mode startup specific-offset.

Tidak

STRING

Tidak ada

Saat menggunakan parameter ini, Anda harus mengatur scan.startup.mode ke specific-offset. Contoh format nama file: mysql-bin.000003.

scan.startup.specific-offset.pos

Offset dalam file log biner yang ditentukan untuk offset awal saat menggunakan mode startup specific-offset.

Tidak

INTEGER

Tidak ada

Saat menggunakan parameter ini, Anda harus mengatur scan.startup.mode ke specific-offset.

scan.startup.specific-offset.gtid-set

Set GTID untuk offset awal saat menggunakan mode startup specific-offset.

Tidak

STRING

Tidak ada

Saat menggunakan parameter ini, Anda harus mengatur scan.startup.mode ke specific-offset. Contoh format set GTID: 24DA167-0C0C-11E8-8442-00059A3C7B00:1-19.

scan.startup.timestamp-millis

Timestamp dalam milidetik untuk offset awal saat menggunakan mode startup timestamp.

Tidak

LONG

Tidak ada

Saat menggunakan parameter ini, Anda harus mengatur scan.startup.mode ke timestamp. Satuan timestamp adalah milidetik.

Penting

Saat Anda menentukan waktu, CDC MySQL mencoba membaca event awal setiap file log biner untuk menentukan timestamp-nya. Kemudian, CDC MySQL menemukan file log biner yang sesuai dengan waktu yang ditentukan. Pastikan file log biner yang sesuai dengan timestamp yang ditentukan belum dihapus dari database dan dapat dibaca.

server-time-zone

Zona waktu sesi yang digunakan oleh database.

Tidak

STRING

Jika Anda tidak menentukan parameter ini, sistem menggunakan zona waktu lingkungan runtime pekerjaan Flink sebagai zona waktu server database. Ini adalah zona waktu zona yang Anda pilih.

Contoh: Asia/Shanghai. Parameter ini mengontrol bagaimana tipe TIMESTAMP di MySQL dikonversi ke tipe STRING. Untuk informasi selengkapnya, lihat Nilai temporal Debezium.

scan.startup.specific-offset.skip-events

Jumlah event log biner yang dilewati saat membaca dari offset tertentu.

Tidak

INTEGER

Tidak ada

Saat menggunakan parameter ini, Anda harus mengatur scan.startup.mode ke specific-offset.

scan.startup.specific-offset.skip-rows

Jumlah perubahan baris yang dilewati saat membaca dari offset tertentu. Satu event log biner mungkin sesuai dengan beberapa perubahan baris.

Tidak

INTEGER

Tidak ada

Saat menggunakan parameter ini, Anda harus mengatur scan.startup.mode ke specific-offset.

connect.timeout

Waktu maksimum menunggu koneksi ke server database MySQL hingga timeout sebelum mencoba lagi.

Tidak

DURATION

30 s

Tidak ada.

connect.max-retries

Jumlah maksimum percobaan ulang setelah koneksi ke layanan database MySQL gagal.

Tidak

INTEGER

3

Tidak ada.

connection.pool.size

Ukuran kolam koneksi database.

Tidak

INTEGER

20

Kolam koneksi database digunakan untuk menggunakan kembali koneksi, yang dapat mengurangi jumlah koneksi database.

heartbeat.interval

Interval sumber memajukan offset log biner menggunakan event heartbeat.

Tidak

DURATION

30s

Event heartbeat digunakan untuk memajukan offset log biner di sumber. Hal ini sangat berguna untuk tabel di MySQL yang jarang diperbarui. Untuk tabel tersebut, offset log biner tidak dapat maju secara otomatis. Event heartbeat dapat mendorong offset log biner maju, yang mencegah masalah akibat offset log biner yang kedaluwarsa. Offset log biner yang kedaluwarsa dapat menyebabkan pekerjaan gagal dan tidak dapat dipulihkan, sehingga memerlukan restart tanpa status.

rds.region-id

ID wilayah instans Alibaba Cloud ApsaraDB RDS for MySQL.

Wajib saat menggunakan fitur untuk membaca log arsip dari OSS.

STRING

Tidak ada

Untuk informasi selengkapnya tentang ID wilayah, lihat Wilayah dan zona.

Penting

Karena string GTID untuk CDC MySQL dihasilkan secara acak dan tidak meningkat secara monoton seperti offset file log biner, menemukan GTID dalam file memerlukan pengunduhan dan penguraian semua log arsip dari OSS. Proses ini sangat intensif sumber daya dan memakan waktu, sehingga fitur yang bergantung pada offset GTID tidak layak. Oleh karena itu, fitur log arsip OSS hanya mendukung pemulaian dari timestamp tertentu atau offset file log biner tertentu. Fitur ini tidak mendukung pemulaian dari GTID tertentu, maupun skenario dengan alih bencana primer/sekunder dalam log arsip, karena alih bencana primer/sekunder MySQL bergantung pada GTID. Evaluasi fitur ini dengan hati-hati sebelum digunakan.

rds.access-key-id

ID AccessKey akun Alibaba Cloud ApsaraDB RDS for MySQL.

Wajib saat menggunakan fitur untuk membaca log arsip dari OSS.

STRING

Tidak ada

Untuk informasi selengkapnya, lihat Bagaimana cara melihat ID AccessKey dan Rahasia AccessKey?

Penting

Untuk mencegah informasi AccessKey Anda bocor, gunakan fitur manajemen rahasia untuk menentukan ID AccessKey. Untuk informasi selengkapnya, lihat Kelola variabel.

rds.access-key-secret

Rahasia AccessKey akun Alibaba Cloud ApsaraDB RDS for MySQL.

Wajib saat menggunakan fitur untuk membaca log arsip dari OSS.

STRING

Tidak ada

Untuk informasi selengkapnya, lihat Bagaimana cara melihat ID AccessKey dan Rahasia AccessKey?

Penting

Untuk mencegah informasi AccessKey Anda bocor, gunakan fitur manajemen rahasia untuk menentukan Rahasia AccessKey. Untuk informasi selengkapnya, lihat Kelola variabel.

rds.db-instance-id

ID instans Alibaba Cloud ApsaraDB RDS for MySQL.

Wajib saat menggunakan fitur untuk membaca log arsip dari OSS.

STRING

Tidak ada

Tidak ada.

rds.main-db-id

Nomor database primer instans Alibaba Cloud ApsaraDB RDS for MySQL.

Tidak

STRING

Tidak ada

Untuk informasi selengkapnya tentang cara mendapatkan nomor database primer, lihat Cadangan log ApsaraDB RDS for MySQL.

Catatan

Jika parameter ini tidak ditentukan, VVR 11.7 dan versi selanjutnya secara otomatis mengkueri nomor database primer berdasarkan informasi koneksi ApsaraDB RDS for MySQL.

rds.download.timeout

Periode timeout untuk mengunduh satu log arsip dari OSS.

Tidak

DURATION

60s

Tidak ada.

rds.endpoint

Titik akhir layanan untuk mendapatkan informasi log biner OSS.

Tidak

STRING

Tidak ada

Untuk informasi selengkapnya tentang nilai yang valid, lihat Titik akhir.

rds.binlog-directory-prefix

Awalan direktori untuk menyimpan file log biner.

Tidak

STRING

rds-binlog-

Tidak ada.

rds.use-intranet-link

Menentukan apakah akan menggunakan jaringan internal untuk mengunduh file log biner.

Tidak

BOOLEAN

true

Tidak ada.

rds.binlog-directories-parent-path

Jalur mutlak direktori induk untuk menyimpan file log biner.

Tidak

STRING

Tidak ada

Tidak ada.

chunk-meta.group.size

Ukuran metadata chunk.

Tidak

INTEGER

1000

Jika metadata lebih besar dari nilai ini, metadata tersebut dibagi menjadi beberapa bagian untuk transmisi.

chunk-key.even-distribution.factor.lower-bound

Batas bawah faktor distribusi chunk untuk sharding merata.

Tidak

DOUBLE

0.05

Jika faktor distribusi kurang dari nilai ini, sharding tidak merata digunakan.

Faktor distribusi chunk = (MAX(chunk-key) - MIN(chunk-key) + 1) / Jumlah total baris data.

chunk-key.even-distribution.factor.upper-bound

Batas atas faktor distribusi chunk untuk sharding merata.

Tidak

DOUBLE

1000.0

Jika faktor distribusi lebih besar dari nilai ini, sharding tidak merata digunakan.

Faktor distribusi chunk = (MAX(chunk-key) - MIN(chunk-key) + 1) / Jumlah total baris data.

scan.incremental.close-idle-reader.enabled

Menentukan apakah akan menutup pembaca idle setelah snapshot selesai.

Tidak

BOOLEAN

false

Agar konfigurasi ini berlaku, Anda harus mengatur execution.checkpointing.checkpoints-after-tasks-finish.enabled ke true.

scan.only.deserialize.captured.tables.changelog.enabled

Pada fase inkremental, menentukan apakah hanya akan mendeserialisasi event perubahan dari tabel yang ditentukan.

Tidak

BOOLEAN

  • Nilai default adalah false di versi VVR 8.x.

  • Nilai default adalah true di VVR 11.1 dan versi selanjutnya.

Nilai yang valid:

  • true: Hanya mendeserialisasi data perubahan dari tabel target untuk mempercepat pembacaan log biner.

  • false (default): Mendeserialisasi data perubahan dari semua tabel.

scan.parallel-deserialize-changelog.enabled

Pada fase inkremental, menentukan apakah akan menggunakan beberapa thread untuk mengurai event perubahan.

Tidak

BOOLEAN

false

Nilai yang valid:

  • true: Menggunakan beberapa thread dalam fase deserialisasi event perubahan sambil mempertahankan urutan event log biner untuk mempercepat pembacaan.

  • false (default): Menggunakan satu thread dalam fase deserialisasi event.

Catatan

Didukung hanya di VVR 8.0.11 dan versi selanjutnya.

scan.parallel-deserialize-changelog.handler.size

Jumlah penangan event saat menggunakan beberapa thread untuk mengurai event perubahan.

Tidak

INTEGER

2

Catatan

Didukung hanya di VVR 8.0.11 dan versi selanjutnya.

metadata-column.include-list

Kolom metadata yang akan diteruskan ke hilir.

Tidak

STRING

Tidak ada

Metadata yang tersedia meliputi op_ts, es_ts, query_log, file, dan pos. Anda dapat menggunakan koma untuk memisahkan beberapa kolom metadata.

Catatan

Konektor YAML CDC MySQL tidak memerlukan atau mendukung penambahan kolom metadata nama database, nama tabel, dan op_type. Anda dapat langsung menggunakan __data_event_type__ dalam ekspresi Transform untuk mendapatkan tipe data perubahan, atau menggunakan __schema_name__ dan __table_name__ untuk mendapatkan nama database dan nama tabel.

Penting
  • Kolom metadata file merepresentasikan file log biner tempat data berada. Nilainya adalah "" selama fase penuh dan nama file log biner selama fase inkremental. Kolom metadata pos merepresentasikan offset data dalam file log biner. Nilainya adalah "0" selama fase penuh dan offset data dalam file log biner selama fase inkremental. Kedua kolom metadata ini didukung mulai dari VVR 11.5.

  • Kolom metadata es_ts merepresentasikan waktu mulai transaksi yang sesuai untuk changelog di MySQL. Kolom ini hanya didukung untuk MySQL 8.0.x. Jangan tambahkan kolom metadata ini saat menggunakan versi MySQL sebelumnya.

  • Timestamp op_ts akurat hingga detik, sedangkan timestamp es_ts akurat hingga milidetik.

scan.newly-added-table.enabled

Saat me-restart dari checkpoint, menentukan apakah akan menyinkronkan tabel yang baru ditambahkan yang tidak cocok selama startup sebelumnya atau menghapus tabel dari status yang tidak lagi cocok.

Tidak

BOOLEAN

false

Ini berlaku saat me-restart dari checkpoint atau titik simpan.

Penting

Selama fase pembacaan data penuh, Anda tidak dapat menyimpan titik simpan, menambahkan tabel baru ke atau menghapus tabel dari tabel sumber, lalu me-restart pekerjaan dari titik simpan tersebut. Hal ini akan menyebabkan pekerjaan gagal membaca data.

scan.binlog.newly-added-table.enabled

Pada fase inkremental, menentukan apakah akan mengirim data dari tabel yang baru ditambahkan yang cocok.

Tidak

BOOLEAN

false

Tidak dapat diaktifkan secara bersamaan dengan scan.newly-added-table.enabled.

scan.incremental.snapshot.chunk.key-column

Menentukan kolom untuk tabel tertentu yang akan digunakan sebagai kolom pemisah untuk sharding selama fase snapshot.

Tidak

STRING

Tidak ada

  • Gunakan titik dua : untuk menghubungkan nama tabel dan nama kolom guna menentukan aturan. Nama tabel dapat berupa ekspresi reguler. Anda dapat menentukan beberapa aturan dengan memisahkannya menggunakan titik koma ;. Misalnya: db1.user_table_[0-9]+:col1;db[1-2].[app|web]_order_\\.*:col2.

  • Wajib untuk tabel tanpa primary key. Kolom yang dipilih harus bertipe non-null (NOT NULL). Opsional untuk tabel dengan primary key. Hanya satu kolom yang dapat dipilih dari primary key.

scan.parse.online.schema.changes.enabled

Pada fase inkremental, menentukan apakah akan mencoba mengurai event DDL perubahan tanpa penguncian RDS.

Tidak

BOOLEAN

false

Nilai yang valid:

  • true: Mengurai event DDL perubahan tanpa penguncian RDS.

  • false (default): Tidak mengurai event DDL perubahan tanpa penguncian RDS.

Ini adalah fitur eksperimental. Sebelum melakukan perubahan tanpa penguncian online, ambil snapshot pekerjaan Flink untuk pemulihan.

Catatan

Didukung hanya di VVR 11.0 dan versi selanjutnya.

scan.incremental.snapshot.backfill.skip

Menentukan apakah akan melewati backfill selama fase pembacaan snapshot.

Tidak

BOOLEAN

false

Nilai yang valid:

  • true: Melewati backfill selama fase pembacaan snapshot.

  • false (default): Tidak melewati backfill selama fase pembacaan snapshot.

Jika backfill dilewati, perubahan pada tabel selama fase snapshot dibaca dalam fase inkremental berikutnya, bukan digabungkan ke dalam snapshot.

Penting

Melewati backfill dapat menyebabkan ketidakkonsistenan data karena perubahan yang terjadi selama fase snapshot mungkin diputar ulang. Hanya semantik at-least-once yang dijamin.

Catatan

Didukung hanya di VVR 11.1 dan versi selanjutnya.

treat-tinyint1-as-boolean.enabled

Menentukan apakah akan memperlakukan tipe TINYINT(1) sebagai tipe Boolean.

Tidak

BOOLEAN

true

Nilai yang valid:

  • true (default): Memperlakukan tipe TINYINT(1) sebagai tipe Boolean.

  • false: Tidak memperlakukan tipe TINYINT(1) sebagai tipe Boolean.

treat-timestamp-as-datetime-enabled

Menentukan apakah akan memperlakukan tipe TIMESTAMP sebagai tipe DATETIME.

Tidak

BOOLEAN

false

Nilai yang valid:

  • true: Memperlakukan tipe TIMESTAMP MySQL sebagai tipe DATETIME dan memetakannya ke tipe TIMESTAMP CDC.

  • false (default): Memetakan tipe TIMESTAMP MySQL ke tipe TIMESTAMP_LTZ CDC.

Tipe TIMESTAMP MySQL menyimpan waktu UTC dan dipengaruhi oleh zona waktu. Tipe DATETIME MySQL menyimpan waktu literal dan tidak dipengaruhi oleh zona waktu.

Saat diaktifkan, parameter ini mengonversi data tipe TIMESTAMP MySQL ke tipe DATETIME berdasarkan server-time-zone.

include-comments.enabled

Menentukan apakah akan menyinkronkan komentar tabel dan kolom.

Tidak

BOOELEAN

false

Nilai yang valid:

  • true: Menyinkronkan komentar tabel dan kolom.

  • false (default): Tidak menyinkronkan komentar tabel dan kolom.

Mengaktifkan opsi ini meningkatkan penggunaan memori pekerjaan.

scan.incremental.snapshot.unbounded-chunk-first.enabled

Menentukan apakah akan mengirim chunk tak terbatas terlebih dahulu selama fase pembacaan snapshot.

Tidak

BOOELEAN

false

Nilai yang valid:

  • true: Mengirim chunk tak terbatas terlebih dahulu selama fase pembacaan snapshot.

  • false (default): Tidak mengirim chunk tak terbatas terlebih dahulu selama fase pembacaan snapshot.

Ini adalah fitur eksperimental. Mengaktifkannya dapat mengurangi risiko error OOM pada Pengelola Tugas saat menyinkronkan chunk terakhir selama fase snapshot. Tambahkan parameter ini sebelum startup pertama pekerjaan.

Catatan

Didukung hanya di VVR 11.1 dan versi selanjutnya.

binlog.session.network.timeout

Timeout jaringan untuk koneksi log biner.

Tidak

DURATION

10m

Jika diatur ke 0s, timeout default server MySQL digunakan.

Catatan

Didukung hanya di VVR 11.5 dan versi selanjutnya.

scan.rate-limit.records-per-second

Membatasi jumlah maksimum catatan yang dikirim oleh sumber per detik.

Tidak

LONG

Tidak ada

Ini berlaku untuk skenario di mana pembacaan data perlu dibatasi. Batasan ini berlaku baik dalam fase penuh maupun inkremental.

Metrik numRecordsOutPerSecond dari sumber mencerminkan jumlah catatan yang dikeluarkan oleh seluruh aliran data per detik. Anda dapat menyesuaikan parameter ini berdasarkan metrik tersebut.

Dalam fase pembacaan data penuh, Anda biasanya perlu mengurangi jumlah baris yang dibaca dalam setiap batch. Anda dapat mengurangi nilai parameter scan.incremental.snapshot.chunk.size.

Catatan

Didukung hanya di VVR 11.5 dan versi selanjutnya.

include-binlog-meta.enable

Menentukan apakah akan menyertakan informasi log biner MySQL asli, seperti GTID dan offset log biner, dalam pesan.

Tidak

Boolean

false

Ini berlaku untuk skenario sinkronisasi log biner asli, seperti menggantikan tautan sinkronisasi Canal yang ada.

Catatan

Didukung hanya di VVR 11.6 dan versi selanjutnya.

scan.binlog.tolerate.gtid-holes

Mengaktifkan parameter ini mengabaikan celah dalam urutan GTID, memungkinkan pekerjaan melewati event yang tidak berurutan dan terus berjalan.

Tidak

Boolean

false

Sebelum mengaktifkan parameter ini, Anda harus memastikan bahwa offset awal pekerjaan belum kedaluwarsa. Jika pekerjaan dimulai dari offset GTID yang dihapus atau kedaluwarsa, mesin akan diam-diam melewatkan log yang hilang, yang akan menyebabkan kehilangan data.

Catatan

Parameter ini didukung hanya di VVR 11.6 dan versi selanjutnya.

scan.emit.create-table-events.in-batch.enabled

Menentukan apakah akan mengirim skema tabel secara batch selama fase inisialisasi pekerjaan.

Tidak

Boolean

false

Ini adalah fitur eksperimental. Aktifkan opsi ini saat satu pekerjaan menyinkronkan banyak tabel.

Catatan

Parameter ini didukung hanya di VVR 11.4 dan versi selanjutnya.

Gunakan katalog yang sudah ada

Mulai dari VVR 11.5, Anda dapat langsung mereferensikan katalog MySQL bawaan yang dibuat di halaman Data Management dalam pekerjaan ingesti data CDC Flink. Hal ini mengurangi upaya manual dalam menulis properti koneksi.

source:
  type: mysql
  using.built-in-catalog: mysql_rds_catalog

Saat ini, pekerjaan ingesti data mendukung penggunaan ulang otomatis parameter katalog MySQL berikut:

  • hostname

  • port

  • username

  • password

  • catalog.table.metadata-columns

  • catalog.table.treat-tinyint1-as-boolean

Jika Anda ingin mengganti salah satu parameter yang digunakan ulang secara otomatis ini, Anda dapat menulis eksplisit parameter YAML yang sesuai. Parameter yang ditulis eksplisit memiliki prioritas lebih tinggi.

Pemetaan tipe

Tabel berikut menunjukkan pemetaan tipe data untuk ingesti data.

Tipe bidang CDC MySQL

Tipe bidang CDC

TINYINT(n)

TINYINT

SMALLINT

SMALLINT

TINYINT UNSIGNED

TINYINT UNSIGNED ZEROFILL

YEAR

INT

INT

MEDIUMINT

MEDIUMINT UNSIGNED

MEDIUMINT UNSIGNED ZEROFILL

SMALLINT UNSIGNED

SMALLINT UNSIGNED ZEROFILL

BIGINT

BIGINT

INT UNSIGNED

INT UNSIGNED ZEROFILL

BIGINT UNSIGNED

DECIMAL(20, 0)

BIGINT UNSIGNED ZEROFILL

SERIAL

FLOAT [UNSIGNED] [ZEROFILL]

FLOAT

DOUBLE [UNSIGNED] [ZEROFILL]

DOUBLE

DOUBLE PRECISION [UNSIGNED] [ZEROFILL]

REAL [UNSIGNED] [ZEROFILL]

NUMERIC(p, s) [UNSIGNED] [ZEROFILL] dan p <= 38

DECIMAL(p, s)

DECIMAL(p, s) [UNSIGNED] [ZEROFILL] dan p <= 38

FIXED(p, s) [UNSIGNED] [ZEROFILL] dan p <= 38

BOOLEAN

BOOLEAN

BIT(1)

TINYINT(1)

DATE

DATE

TIME [(p)]

TIME [(p)]

DATETIME [(p)]

TIMESTAMP [(p)]

TIMESTAMP [(p)]

Pemetaan bergantung pada nilai parameter treat-timestamp-as-datetime-enabled:

true:TIMESTAMP[(p)]

false:TIMESTAMP_LTZ[(p)]

CHAR(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

BIT(n)

BINARY(⌈(n + 7) / 8⌉)

BINARY(n)

BINARY(n)

VARBINARY(N)

VARBINARY(N)

NUMERIC(p, s) [UNSIGNED] [ZEROFILL] dan 38 < p <= 65

STRING

Catatan

Di MySQL, tipe data decimal memiliki presisi hingga 65, tetapi di Flink, presisinya dibatasi hingga 38. Oleh karena itu, jika Anda mendefinisikan kolom decimal dengan presisi lebih dari 38, Anda harus memetakannya ke string untuk menghindari kehilangan presisi.

DECIMAL(p, s) [UNSIGNED] [ZEROFILL] dan 38 < p <= 65

FIXED(p, s) [UNSIGNED] [ZEROFILL] dan 38 < p <= 65

TINYTEXT

STRING

TEXT

MEDIUMTEXT

LONGTEXT

ENUM

JSON

STRING

Catatan

Tipe data JSON dikonversi menjadi string berformat JSON di Flink.

GEOMETRY

STRING

Catatan

Tipe data spasial di MySQL dikonversi menjadi string dengan format JSON tetap. Untuk informasi selengkapnya, lihat Spatial Data Type Mapping pada dokumentasi MySQL.

POINT

LINESTRING

POLYGON

MULTIPOINT

MULTILINESTRING

MULTIPOLYGON

GEOMETRYCOLLECTION

TINYBLOB

BYTES

Catatan

Untuk tipe data BLOB di MySQL, hanya blob dengan panjang tidak lebih dari 2.147.483.647 (2**31-1) yang didukung.

BLOB

MEDIUMBLOB

LONGBLOB

Contoh penggunaan

  • Tabel sumber CDC

    CREATE TEMPORARY TABLE mysqlcdc_source (
       order_id INT,
       order_date TIMESTAMP(0),
       customer_name STRING,
       price DECIMAL(10, 5),
       product_id INT,
       order_status BOOLEAN,
       PRIMARY KEY(order_id) NOT ENFORCED
    ) WITH (
      'connector' = 'mysql',
      'hostname' = '<yourHostname>',
      'port' = '3306',
      'username' = '<yourUsername>',
      'password' = '<yourPassword>',
      'database-name' = '<yourDatabaseName>',
      'table-name' = '<yourTableName>'
    );
    
    CREATE TEMPORARY TABLE blackhole_sink(
      order_id INT,
      customer_name STRING
    ) WITH (
      'connector' = 'blackhole'
    );
    
    INSERT INTO blackhole_sink
    SELECT order_id, customer_name FROM mysqlcdc_source;
  • Tabel dimensi

    CREATE TEMPORARY TABLE datagen_source(
      a INT,
      b BIGINT,
      c STRING,
      `proctime` AS PROCTIME()
    ) WITH (
      'connector' = 'datagen'
    );
    
    CREATE TEMPORARY TABLE mysql_dim (
      a INT,
      b VARCHAR,
      c VARCHAR
    ) WITH (
      'connector' = 'mysql',
      'hostname' = '<yourHostname>',
      'port' = '3306',
      'username' = '<yourUsername>',
      'password' = '<yourPassword>',
      'database-name' = '<yourDatabaseName>',
      'table-name' = '<yourTableName>'
    );
    
    CREATE TEMPORARY TABLE blackhole_sink(
      a INT,
      b STRING
    ) WITH (
      'connector' = 'blackhole'
    );
    
    INSERT INTO blackhole_sink
    SELECT T.a, H.b
    FROM datagen_source AS T JOIN mysql_dim FOR SYSTEM_TIME AS OF T.`proctime` AS H ON T.a = H.a;
  • Tabel sink

    CREATE TEMPORARY TABLE datagen_source (
      `name` VARCHAR,
      `age` INT
    ) WITH (
      'connector' = 'datagen'
    );
    
    CREATE TEMPORARY TABLE mysql_sink (
      `name` VARCHAR,
      `age` INT
    ) WITH (
      'connector' = 'mysql',
      'hostname' = '<yourHostname>',
      'port' = '3306',
      'username' = '<yourUsername>',
      'password' = '<yourPassword>',
      'database-name' = '<yourDatabaseName>',
      'table-name' = '<yourTableName>'
    );
    
    INSERT INTO mysql_sink
    SELECT * FROM datagen_source;
  • Sumber data ingesti data

    source:
      type: mysql
      name: MySQL Source
      hostname: ${mysql.hostname}
      port: ${mysql.port}
      username: ${mysql.username}
      password: ${mysql.password}
      tables: ${mysql.source.table}
      server-id: 7601-7604
    
    sink:
      type: values
      name: Values Sink
      print.enabled: true
      sink.print.logger: true

Tentang tabel sumber CDC MySQL

  • Cara kerja

    Saat tabel sumber CDC MySQL dimulai, tabel tersebut memindai seluruh tabel, membagi tabel menjadi beberapa chunk berdasarkan primary key, dan mencatat offset log biner saat ini. Tabel sumber kemudian menggunakan algoritma snapshot inkremental untuk membaca data dari setiap chunk menggunakan pernyataan SELECT. Pekerjaan secara berkala melakukan checkpoint untuk mencatat chunk yang telah selesai. Jika terjadi failover, pekerjaan melanjutkan pembacaan data dari chunk yang belum selesai. Setelah semua chunk dibaca, pekerjaan mulai membaca catatan perubahan inkremental dari offset log biner yang dicatat sebelumnya. Pekerjaan Flink terus melakukan checkpoint berkala untuk mencatat offset log biner. Jika pekerjaan gagal, pekerjaan melanjutkan pemrosesan dari offset log biner terakhir yang dicatat, yang mencapai semantik tepat-sekali (exactly-once semantics).

    Untuk penjelasan lebih rinci tentang algoritma snapshot inkremental, lihat Konektor CDC MySQL.

  • Metadata

    Metadata berguna dalam skenario di mana data dari database dan tabel yang di-shard digabung dan disinkronkan. Hal ini karena setelah penggabungan, bisnis sering ingin membedakan database dan tabel sumber untuk setiap catatan data. Kolom metadata dapat mengakses informasi nama database dan tabel dari tabel sumber. Oleh karena itu, Anda dapat dengan mudah menggabungkan beberapa tabel yang di-shard menjadi satu tabel tujuan menggunakan kolom metadata.

    Sumber CDC MySQL mendukung sintaks kolom metadata. Anda dapat mengakses metadata berikut melalui kolom metadata.

    Kunci metadata

    Tipe metadata

    Deskripsi

    database_name

    STRING NOT NULL

    Nama database yang berisi baris tersebut.

    table_name

    STRING NOT NULL

    Nama tabel yang berisi baris tersebut.

    op_ts

    TIMESTAMP_LTZ(3) NOT NULL

    Waktu baris tersebut diubah di database. Jika catatan berasal dari data historis tabel, bukan dari log biner, nilai ini selalu 0.

    Catatan

    Bidang ini akurat hanya hingga detik.

    op_type

    STRING NOT NULL

    Tipe perubahan baris tersebut.

    • +I: Pesan INSERT

    • -D: Pesan DELETE

    • -U: Pesan UPDATE_BEFORE

    • +U: Pesan UPDATE_AFTER

    Catatan

    Didukung hanya di VVR 8.0.7 dan versi selanjutnya.

    query_log

    STRING NOT NULL

    Anda dapat membaca catatan log kueri MySQL untuk baris ini.

    Catatan

    MySQL perlu mengaktifkan parameter binlog_rows_query_log_events untuk mencatat log kueri.

    Contoh kode berikut menunjukkan cara menggabungkan dan menyinkronkan beberapa tabel orders dari beberapa database yang di-shard dalam instans MySQL ke tabel holo_orders di Hologres.

    CREATE TEMPORARY TABLE mysql_orders (
      db_name STRING METADATA FROM 'database_name' VIRTUAL,  -- Membaca nama database.
      table_name STRING METADATA  FROM 'table_name' VIRTUAL, -- Membaca nama tabel.
      operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL, -- Membaca waktu perubahan.
      op_type STRING METADATA FROM 'op_type' VIRTUAL, -- Membaca tipe perubahan.
      order_id INT,
      order_date TIMESTAMP(0),
      customer_name STRING,
      price DECIMAL(10, 5),
      product_id INT,
      order_status BOOLEAN,
      PRIMARY KEY(order_id) NOT ENFORCED
    ) WITH (
      'connector' = 'mysql-cdc',
      'hostname' = 'localhost',
      'port' = '3306',
      'username' = 'flinkuser',
      'password' = 'flinkpw',
      'database-name' = 'mydb_.*', -- Ekspresi reguler untuk mencocokkan beberapa database yang di-shard.
      'table-name' = 'orders_.*'   -- Ekspresi reguler untuk mencocokkan beberapa tabel yang di-shard.
    );
    
    INSERT INTO holo_orders SELECT * FROM mysql_orders;

    Berdasarkan kode di atas, jika parameter `scan.read-changelog-as-append-only.enabled` diatur ke true dalam klausa WITH, hasil output bervariasi tergantung pada pengaturan primary key tabel hilir:

    • Jika primary key tabel hilir adalah `order_id`, hasil output hanya berisi perubahan terakhir untuk setiap primary key di tabel hulu. Untuk data yang perubahan terakhirnya untuk primary key adalah operasi hapus, Anda dapat melihat catatan di tabel hilir dengan primary key yang sama dan `op_type` -D.

    • Jika primary key tabel hilir adalah `order_id`, `operation_ts`, dan `op_type`, hasil output berisi perubahan lengkap untuk setiap primary key di tabel hulu.

  • Dukungan ekspresi reguler

    Tabel sumber CDC MySQL mendukung penggunaan ekspresi reguler dalam nama tabel atau nama database untuk mencocokkan beberapa tabel atau database. Contoh kode berikut menunjukkan cara menentukan beberapa tabel menggunakan ekspresi reguler.

    CREATE TABLE products (
      db_name STRING METADATA FROM 'database_name' VIRTUAL,
      table_name STRING METADATA  FROM 'table_name' VIRTUAL,
      operation_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,
      order_id INT,
      order_date TIMESTAMP(0),
      customer_name STRING,
      price DECIMAL(10, 5),
      product_id INT,
      order_status BOOLEAN,
      PRIMARY KEY(order_id) NOT ENFORCED
    ) WITH (
      'connector' = 'mysql-cdc',
      'hostname' = 'localhost',
      'port' = '3306',
      'username' = 'root',
      'password' = '123456',
      'database-name' = '(^(test).*|^(tpc).*|txc|.*[p$]|t{2})', -- Ekspresi reguler untuk mencocokkan beberapa database.
      'table-name' = '(t[5-8]|tt)' -- Ekspresi reguler untuk mencocokkan beberapa tabel.
    );

    Ekspresi reguler dalam contoh dijelaskan sebagai berikut:

    • `^(test).*` adalah contoh pencocokan awalan. Ekspresi ini dapat mencocokkan nama database yang dimulai dengan "test", seperti "test1" atau "test2".

    • `.*[p$]` adalah contoh pencocokan akhiran. Ekspresi ini dapat mencocokkan nama database yang diakhiri dengan "p", seperti "cdcp" atau "edcp".

    • `txc` adalah pencocokan spesifik. Ekspresi ini dapat mencocokkan nama database yang persis "txc".

    Saat CDC MySQL mencocokkan nama tabel yang memenuhi syarat sepenuhnya, CDC MySQL menggunakan pola `database-name.table-name` untuk mengidentifikasi tabel secara unik. Misalnya, pola `(^(test).*|^(tpc).*|txc|.*[p$]|t{2}).(t[ 5-8]|tt)` dapat mencocokkan tabel seperti `txc.tt` dan `test2.test5` di database.

    Penting

    Dalam konfigurasi pekerjaan SQL, parameter `table-name` dan `database-name` tidak mendukung penggunaan koma (,) untuk menentukan beberapa tabel atau database.

    • Untuk mencocokkan beberapa tabel atau menggunakan beberapa ekspresi reguler, hubungkan dengan garis vertikal (|) dan sertakan dalam tanda kurung. Misalnya, untuk membaca tabel `user` dan `product`, Anda dapat mengatur `table-name` ke (user|product).

    • Jika ekspresi reguler berisi koma, Anda harus menulis ulang menggunakan operator garis vertikal (|). Misalnya, ekspresi reguler mytable_\d{1, 2} harus ditulis ulang menjadi setara (mytable_\d{1}|mytable_\d{2}) untuk menghindari penggunaan koma.

  • Kontrol konkurensi

    Konektor MySQL mendukung pembacaan data penuh multithread, yang dapat meningkatkan efisiensi pemuatan data. Bersamaan dengan fitur penyetelan otomatis Autopilot di konsol Realtime Compute for Apache Flink, konektor dapat secara otomatis melakukan skala-masuk selama fase inkremental setelah pembacaan multithread selesai untuk menghemat sumber daya komputasi.

    Di konsol pengembangan Realtime Compute for Apache Flink, Anda dapat mengatur konkurensi pekerjaan dalam mode dasar atau mode ahli di halaman Konfigurasi Sumber Daya. Perbedaannya sebagai berikut:

    • Konkurensi yang diatur dalam mode dasar adalah konkurensi global untuk seluruh pekerjaan.基础模式

    • Mode ahli mendukung pengaturan konkurensi untuk VERTEX tertentu sesuai kebutuhan.vertex并发

    Untuk informasi selengkapnya tentang konfigurasi sumber daya, lihat Konfigurasi informasi penerapan untuk pekerjaan.

    Penting

    Baik dalam mode dasar maupun mode ahli, saat Anda mengatur konkurensi, rentang server ID yang dideklarasikan dalam tabel harus lebih besar dari atau sama dengan konkurensi pekerjaan. Misalnya, jika rentang server ID adalah `5404-5412`, terdapat sembilan server ID unik. Oleh karena itu, konkurensi pekerjaan dapat diatur maksimal 9. Pekerjaan berbeda untuk instans MySQL yang sama tidak boleh memiliki rentang server ID yang tumpang tindih. Artinya, setiap pekerjaan harus dikonfigurasi secara eksplisit dengan server ID atau rentang server ID yang berbeda.

  • Skala-masuk otomatis Autopilot

    Fase data penuh mengakumulasi banyak data historis. Untuk meningkatkan efisiensi pembacaan, data historis biasanya dibaca secara paralel. Dalam fase log biner inkremental, karena jumlah data log biner kecil dan untuk memastikan urutan global, pembacaan single-thread biasanya cukup. Kebutuhan sumber daya yang berbeda dari fase penuh dan inkremental dapat diseimbangkan untuk kinerja dan sumber daya menggunakan fitur penyetelan otomatis.

    Penyetelan otomatis memantau trafik setiap tugas Sumber CDC MySQL. Saat memasuki fase log biner, jika hanya satu tugas yang bertanggung jawab atas pembacaan log biner dan tugas lainnya idle, penyetelan otomatis secara otomatis mengurangi jumlah CU dan konkurensi sumber. Untuk mengaktifkan penyetelan otomatis, atur mode penyetelan otomatis ke Aktif di halaman O&M pekerjaan.

    Catatan

    Interval pemicu minimum default untuk mengurangi konkurensi adalah 24 jam. Untuk informasi selengkapnya tentang parameter dan detail penyetelan otomatis, lihat Konfigurasi penyetelan otomatis.

  • Mode startup

    Gunakan item konfigurasi `scan.startup.mode` untuk menentukan mode startup tabel sumber CDC MySQL. Opsi-opsinya meliputi:

    • initial (default): Saat startup pertama, melakukan pembacaan penuh tabel database lalu beralih ke mode inkremental untuk membaca log biner.

    • earliest-offset: Melewati fase snapshot dan mulai membaca dari offset log biner yang tersedia paling awal.

    • latest-offset: Melewati fase snapshot dan mulai membaca dari akhir log biner. Dalam mode ini, tabel sumber hanya dapat membaca perubahan data yang terjadi setelah pekerjaan dimulai.

    • specific-offset: Melewati fase snapshot dan mulai membaca dari offset log biner tertentu. Offset dapat ditentukan oleh nama file log biner dan posisi, atau oleh set GTID.

    • timestamp: Melewati fase snapshot dan mulai membaca event log biner dari timestamp tertentu.

    Contoh penggunaan:

    CREATE TABLE mysql_source (...) WITH (
        'connector' = 'mysql-cdc',
        'scan.startup.mode' = 'earliest-offset', -- Mulai dari offset paling awal.
        'scan.startup.mode' = 'latest-offset', -- Mulai dari offset terbaru.
        'scan.startup.mode' = 'specific-offset', -- Mulai dari offset tertentu.
        'scan.startup.mode' = 'timestamp', -- Mulai dari timestamp tertentu.
        'scan.startup.specific-offset.file' = 'mysql-bin.000003', -- Tentukan nama file log biner dalam mode specific-offset.
        'scan.startup.specific-offset.pos' = '4', -- Tentukan posisi log biner dalam mode specific-offset.
        'scan.startup.specific-offset.gtid-set' = '24DA167-0C0C-11E8-8442-00059A3C7B00:1-19', -- Tentukan set GTID dalam mode specific-offset.
        'scan.startup.timestamp-millis' = '1667232000000' -- Tentukan timestamp startup dalam mode timestamp.
        ...
    )
    Penting
    • Sumber MySQL mencetak offset saat ini ke log pada level INFO selama checkpoint. Awalan log adalah Binlog offset on checkpoint {checkpoint-id}. Log ini dapat membantu Anda memulai pekerjaan dari offset checkpoint tertentu.

    • Jika tabel yang dibaca telah mengalami perubahan skema, memulai dari `earliest-offset`, `specific-offset`, atau `timestamp` dapat menyebabkan error. Hal ini karena pembaca Debezium secara internal menyimpan skema tabel terbaru, dan data awal dengan skema yang tidak cocok tidak dapat diurai dengan benar.

  • Tentang tabel sumber CDC tanpa primary key

    • Menggunakan tabel tanpa primary key memerlukan pengaturan `scan.incremental.snapshot.chunk.key-column`, dan hanya kolom non-null yang dapat dipilih.

    • Semantik pemrosesan untuk tabel sumber CDC tanpa primary key ditentukan oleh perilaku kolom yang ditentukan oleh `scan.incremental.snapshot.chunk.key-column`:

      • Jika kolom yang ditentukan tidak diperbarui, semantik tepat-sekali dapat dijamin.

      • Jika kolom yang ditentukan diperbarui, hanya semantik setidaknya-sekali (at-least-once) yang dapat dijamin. Namun, Anda dapat memastikan kebenaran data dengan menggabungkannya dengan hilir, menentukan primary key hilir, dan menggunakan operasi idempoten.

  • Baca log cadangan Alibaba Cloud ApsaraDB RDS for MySQL

    Tabel sumber CDC MySQL mendukung pembacaan log cadangan Alibaba Cloud ApsaraDB RDS for MySQL. Hal ini berguna dalam skenario di mana fase data penuh memakan waktu lama dan file log biner lokal telah dihapus secara otomatis, tetapi file cadangan yang diunggah secara otomatis atau manual masih ada.

    Contoh penggunaan:

    CREATE TABLE mysql_source (...) WITH (
        'connector' = 'mysql-cdc',
        'rds.region-id' = 'cn-beijing',
        'rds.access-key-id' = 'xxxxxxxxx', 
        'rds.access-key-secret' = 'xxxxxxxxx', 
        'rds.db-instance-id' = 'rm-xxxxxxxxxxxxxxxxx', 
        'rds.main-db-id' = '12345678',
        'rds.download.timeout' = '60s'
        ...
    )
  • Aktifkan penggunaan ulang Sumber CDC

    Dalam pekerjaan yang sama, beberapa tabel sumber CDC MySQL memulai beberapa klien log biner. Jika semua tabel sumber berada dalam instans yang sama, hal ini meningkatkan beban pada database. Untuk informasi selengkapnya, lihat FAQ CDC MySQL.

    Solusi

    VVR 8.0.7 dan versi selanjutnya mendukung penggunaan ulang sumber CDC MySQL. Fitur ini menggabungkan tabel sumber CDC MySQL yang dapat digabungkan. Penggabungan terjadi saat konfigurasi tabel sumber identik, kecuali untuk nama database, nama tabel, dan server-id. Mesin secara otomatis menggabungkan sumber CDC MySQL dalam pekerjaan yang sama.

    Prosedur

    1. Gunakan perintah SET dalam pekerjaan SQL Anda:

      SET 'table.optimizer.source-merge.enabled' = 'true';
      
      # (Untuk VVR 8.0.8 dan 8.0.9) Atur juga item ini:
      SET 'sql-gateway.exec-plan.enabled' = 'false';
      VVR 11.1 dan versi selanjutnya memiliki penggunaan ulang yang diaktifkan secara default.
    2. Mulai pekerjaan tanpa status. Karena memodifikasi konfigurasi penggunaan ulang mengubah topologi pekerjaan, Anda harus memulai pekerjaan tanpa status. Jika tidak, pekerjaan mungkin gagal dimulai atau Anda mungkin kehilangan data. Jika sumber digabungkan, Anda dapat melihat node MergetableSourceScan dalam topologi.

    Penting
    • Setelah Anda mengaktifkan penggunaan ulang, jangan nonaktifkan operator chaining. Jika Anda mengatur pipeline.operator-chaining ke false, hal ini meningkatkan overhead serialisasi dan deserialisasi data. Semakin banyak sumber yang digabungkan, semakin besar overhead-nya.

    • Di VVR 8.0.7, menonaktifkan operator chaining menyebabkan masalah serialisasi.

Percepat pembacaan log biner

Saat Anda menggunakan konektor MySQL sebagai tabel sumber atau sumber data ingesti data, konektor tersebut mengurai file log biner untuk menghasilkan berbagai pesan perubahan selama fase inkremental. File log biner mencatat semua perubahan tabel dalam format biner. Anda dapat mempercepat penguraian file log biner dengan cara berikut.

  • Aktifkan konfigurasi filter penguraian

    • Gunakan item konfigurasi scan.only.deserialize.captured.tables.changelog.enabled untuk hanya mengurai event perubahan dari tabel yang ditentukan.

  • Optimalkan parameter Debezium

    debezium.max.queue.size: 162580
    debezium.max.batch.size: 40960
    debezium.poll.interval.ms: 50
    • debezium.max.queue.size: Jumlah maksimum catatan yang dapat ditampung oleh antrian pemblokiran. Saat Debezium membaca aliran event dari database, Debezium menempatkan event dalam antrian pemblokiran sebelum menuliskannya ke hilir. Nilai default adalah 8192.

    • debezium.max.batch.size: Jumlah maksimum event yang diproses konektor dalam setiap iterasi. Nilai default adalah 2048.

    • debezium.poll.interval.ms: Jumlah milidetik yang harus ditunggu konektor sebelum meminta event perubahan baru. Nilai default adalah 1000 milidetik, atau 1 detik.

Contoh penggunaan:

CREATE TABLE mysql_source (...) WITH (
    'connector' = 'mysql-cdc',
    -- Konfigurasi Debezium
    'debezium.max.queue.size' = '162580',
    'debezium.max.batch.size' = '40960',
    'debezium.poll.interval.ms' = '50',
    -- Aktifkan filter penguraian
    'scan.only.deserialize.captured.tables.changelog.enabled' = 'true',  -- Hanya mengurai event perubahan dari tabel yang ditentukan.
    ...
)
source:
  type: mysql
  name: MySQL Source
  hostname: ${mysql.hostname}
  port: ${mysql.port}
  username: ${mysql.username}
  password: ${mysql.password}
  tables: ${mysql.source.table}
  server-id: 7601-7604
  # Konfigurasi Debezium
  debezium.max.queue.size: 162580
  debezium.max.batch.size: 40960
  debezium.poll.interval.ms: 50
  # Aktifkan filter penguraian
  scan.only.deserialize.captured.tables.changelog.enabled: true

Kapasitas konsumsi log biner CDC MySQL Edisi Perusahaan adalah 85 MB/detik, sekitar dua kali lipat dari versi komunitas open source. Saat kecepatan pembuatan file log biner melebihi 85 MB/detik (yaitu, satu file 512 MB setiap 6 detik), latensi pekerjaan Flink terus meningkat. Latensi pemrosesan berangsur-angsur berkurang setelah kecepatan pembuatan file log biner melambat. Jika file log biner berisi transaksi besar, latensi pemrosesan mungkin meningkat sementara. Latensi berkurang setelah log untuk transaksi tersebut dibaca.

API DataStream CDC MySQL

Penting

Saat Anda membaca dan menulis data melalui API DataStream, Anda perlu menggunakan konektor DataStream yang sesuai untuk terhubung ke Flink. Untuk informasi selengkapnya tentang cara menyiapkan konektor DataStream, lihat Cara menggunakan konektor DataStream.

Anda dapat membuat program API DataStream dan menggunakan MySqlSource. Contoh kode dan dependensi pom disediakan sebagai berikut:

import org.apache.flink.api.common.eventtime.WatermarkStrategy;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema;
import com.ververica.cdc.connectors.mysql.source.MySqlSource;
public class MySqlSourceExample {
  public static void main(String[] args) throws Exception {
    MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
        .hostname("yourHostname")
        .port(yourPort)
        .databaseList("yourDatabaseName") // set captured database
        .tableList("yourDatabaseName.yourTableName") // set captured table
        .username("yourUsername")
        .password("yourPassword")
        .deserializer(new JsonDebeziumDeserializationSchema()) // converts SourceRecord to JSON String
        .build();
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    // enable checkpoint
    env.enableCheckpointing(3000);
    env
      .fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "MySQL Source")
      // set 4 parallel source tasks
      .setParallelism(4)
      .print().setParallelism(1); // use parallelism 1 for sink to keep message ordering
    env.execute("Print MySQL Snapshot + Binlog");
  }
}
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-core</artifactId>
    <version>${flink.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-java</artifactId>
    <version>${flink.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-base</artifactId>
    <version>${flink.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-table-common</artifactId>
    <version>${flink.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-clients</artifactId>
    <version>${flink.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-table-api-java-bridge</artifactId>
    <version>${flink.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.alibaba.ververica</groupId>
    <artifactId>ververica-connector-mysql</artifactId>
    <version>${vvr.version}</version>
</dependency>

Saat Anda membuat MySqlSource, Anda harus menentukan parameter berikut dalam kode:

Parameter

Deskripsi

hostname

Alamat IP atau hostname database MySQL.

port

Nomor port layanan database MySQL.

databaseList

Nama database MySQL.

Catatan

Parameter ini mendukung ekspresi reguler untuk membaca data dari beberapa database. Anda dapat menggunakan .* untuk mencocokkan semua database.

username

Nama pengguna untuk layanan database MySQL.

password

Kata sandi untuk layanan database MySQL.

deserializer

Deserializer yang mendeserialisasi catatan tipe SourceRecord ke tipe yang ditentukan. Nilai yang valid:

  • RowDataDebeziumDeserializeSchema: Mengonversi SourceRecord ke struktur data internal RowData Flink Table atau SQL.

  • JsonDebeziumDeserializationSchema: Mengonversi SourceRecord ke string berformat JSON.

Dependensi pom harus menentukan parameter berikut:

${vvr.version}

Versi mesin Alibaba Cloud Realtime Compute for Apache Flink, misalnya: 1.17-vvr-8.0.4-3.

Catatan

Gunakan nomor versi yang ditampilkan di Maven, karena kami mungkin merilis versi hotfix tanpa memberi tahu melalui saluran lain.

${flink.version}

Versi Apache Flink, misalnya: 1.17.2.

Penting

Gunakan versi Apache Flink yang sesuai dengan versi mesin Alibaba Cloud Realtime Compute for Apache Flink untuk menghindari masalah ketidakcocokan selama runtime pekerjaan. Untuk informasi selengkapnya tentang pemetaan versi, lihat Versi mesin.

FAQ

Untuk informasi selengkapnya tentang masalah yang mungkin Anda temui saat menggunakan tabel sumber CDC, lihat FAQ CDC.