Topik ini menjelaskan cara menggunakan Realtime Compute for Apache Flink untuk mengonsumsi data binlog Hologres secara real time.
Catatan penggunaan
Sebelum mengonsumsi data binlog Hologres, perhatikan hal-hal berikut:
Anda hanya dapat mengonsumsi data binlog dari Hologres V0.9 atau versi yang lebih baru. Anda hanya dapat mengonfigurasi daftar putih engine untuk Hologres V1.3.21 atau versi yang lebih baru. Jika Anda mengaktifkan daftar putih pada instans yang menjalankan versi sebelum Hologres V1.3.21, konsumsi binlog akan gagal. Jika versi instans Anda lebih lama dari yang disyaratkan, Anda dapat Mendapatkan dukungan online untuk Hologres untuk bantuan.
Hologres mendukung fitur binlog di tingkat tabel untuk tabel berorientasi baris dan tabel berorientasi kolom. Mulai dari Hologres V1.1, tabel penyimpanan hibrida baris-kolom juga didukung. Setelah Anda mengaktifkan fitur binlog, secara teoretis tabel berorientasi kolom memiliki overhead yang lebih tinggi dibandingkan tabel berorientasi baris. Oleh karena itu, untuk skenario dengan pembaruan data yang sering, kami menyarankan agar Anda mengaktifkan fitur binlog untuk tabel berorientasi baris.
Untuk informasi lebih lanjut tentang dukungan binlog serta cara mengaktifkan dan mengonfigurasi fitur ini, lihat Berlangganan binlog Hologres.
Hanya Realtime Compute for Apache Flink yang disediakan oleh Alibaba Cloud yang mendukung pengonsumsian data binlog Hologres. Dalam mode HoloHub, pengonsumsian data binlog Hologres dengan Flink hanya mendukung tipe data sederhana. Mulai dari Flink VVR 6.0.3, Anda dapat mengonsumsi data binlog Hologres dalam mode JDBC. Dibandingkan dengan mode HoloHub, mode JDBC mendukung lebih banyak tipe data. Untuk informasi selengkapnya, lihat Pemetaan tipe data antara Blink/Flink dan Hologres. Mode ini memerlukan izin tambahan. Untuk detailnya, lihat Izin.
Anda tidak dapat mengonsumsi data binlog dari tabel partisi induk.
Hologres V2.0 memberikan dukungan terbatas untuk mode HoloHub. Mulai dari V2.1, mode HoloHub ditinggalkan dan sepenuhnya digantikan oleh mode JDBC. Sebelum meningkatkan instans Hologres Anda, rujuk ke Beralih dari mode HoloHub ke mode JDBC untuk memeriksa Pekerjaan Flink Anda yang saat ini menggunakan mode HoloHub, tingkatkan Pekerjaan Flink VVR Anda sesuai, lalu tingkatkan instans Hologres Anda.
Izin
Berbeda dengan mode HoloHub, mode JDBC mendukung akun Hologres kustom saat Anda menggunakan Realtime Compute for Apache Flink untuk mengonsumsi data binlog Hologres.
Untuk mengonsumsi data binlog Hologres dalam mode HoloHub, Pekerjaan Flink Anda memerlukan izin baca dan tulis pada tabel tersebut.
Untuk mengonsumsi data binlog Hologres dalam mode JDBC, prasyarat berikut berlaku: Untuk informasi selengkapnya, lihat Mengonsumsi data binlog menggunakan JDBC.
Ekstensi
hg_binlogtelah dibuat. Ekstensi ini dibuat secara default di Hologres V2.0 dan versi yang lebih baru.Pengguna adalah superuser instans, atau memiliki izin owner pada tabel target dan izin peran replikasi untuk instans tersebut.
Mengonsumsi data binlog dengan Flink
Realtime Compute for Apache Flink yang menggunakan VVR 2.4 atau versi yang lebih baru mendukung konsumsi data binlog secara real time menggunakan Hologres Connector. Bagian berikut menjelaskan cara menggunakan fitur ini.
DDL tabel sumber dalam mode non-CDC
Dalam mode ini, data binlog yang dikonsumsi oleh Source diteruskan ke node downstream sebagai data Flink biasa. Artinya, semua data diperlakukan sebagai data bertipe Insert, dan Anda dapat memilih cara memproses data berdasarkan tipe tertentu hg_binlog_event_type sesuai kebutuhan bisnis Anda. Setelah binlog diaktifkan untuk tabel Hologres, Anda dapat menggunakan DDL berikut untuk tabel sumber (dalam mode non-CDC) di Flink guna mengonsumsi binlog secara real time.
create table test_message_src_binlog_table(
hg_binlog_lsn BIGINT,
hg_binlog_event_type BIGINT,
hg_binlog_timestamp_us BIGINT,
id INTEGER,
title VARCHAR,
body VARCHAR
) with (
'connector'='hologres',
'dbname'='<yourDbname>',
'tablename'='<yourTablename>',
'username'='<yourAccessID>',
'password'='<yourAccessSecret>',
'endpoint'='<yourEndpoint>',
'binlog' = 'true',
'binlogMaxRetryTimes' = '10',
'binlogRetryIntervalMs' = '500',
'binlogBatchReadSize' = '100'
);Tiga parameter
binlogxxxmerupakan bidang sistem binlog. Nama dan tipenya tetap dan tidak dapat diubah.Bidang lainnya sesuai dengan bidang yang Anda definisikan sendiri dan harus ditulis dalam huruf kecil semua.
DDL tabel sumber dalam mode CDC
Dalam mode ini, Source mengonsumsi data binlog dan secara otomatis menetapkan tipe Flink RowKind yang benar (INSERT, DELETE, UPDATE_BEFORE, atau UPDATE_AFTER) untuk setiap baris berdasarkan hg_binlog_event_type. Hal ini memungkinkan sinkronisasi cermin data tabel, mirip dengan fitur CDC di MySQL dan PostgreSQL.
Tabel sumber binlog Hologres dalam mode CDC saat ini tidak mendukung definisi watermark. Jika Anda perlu melakukan agregasi jendela, Anda dapat menggunakan pendekatan tanpa jendela. Untuk informasi selengkapnya, lihat Bagaimana cara menerapkan agregasi tingkat menit ketika tabel sumber CDC tidak mendukung fungsi jendela?.
Setelah Anda mengaktifkan fitur binlog untuk tabel Hologres, Anda dapat menggunakan DDL berikut di Flink untuk membuat tabel sumber guna mengonsumsi data binlog secara real time dalam mode CDC.
create table test_message_src_binlog_table(
id INTEGER,
title VARCHAR,
body VARCHAR
) with (
'connector'='hologres',
'dbname'='<yourDbname>',
'tablename'='<yourTablename>',
'username'='<yourAccessID>',
'password'='<yourAccessSecret>',
'endpoint'='<yourEndpoint>',
'binlog' = 'true',
'cdcMode' = 'true',
'binlogMaxRetryTimes' = '10',
'binlogRetryIntervalMs' = '500',
'binlogBatchReadSize' = '100'
);Tabel sumber untuk data penuh dan inkremental
Mulai dari VVR engine 1.13-vvr-4.0.13 dan Hologres V0.10, tabel sumber CDC binlog Hologres mendukung konsumsi terintegrasi data penuh dan inkremental. Metode ini pertama-tama membaca data historis penuh dari database, lalu beralih dengan lancar untuk membaca data inkremental dari binlog. Untuk informasi selengkapnya, lihat Gudang data real-time Hologres.
Tabel sumber binlog dalam mode JDBC
Mulai Flink VVR 6.0.3, Anda dapat mengonsumsi data binlog Hologres dalam mode JDBC. Dibandingkan dengan mode HoloHub, mode JDBC mendukung lebih banyak tipe data dan akun kustom. Untuk informasi selengkapnya tentang cara menggunakan mode JDBC, lihat Gudang data real-time Hologres.
Beralih dari mode HoloHub ke mode JDBC
Hologres mulai menghentikan mode HoloHub secara bertahap sejak V2.0. Jika Anda perlu meningkatkan instans Hologres Anda, Anda harus beralih dari mode HoloHub ke mode JDBC seperti yang dijelaskan di bawah ini.
Tingkatkan ke V2.1
Sebelum meningkatkan instans Hologres Anda ke V2.1, pilih salah satu solusi berikut untuk memeriksa Pekerjaan Flink dan instans Hologres Anda guna memastikan Pekerjaan berjalan sesuai harapan.
(Solusi 1) (Direkomendasikan) Tingkatkan versi Flink VVR Anda ke 8.0.7 atau versi yang lebih baru. Flink secara otomatis beralih dari mode HoloHub ke mode JDBC.
(Solusi 2) Tingkatkan Flink VVR Anda ke versi antara 6.0.7 dan 8.0.5. Tambahkan parameter
'sdkMode'='jdbc'ke tabel sumber dan restart Pekerjaan. Anda juga harus memberikan pengguna salah satu set izin berikut. Setelah memastikan Pekerjaan berjalan dengan baik, Anda dapat meningkatkan instans Hologres.(Opsi 1) izin superuser pada instans.
(Opsi 2) izin owner pada tabel target, izin CREATE DATABASE, dan izin peran replikasi untuk instans.
(Solusi 3) (Tidak direkomendasikan) Tingkatkan versi Flink VVR ke 8.0.6. Flink secara otomatis beralih dari mode HoloHub ke mode JDBC. Namun, VVR 8.0.6 memiliki cacat yang diketahui yang dapat menyebabkan deployment Pekerjaan timeout jika tabel dimensi berisi terlalu banyak bidang. Untuk informasi selengkapnya, lihat Catatan Rilis Hologres Connector.
(Opsional) Jika Anda memiliki banyak Pekerjaan Flink VVR, gunakan petunjuk berikut untuk mengidentifikasi Pekerjaan dan tabel mana yang perlu ditingkatkan.
Tingkatkan ke V2.0
(Solusi 1) (Direkomendasikan) Tingkatkan versi Flink VVR Anda ke 8.0.6 atau versi yang lebih baru. Flink secara otomatis beralih dari mode HoloHub ke mode JDBC. Namun, VVR 8.0.6 memiliki cacat yang diketahui yang dapat menyebabkan deployment Pekerjaan timeout jika tabel dimensi berisi terlalu banyak bidang. Untuk informasi selengkapnya, lihat Catatan Rilis Hologres Connector. Kami menyarankan agar Anda meningkatkan ke VVR 8.0.7.
(Solusi 2) Tingkatkan versi Flink VVR Anda ke 8.0.4 atau 8.0.5 dan restart Pekerjaan Flink. Anda juga harus memberikan pengguna salah satu set izin berikut. Setelah memastikan Pekerjaan berjalan dengan baik, Anda dapat meningkatkan instans Hologres.
(Opsi 1) izin superuser pada instans.
(Opsi 2) izin owner pada tabel target, izin CREATE DATABASE, dan izin peran replikasi untuk instans.
(Solusi 3) Tingkatkan versi Flink VVR Anda ke versi antara 6.0.7 dan 8.0.3. Flink terus menggunakan mode HoloHub untuk mengonsumsi data binlog.
Jika Anda memiliki banyak Pekerjaan Flink VVR yang mengonsumsi data binlog Hologres, Anda dapat menggunakan metode berikut untuk mengidentifikasi Pekerjaan dan tabel yang perlu ditingkatkan.
Tool ini hanya dapat memperoleh informasi untuk jenis Pekerjaan berikut:
Pekerjaan SQL yang menggunakan DDL untuk mendefinisikan tabel.
Pekerjaan Catalog yang menggunakan hint untuk menentukan parameter.
Tool ini tidak mendukung pengambilan informasi untuk Pekerjaan JAR atau tabel Catalog yang tidak memiliki parameter hint.
Unduh tool open-source find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar.
Pada command line lokal, buka direktori tool open-source tersebut dan jalankan perintah berikut untuk melihat semua Pekerjaan dan tabel yang perlu ditingkatkan.
CatatanUntuk menjalankan perintah berikut, Anda harus memiliki lingkungan Java yang terinstal, dengan JDK 8 atau versi yang lebih baru.
java -cp find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar com.alibaba.hologres.FindIncompatibleFlinkJobs <region> <url> <AccessKeyID> <AccessKeySecret> <binlog/rpc> # Contoh java -cp find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar com.alibaba.hologres.FindIncompatibleFlinkJobs Beijing https://vvp.console.aliyun.com/web/xxxxxx/en/#/workspaces/xxxx/namespaces/xxxx/operations/stream/xxxx my-access-key-id my-access-key-secret binlogTabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Deskripsi
region
Wilayah tempat ruang kerja Realtime Compute for Apache Flink Anda berada. Untuk daftar nilai yang valid, lihat tabel Nilai Wilayah.
url
URL dari Pekerjaan apa pun di ruang kerja Realtime Compute for Apache Flink target.
AccessKey ID
ID AccessKey untuk akun yang memiliki izin mengakses ruang kerja Realtime Compute for Apache Flink.
AccessKey secret
Rahasia AccessKey untuk akun yang memiliki izin mengakses ruang kerja Realtime Compute for Apache Flink.
binlog/rpc
Jenis konten Pekerjaan yang akan diperiksa. Nilai yang valid:
binlog: Memeriksa semua tabel sumber binlog Hologres di semua Pekerjaan dalam ruang kerja.rpc: Memeriksa semua tabel dimensi atau tabel hasil yang menggunakan moderpcdi semua Pekerjaan dalam ruang kerja.
Kode berikut memberikan contoh hasil.
dwd_xxx nx not a running job, skip dwd_st xxx not a running job, skip dwd_xxx a not a running job, skip dia xxx not a hologres job, skip dwd_tr xxx ail not sql job, skip --- The following are Hologres binlog source tables that are on a version earlier than 8.0.5 and do not have sdkmode = jdbc set --- deploymentName version tableName ads_xxx xxx vvr-6.0.7-flink-1.15 adsdb.ads_xxx xxx xxx catalog xxx vvr-8.0.1-flink-1.17 odsdb.ods_xxx nts xxx vvr-8.0.1-flink-1.17 dwsdb.dws_xxx tag xxx s vvr-8.0.1-flink-1.17 odsdb.ods_xxx ers