Connector OceanBase mengintegrasikan Realtime Compute for Apache Flink dengan OceanBase, database pemrosesan transaksional dan analitik hibrida (HTAP) terdistribusi native. Gunakan connector ini untuk membaca aliran change data capture (CDC), melakukan join dengan tabel dimensi, dan menulis hasilnya kembali ke OceanBase.
Connector OceanBase sedang dalam pratinjau publik.
Fitur yang didukung
| Kategori | Detail |
|---|---|
| Jenis tabel | Tabel sumber, dimensi, dan sink |
| Mode waktu proses | Mode streaming dan mode batch |
| Format data | Tidak berlaku |
| Metrik pemantauan khusus | Tidak ada |
| API | SQL |
| Pembaruan dan penghapusan pada tabel sink | Ya |
Pilih connector
OceanBase mendukung dua mode kompatibilitas. Mode yang Anda gunakan menentukan connector mana yang harus digunakan.
| Mode OceanBase | Connector yang direkomendasikan | Alternatif |
|---|---|---|
| Mode Oracle | Connector OceanBase | — |
| Mode MySQL | Connector OceanBase atau connector MySQL | — |
Catatan mode MySQL:
-
Connector MySQL tersedia untuk OceanBase 3.2.4.4 dan versi setelahnya (pratinjau publik). Lakukan evaluasi menyeluruh sebelum menggunakannya di lingkungan produksi.
-
Untuk membaca data inkremental dengan connector MySQL, aktifkan dan konfigurasikan layanan OceanBase Binlog. Lihat Ikhtisar layanan OceanBase Binlog dan Operasi terkait Binlog.
Prasyarat
Sebelum memulai, pastikan hal-hal berikut:
-
Database dan tabel tujuan telah tersedia di OceanBase.
-
Daftar putih alamat IP telah dikonfigurasi — lihat Konfigurasi grup daftar putih.
-
(Untuk tabel sumber CDC) Layanan OceanBase Binlog telah diaktifkan — lihat Operasi terkait Binlog.
-
(Untuk tabel sink impor bypass) Port impor bypass telah diaktifkan — lihat Impor bypass.
Batasan
-
Memerlukan Ververica Runtime (VVR) 8.0.1 atau versi lebih baru.
Jaminan semantik:
-
Tabel sumber CDC: semantik tepat-sekali (exactly-once). Data tidak hilang atau diduplikasi saat beralih dari data historis lengkap ke pembacaan Binlog, bahkan setelah terjadi kesalahan.
-
Tabel sink: semantik paling sedikit sekali (at-least-once). Jika tabel sink memiliki primary key, idempotensi menjamin keakuratan data.
Perubahan arsitektur CDC VVR 11.4.0
Mulai dari VVR 11.4.0, connector CDC OceanBase ditingkatkan:
-
Connector CDC berbasis layanan OceanBase LogProxy yang sebelumnya digunakan telah ditinggalkan dan dihapus.
-
Pengambilan log inkremental kini memerlukan layanan OceanBase Binlog. Connector CDC OceanBase menawarkan kompatibilitas protokol dan stabilitas koneksi yang lebih baik dengan layanan Binlog dibandingkan dengan menghubungkan connector CDC MySQL standar secara langsung. Menghubungkan connector CDC MySQL standar ke layanan OceanBase Binlog untuk pelacakan perubahan tidak disarankan.
-
Pelacakan perubahan inkremental dalam mode kompatibilitas Oracle tidak lagi didukung. Untuk CDC mode Oracle, hubungi Dukungan Teknis Enterprise OceanBase.
Sintaksis
CREATE TABLE oceanbase_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' = 'oceanbase',
'url' = '<your-jdbc-url>',
'tableName' = '<your-table-name>',
'userName' = '<your-username>',
'password' = '<your-password>'
);
Perilaku penulisan sink:
Untuk setiap record yang masuk, connector menyusun pernyataan SQL berdasarkan skema tabel sink:
-
Tidak memiliki primary key:
INSERT INTO -
Memiliki primary key:
UPSERT(berdasarkan mode kompatibilitas database)
Parameter WITH
Parameter umum
Parameter berikut berlaku untuk semua jenis tabel.
| Parameter | Deskripsi | Wajib | Tipe | Bawaan |
|---|---|---|---|---|
connector |
Atur ke oceanbase. |
Ya | STRING | — |
password |
Kata sandi database. | Ya | STRING | — |
Parameter tabel sumber
Mulai dari VVR 11.4.0, connector CDC OceanBase menggunakan layanan OceanBase Binlog untuk pengambilan log inkremental. Connector berbasis LogProxy telah dihapus. CDC mode kompatibilitas Oracle tidak lagi didukung mulai dari VVR 11.4.0.
| Parameter | Deskripsi | Wajib | Tipe | Bawaan | Catatan |
|---|---|---|---|---|---|
hostname |
Alamat IP atau hostname database OceanBase. Gunakan alamat virtual private cloud (VPC) bila memungkinkan. | Ya | STRING | — | Jika OceanBase dan Realtime Compute for Apache Flink berada di VPC yang berbeda, atur konektivitas cross-VPC atau gunakan titik akhir publik. Lihat Manajemen workspace dan Akses Internet untuk kluster Flink. |
username |
Username database OceanBase. | Ya | STRING | — | — |
database-name |
Nama database OceanBase. Mendukung ekspresi reguler untuk membaca dari beberapa database. Hindari anchor ^ dan $. |
Ya | STRING | — | Connector menggabungkan database-name dan table-name dengan \\. (VVR 8.0.1+) atau . (versi sebelumnya) untuk membentuk regex path lengkap. Misalnya, db_.* + tb_.+ menjadi db_.*\\.tb_.+. |
table-name |
Nama tabel OceanBase. Mendukung ekspresi reguler untuk membaca dari beberapa tabel. Hindari anchor ^ dan $. |
Ya | STRING | — | Lihat catatan database-name di atas. |
port |
Port database OceanBase. | Tidak | INTEGER | 3306 |
— |
server-id |
ID numerik untuk client database. Harus unik secara global. Mendukung rentang, seperti 5400-5408, untuk memberikan ID berbeda kepada reader konkuren. |
Tidak | STRING | Nilai acak antara 5400 dan 6400 | Gunakan ID berbeda untuk setiap pekerjaan yang terhubung ke database yang sama. Lihat Penggunaan Server ID. |
scan.incremental.snapshot.chunk.size |
Jumlah baris per chunk selama pembacaan snapshot inkremental. Data di setiap chunk dibuffer di memori sebelum sepenuhnya dibaca. Chunk yang lebih kecil meningkatkan granularitas pemulihan kesalahan tetapi dapat menyebabkan error kehabisan memori (OOM) dan mengurangi throughput. | Tidak | INTEGER | 8096 |
Seimbangkan ukuran chunk terhadap kebutuhan memori dan throughput. |
scan.snapshot.fetch.size |
Jumlah maksimum record yang diambil per tarikan selama pembacaan tabel penuh. | Tidak | INTEGER | 1024 |
— |
scan.startup.mode |
Mode startup untuk konsumsi data. | Tidak | STRING | initial |
Nilai yang valid:
initial
(memindai riwayat lengkap, lalu membaca Binlog),
latest-offset
(hanya ekor Binlog),
earliest-offset
(Binlog paling awal yang tersedia),
specific-offset
(diatur melalui parameter
scan.startup.specific-offset.*
),
timestamp
(diatur melalui
scan.startup.timestamp-millis
).
Penting
Untuk mode |
scan.startup.specific-offset.file |
Nama file Binlog untuk offset awal. Contoh: mysql-bin.000003. |
Tidak | STRING | — | Memerlukan scan.startup.mode=specific-offset. |
scan.startup.specific-offset.pos |
Offset byte dalam file Binlog yang ditentukan. | Tidak | INTEGER | — | Memerlukan scan.startup.mode=specific-offset. |
scan.startup.specific-offset.gtid-set |
Set GTID untuk offset awal. Contoh: 24DA167-0C0C-11E8-8442-00059A3C7B00:1-19. |
Tidak | STRING | — | Memerlukan scan.startup.mode=specific-offset. |
scan.startup.timestamp-millis |
Timestamp awal dalam milidetik. CDC OceanBase membaca event awal dari setiap file Binlog untuk menemukan file yang sesuai dengan timestamp ini. File Binlog tersebut tidak boleh telah dipurge. | Tidak | LONG | — | Memerlukan scan.startup.mode=timestamp. |
server-time-zone |
Zona waktu sesi yang digunakan oleh database. Mengontrol bagaimana tipe TIMESTAMP dikonversi ke STRING. Lihat Tipe temporal Debezium. Contoh: Asia/Shanghai. |
Tidak | STRING | Zona waktu waktu proses pekerjaan Flink | — |
debezium.min.row.count.to.stream.results |
Ambang batas jumlah baris di atas mana connector beralih dari pembacaan penuh (seluruh tabel dimuat ke memori) ke pembacaan batch (baris dialirkan dalam batch). Pembacaan penuh lebih cepat; pembacaan batch menghindari OOM untuk tabel besar. | Tidak | INTEGER | 1000 |
— |
connect.timeout |
Waktu tunggu maksimum sebelum mencoba kembali koneksi yang timeout. | Tidak | DURATION | 30s |
— |
connect.max-retries |
Jumlah maksimum percobaan koneksi ulang setelah gagal. | Tidak | INTEGER | 3 |
— |
connection.pool.size |
Ukuran kolam koneksi database. Penggunaan kembali koneksi mengurangi jumlah total koneksi yang terbuka. | Tidak | INTEGER | 20 |
— |
jdbc.properties.* |
Parameter koneksi URL JDBC kustom. Contoh: 'jdbc.properties.useSSL' = 'false'. Lihat Properti konfigurasi MySQL. |
Tidak | STRING | — | — |
debezium.* |
Parameter Debezium kustom untuk pembacaan Binlog. Contoh: 'debezium.event.deserialization.failure.handling.mode' = 'ignore'. |
Tidak | STRING | — | — |
heartbeat.interval |
Interval di mana sumber mengirimkan event heartbeat untuk memajukan offset Binlog. Mencegah offset Binlog kedaluwarsa pada tabel yang jarang diperbarui. Offset yang kedaluwarsa menyebabkan pekerjaan gagal dan memerlukan restart tanpa status. | Tidak | DURATION | 30s |
— |
scan.incremental.snapshot.chunk.key-column |
Kolom yang digunakan sebagai kunci chunk untuk membagi data selama fase snapshot. | Bersyarat | STRING | — | Wajib untuk tabel tanpa primary key (harus NOT NULL). Opsional untuk tabel dengan primary key (pilih satu kolom dari primary key). |
scan.incremental.close-idle-reader.enabled |
Menentukan apakah reader idle ditutup setelah fase snapshot selesai. | Tidak | BOOLEAN | false |
VVR 8.0.1+. Juga memerlukan execution.checkpointing.checkpoints-after-tasks-finish.enabled=true. |
scan.read-changelog-as-append-only.enabled |
Menentukan apakah aliran changelog dikonversi menjadi aliran append-only. Ketika true, semua jenis pesan (INSERT, DELETE, UPDATE_BEFORE, UPDATE_AFTER) dikonversi menjadi INSERT. Aktifkan hanya dalam skenario khusus, seperti mempertahankan pesan delete dari tabel hulu. |
Tidak | BOOLEAN | false |
VVR 8.0.8+. |
scan.only.deserialize.captured.tables.changelog.enabled |
Menentukan apakah event perubahan hanya dideserialisasi untuk tabel yang ditangkap selama fase inkremental. Mengatur ke true mempercepat pembacaan Binlog. |
Tidak | BOOLEAN | false (VVR 8.x), true (VVR 11.1+) |
VVR 8.0.7+. Pada VVR 8.0.8 dan sebelumnya, gunakan nama parameter debezium.scan.only.deserialize.captured.tables.changelog.enable. |
scan.parse.online.schema.changes.enabled |
Menentukan apakah akan mengurai event DDL untuk perubahan tanpa lock ApsaraDB RDS selama fase inkremental. Fitur eksperimental. Ambil snapshot pekerjaan Flink sebelum melakukan perubahan skema tanpa lock online. | Tidak | BOOLEAN | false |
VVR 11.1+. |
scan.incremental.snapshot.backfill.skip |
Menentukan apakah backfill dilewati selama fase snapshot. Backfill hanya berlaku selama kueri snapshot satu chunk dan tidak mencakup seluruh fase pembacaan penuh. Ketika backfill dilewati, kueri snapshot setiap chunk membaca data tabel terbaru pada saat itu; pembaruan yang terjadi pada chunk setelah dibaca tidak digabung selama fase pembacaan penuh dan dibaca dari Binlog setelah memasuki fase inkremental. Misalnya, pembaruan pada chunk5 yang terjadi saat chunk5 sedang di-snapshot tercermin langsung dalam snapshot chunk5; jika chunk5 diperbarui setelah reader maju ke chunk80, pembaruan tersebut diterapkan nanti dari Binlog selama fase inkremental. Penting: ketika diaktifkan, perubahan yang terjadi selama atau setelah pemindaian chunk tetap dikirimkan dari Binlog dalam fase inkremental dan mungkin diduplikasi; hanya semantik paling sedikit sekali (at-least-once) yang dijamin. Aktifkan ini hanya ketika sink hilir mendukung penulisan idempoten berdasarkan primary key. | Tidak | BOOLEAN | false |
VVR 11.1+. |
scan.incremental.snapshot.unbounded-chunk-first.enabled |
Menentukan apakah chunk tak terbatas didistribusikan terlebih dahulu selama fase snapshot. Mengurangi risiko OOM ketika Pengelola Tugas memproses chunk terakhir. Fitur eksperimental. Tambahkan parameter ini sebelum pekerjaan dimulai untuk pertama kalinya. | Tidak | BOOLEAN | false |
VVR 11.1+. |
Parameter tabel dimensi
| Parameter | Deskripsi | Wajib | Tipe | Bawaan | Catatan |
|---|---|---|---|---|---|
url |
URL JDBC. Harus mencakup nama database MySQL atau nama layanan Oracle. | Ya | STRING | — | — |
userName |
Username database. | Ya | STRING | — | — |
cache |
Kebijakan cache untuk pencarian tabel dimensi. | Tidak | STRING | ALL |
ALL: Memuat semua data sebelum pekerjaan dimulai; muat ulang setelah kedaluwarsa. Cocok untuk tabel kecil dengan banyak lookup miss. Tingkatkan memori node join minimal dua kali ukuran tabel untuk mendukung pemuatan asinkron. LRU: Menyimpan cache subset baris; memerlukan cacheSize. None: Tidak ada caching. |
cacheSize |
Jumlah maksimum entri yang dicache. | Tidak | INTEGER | 100000 |
Wajib ketika cache=LRU. Diabaikan ketika cache=ALL. |
cacheTTLMs |
Timeout cache dalam milidetik. Perilaku tergantung pada pengaturan cache: untuk LRU, entri kedaluwarsa setelah durasi ini (tidak ada kedaluwarsa secara bawaan); untuk ALL, cache penuh dimuat ulang setelah durasi ini (tidak ada muat ulang secara bawaan); untuk None, parameter ini tidak berpengaruh. |
Tidak | LONG | Long.MAX_VALUE |
— |
maxRetryTimeout |
Durasi maksimum percobaan ulang. | Tidak | DURATION | 60s |
— |
Parameter tabel sink (JDBC)
| Parameter | Deskripsi | Wajib | Tipe | Bawaan | Catatan |
|---|---|---|---|---|---|
url |
URL JDBC. Harus mencakup nama database MySQL atau nama layanan Oracle. | Ya | STRING | — | — |
userName |
Username database. | Ya | STRING | — | — |
tableName |
Nama tabel tujuan. | Ya | STRING | — | — |
sink.mode |
Mode penulisan. Atur ke jdbc untuk penulisan standar; atur ke direct-load untuk impor bypass. |
Ya | STRING | jdbc |
— |
compatibleMode |
Mode kompatibilitas OceanBase. Nilai yang valid: mysql, oracle. |
Tidak | STRING | mysql |
Parameter khusus OceanBase. |
maxRetryTimes |
Jumlah maksimum percobaan ulang penulisan. | Tidak | INTEGER | 3 |
— |
poolInitialSize |
Ukuran awal kolam koneksi. | Tidak | INTEGER | 1 |
— |
poolMaxActive |
Jumlah maksimum koneksi aktif dalam kolam. | Tidak | INTEGER | 8 |
— |
poolMaxWait |
Waktu tunggu maksimum (ms) untuk koneksi dari kolam. | Tidak | INTEGER | 2000 |
— |
poolMinIdle |
Jumlah minimum koneksi idle dalam kolam. | Tidak | INTEGER | 1 |
— |
connectionProperties |
Properti koneksi JDBC dalam format k1=v1;k2=v2. |
Tidak | STRING | — | — |
ignoreDelete |
Menentukan apakah operasi delete diabaikan. | Tidak | BOOLEAN | false |
— |
excludeUpdateColumns |
Kolom yang dikecualikan dari pembaruan, dipisahkan koma (misalnya, column1,column2). Kolom primary key selalu dikecualikan terlepas dari pengaturan ini. |
Tidak | STRING | — | — |
partitionKey |
Kunci partisi. Ketika diatur, data dikelompokkan berdasarkan kunci ini sebelum aturan modRule diterapkan. |
Tidak | STRING | — | — |
modRule |
Aturan pengelompokan dalam format nama_kolom mod angka (misalnya, user_id mod 8). Kolom harus numerik. Data pertama kali dipartisi berdasarkan partitionKey, lalu dikelompokkan dalam setiap partisi berdasarkan aturan ini. |
Tidak | STRING | — | — |
bufferSize |
Ukuran buffer data (jumlah record). | Tidak | INTEGER | 1000 |
— |
flushIntervalMs |
Interval flush buffer (ms). Jika buffer tidak memenuhi kondisi output dalam interval ini, semua data yang dibuffer akan diflush secara otomatis. | Tidak | LONG | 1000 |
— |
retryIntervalMs |
Interval percobaan ulang (ms). | Tidak | INTEGER | 5000 |
— |
Parameter tabel sink (impor bypass)
Impor bypass adalah metode penulisan throughput tinggi untuk pemuatan data bulk di OceanBase. Tersedia di VVR 11.5 dan versi lebih baru.
Sebelum menggunakan impor bypass, periksa batasan berikut:
-
Hanya aliran bounded: Sumber data harus berupa aliran bounded. Gunakan mode batch Flink untuk performa terbaik.
-
Penguncian tabel selama impor: Tabel tujuan dikunci selama proses impor. Penulisan DML dan perubahan DDL diblokir; kueri baca tidak terpengaruh.
-
Bukan untuk penulisan real-time: Untuk penulisan streaming atau real-time, gunakan sink JDBC.
| Parameter | Deskripsi | Wajib | Tipe | Bawaan | Catatan |
|---|---|---|---|---|---|
sink.mode |
Atur ke direct-load untuk menggunakan impor bypass. |
Tidak | STRING | jdbc |
— |
host |
Alamat IP atau hostname database OceanBase. | Ya | STRING | — | — |
port |
Port RPC database OceanBase. | Tidak | INTEGER | 2882 |
— |
username |
Username database. | Ya | STRING | — | — |
tenant-name |
Nama tenant OceanBase. | Ya | STRING | — | — |
schema-name |
Untuk tenant MySQL: nama database. Untuk tenant Oracle: nama pemilik. | Ya | STRING | — | — |
table-name |
Nama tabel tujuan. | Ya | STRING | — | — |
parallel |
Konkurensi sisi server untuk tugas impor. Server membatasi tingkat paralelisme aktual berdasarkan spesifikasi CPU tenant tanpa mengembalikan error. Rumus: MIN(tenant_cores × 2, parallel) × partition_nodes. Misalnya, dengan 2 core CPU, parallel=10, dan 2 node partisi: MIN(4, 10) × 2 = 8. |
Tidak | INTEGER | 8 |
— |
buffer-size |
Jumlah record yang dibuffer sebelum satu penulisan ke OceanBase. | Tidak | INTEGER | 1024 |
— |
dup-action |
Perilaku ketika ditemukan primary key duplikat. STOP_ON_DUP: gagalkan impor. REPLACE: timpa baris yang ada. IGNORE: buang baris yang masuk. |
Tidak | STRING | REPLACE |
— |
load-method |
Mode impor. full: impor bypass standar. inc: mode inkremental, memeriksa konflik primary key (observer 4.3.2+, dup-action=REPLACE tidak didukung). inc_replace: mode replace inkremental, menimpa baris yang ada secara langsung tanpa pemeriksaan konflik (observer 4.3.2+, parameter dup-action diabaikan). |
Tidak | STRING | full |
— |
max-error-rows |
Jumlah maksimum baris error yang ditoleransi. Baris error mencakup: primary key duplikat ketika dup-action=STOP_ON_DUP, jumlah kolom tidak cocok, dan baris yang gagal dalam konversi tipe. |
Tidak | LONG | 0 |
— |
timeout |
Timeout keseluruhan untuk tugas impor bypass. | Tidak | DURATION | 7d |
— |
heartbeat-timeout |
Timeout heartbeat sisi klien. | Tidak | DURATION | 60s |
— |
heartbeat-interval |
Interval heartbeat sisi klien. | Tidak | DURATION | 10s |
— |
Pemetaan tipe
Mode kompatibel MySQL
| Tipe OceanBase | Tipe Flink |
|---|---|
TINYINT |
TINYINT |
SMALLINT, TINYINT UNSIGNED |
SMALLINT |
INT, MEDIUMINT, SMALLINT UNSIGNED |
INT |
BIGINT, INT UNSIGNED |
BIGINT |
BIGINT UNSIGNED |
DECIMAL(20, 0) |
REAL, FLOAT |
FLOAT |
DOUBLE |
DOUBLE |
NUMERIC(p, s), DECIMAL(p, s) |
DECIMAL(p, s) (p ≤ 38) |
BOOLEAN, TINYINT(1) |
BOOLEAN |
DATE |
DATE |
TIME [(p)] |
TIME [(p)] [WITHOUT TIME ZONE] |
DATETIME [(p)], TIMESTAMP [(p)] |
TIMESTAMP [(p)] [WITHOUT TIME ZONE] |
CHAR(n) |
CHAR(n) |
VARCHAR(n) |
VARCHAR(n) |
BIT(n) |
BINARY(⌈n/8⌉) |
BINARY(n) |
BINARY(n) |
VARBINARY(N) |
VARBINARY(N) |
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT |
STRING |
TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB |
BYTES (maks 2.147.483.647 byte) |
Mode kompatibel Oracle
| Tipe OceanBase | Tipe Flink |
|---|---|
NUMBER(p, s≤0), p−s < 3 |
TINYINT |
NUMBER(p, s≤0), p−s < 5 |
SMALLINT |
NUMBER(p, s≤0), p−s < 10 |
INT |
NUMBER(p, s≤0), p−s < 19 |
BIGINT |
NUMBER(p, s≤0), 19 ≤ p−s ≤ 38 |
DECIMAL(p−s, 0) |
NUMBER(p, s>0) |
DECIMAL(p, s) |
NUMBER(p, s≤0), p−s > 38 |
STRING |
FLOAT, BINARY_FLOAT |
FLOAT |
BINARY_DOUBLE |
DOUBLE |
NUMBER(1) |
BOOLEAN |
DATE, TIMESTAMP [(p)] |
TIMESTAMP [(p)] [WITHOUT TIME ZONE] |
CHAR(n), NCHAR(n), NVARCHAR2(n), VARCHAR(n), VARCHAR2(n), CLOB |
STRING |
BLOB, ROWID |
BYTES |
Contoh
Tabel sumber dan tabel sink
Contoh berikut membaca data CDC dari tabel sumber OceanBase dan menulisnya ke tabel sink JDBC. Definisi tabel sink impor bypass juga disertakan sebagai referensi.
Ketiga tabel menggunakan 'connector' = 'oceanbase'. Tabel sumber dan sink JDBC menggunakan set parameter yang berbeda; sink direct-load mengatur sink.mode = 'direct-load' dan terhubung melalui port RPC.
-- Tabel sumber CDC OceanBase (membaca riwayat lengkap, lalu Binlog)
CREATE TEMPORARY TABLE oceanbase_source (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'oceanbase',
'hostname' = '<your-hostname>',
'port' = '3306',
'username' = '<your-username>',
'password' = '<your-password>',
'database-name' = '<your-database-name>',
'table-name' = '<your-table-name>'
);
-- Tabel sink JDBC OceanBase (untuk penulisan streaming real-time)
CREATE TEMPORARY TABLE oceanbase_sink (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'oceanbase',
'url' = '<your-jdbc-url>',
'userName' = '<your-username>',
'password' = '<your-password>',
'tableName' = '<your-table-name>'
);
-- Tabel sink impor bypass OceanBase (untuk penulisan batch throughput tinggi)
-- Memerlukan sumber data bounded; atur Flink ke mode batch untuk performa terbaik
CREATE TEMPORARY TABLE oceanbase_directload_sink (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'oceanbase',
'sink.mode' = 'direct-load',
'host' = '<your-host>',
'port' = '<your-rpc-port>',
'tenant-name' = '<your-tenant-name>',
'schema-name' = '<your-schema-name>',
'table-name' = '<your-table-name>',
'username' = '<your-username>',
'password' = '<your-password>'
);
BEGIN STATEMENT SET;
INSERT INTO oceanbase_sink
SELECT * FROM oceanbase_source;
END;
Tabel dimensi
Contoh berikut melakukan join antara sumber Datagen dengan tabel dimensi OceanBase menggunakan temporal join. Kebijakan cache ALL memuat seluruh tabel dimensi ke memori sebelum pekerjaan dimulai.
CREATE TEMPORARY TABLE datagen_source (
a INT,
b BIGINT,
c STRING,
`proctime` AS PROCTIME()
) WITH (
'connector' = 'datagen'
);
-- Tabel dimensi OceanBase dengan kebijakan cache ALL
-- Cache ALL memuat tabel penuh saat startup — cocok untuk tabel kecil dan stabil
CREATE TEMPORARY TABLE oceanbase_dim (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'oceanbase',
'url' = '<your-jdbc-url>',
'userName' = '<your-username>',
'password' = '${secret_values.password}',
'tableName' = '<your-table-name>'
);
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 oceanbase_dim FOR SYSTEM_TIME AS OF T.`proctime` AS H
ON T.a = H.a;
Langkah selanjutnya
-
Connector yang didukung — daftar lengkap connector yang tersedia di Realtime Compute for Apache Flink
-
Connector MySQL — connector alternatif untuk mode MySQL OceanBase
-
Ikhtisar layanan OceanBase Binlog — diperlukan untuk pembacaan inkremental CDC