Topik ini menjawab beberapa pertanyaan umum terkait Blink dan Flink saat menggunakan Hologres.
Informasi latar belakang
Kinerja Hologres
Kinerja Penulisan
Tabel berorientasi kolom: InsertOrIgnore > InsertOrReplace > InsertOrUpdate
Tabel berorientasi baris: InsertOrReplace = InsertOrUpdate > InsertOrIgnore
Parameter
Deskripsi
InsertOrIgnore
Membuang data yang ingin Anda tulis jika kunci utama yang dimasukkan memiliki nilai yang sama dengan kunci utama di tabel hasil.
InsertOrReplace
Memperbarui tabel berdasarkan kunci utama yang dimasukkan jika kunci utama yang dimasukkan memiliki nilai yang sama dengan kunci utama di tabel hasil. Jika data yang ditulis tidak mencakup semua kolom, nilai null dimasukkan ke dalam kolom yang tidak tertimpa.
InsertOrUpdate
Memperbarui tabel berdasarkan kunci utama yang dimasukkan jika kunci utama yang dimasukkan memiliki nilai yang sama dengan kunci utama di tabel hasil. Jika data yang ditulis tidak mencakup semua kolom, kolom yang tidak tertimpa tidak diperbarui.
Kinerja Kueri Titik
Penyimpanan berorientasi baris = Penyimpanan hibrida baris-kolom > Penyimpanan berorientasi kolom
Dukungan untuk Jenis Layanan Blink, Realtime Compute for Apache Flink (VVP), dan Apache Flink
Jenis Layanan
Penyimpanan Data
Deskripsi
Tabel Sumber
Tabel Hasil
Tabel Dimensi
Pencatatan Biner
Katalog Hologres
Flink yang sepenuhnya dikelola
Penyimpanan berorientasi baris dan penyimpanan berorientasi kolom didukung.
Penyimpanan berorientasi baris dan penyimpanan berorientasi kolom didukung.
Disarankan menggunakan penyimpanan berorientasi baris.
Didukung.
Didukung.
Tidak ada.
Blink dalam mode eksklusif
Penyimpanan berorientasi baris dan penyimpanan berorientasi kolom didukung.
Penyimpanan berorientasi baris dan penyimpanan berorientasi kolom didukung.
Disarankan menggunakan penyimpanan berorientasi baris.
Hologres V0.8 hanya mendukung penyimpanan berorientasi baris. Hologres V0.9 dan versi lebih baru mendukung penyimpanan berorientasi baris dan penyimpanan berorientasi kolom. Disarankan menggunakan penyimpanan berorientasi baris.
Tidak didukung.
Blink dalam mode eksklusif akan dihentikan. Kami menyarankan Anda menggunakan Flink yang sepenuhnya dikelola.
Apache Flink V1.10
Penyimpanan berorientasi baris dan penyimpanan berorientasi kolom didukung.
Penyimpanan berorientasi baris dan penyimpanan berorientasi kolom didukung.
Tidak ada.
Tidak didukung.
Tidak didukung.
Tidak ada.
Apache Flink V1.11 dan lebih baru
Penyimpanan berorientasi baris dan penyimpanan berorientasi kolom didukung.
Penyimpanan berorientasi baris dan penyimpanan berorientasi kolom didukung.
Disarankan menggunakan penyimpanan berorientasi baris.
Tidak didukung.
Tidak didukung.
Kode Hologres dapat diakses secara publik di Apache Flink V1.11 dan lebih baru. Untuk informasi lebih lanjut, lihat alibabacloud-hologres-connectors.
Contoh pernyataan SQL untuk memetakan tabel Blink atau Flink ke tabel Hologres:
create table holo_source( 'hg_binlog_lsn' BIGINT HEADER, 'hg_binlog_event_type' BIGINT HEADER, 'hg_binlog_timestamp_us' BIGINT HEADER, A int, B int, C timestamp ) with ( type = 'hologres', 'endpoint' = 'xxx.hologres.aliyuncs.com:80', -- Titik akhir dari instance Hologres. 'userName' = '', -- ID AccessKey dari akun Alibaba Cloud Anda. 'password' = '', -- Rahasia AccessKey dari akun Alibaba Cloud Anda. 'dbName' = 'binlog', -- Nama database di instance Hologres. 'tableName' ='test' -- Nama tabel di instance Hologres. 'binlog' = 'true', );Tabel SQL Blink, Flink (VVP), atau Flink dibuat di Flink dan dipetakan ke tabel fisik di Hologres berdasarkan pengaturan parameter. Tabel SQL Blink, Flink (VVP), atau Flink tidak dapat dipetakan ke tabel asing di Hologres.
Memecahkan masalah lambatnya penulisan waktu nyata
Verifikasi konfigurasi terkait penulisan.
Verifikasi konfigurasi berikut:
Mode penyimpanan tabel tujuan, termasuk penyimpanan berorientasi baris, penyimpanan berorientasi kolom, dan penyimpanan hibrida baris-kolom.
Mode insert, seperti InsertOrIgnore, InsertOrUpdate, dan InsertOrReplace.
Grup tabel dan jumlah shard dari tabel tujuan.
-
Periksa metrik latensi penulisan waktu nyata.
Jika latensi penulisan rata-rata mencapai 100 milidetik atau beberapa detik, server backend mencapai batas kinerja penulisan. Dalam hal ini, masalah berikut mungkin terjadi:
Jika tabel berorientasi kolom menggunakan mode InsertOrUpdate dan operasi penulisan melibatkan sejumlah besar lalu lintas, beban CPU pada instance dan latensi penulisan tinggi.
Solusi: Gunakan tabel berorientasi baris, atau gunakan tabel penyimpanan hibrida baris-kolom jika versi instance Hologres Anda adalah V1.1 dan lebih baru.
Beban CPU instance yang dipantau oleh CloudMonitor mendekati 100% sementara tabel berorientasi kolom tidak diperbarui. Masalah ini mungkin terjadi karena permintaan per detik (QPS) yang tinggi atau sejumlah besar data yang ditulis.
Solusi: Tingkatkan kapasitas instance.
-
Konfirmasikan apakah perintah
Insert into select fromsecara terus-menerus memicu penulisan bulk load untuk tabel. Penulisan bulk load menghalangi penulisan real-time.Solusi: Ubah penulisan batch menjadi penulisan waktu nyata, atau lakukan penulisan batch selama jam-jam sepi.
Periksa apakah ada skew data.
Eksekusi pernyataan SQL berikut untuk memeriksa apakah ada skew data:
SELECT hg_shard_id, count(1) FROM t1 GROUP BY hg_shard_id ORDER BY hg_shard_id;Solusi: Jika skew data ada, ubah kunci distribusi untuk menyeimbangkan distribusi data.
Periksa apakah ada beban kerja berat di kluster backend.
Jika tidak ada masalah yang diidentifikasi setelah Anda melakukan pemeriksaan sebelumnya, penurunan mendadak dalam kinerja penulisan biasanya disebabkan oleh beban kerja berat di kluster backend. Dalam hal ini, hubungi dukungan teknis. Untuk informasi lebih lanjut, lihat Dapatkan dukungan online untuk Hologres.
Periksa apakah ada tekanan balik di Blink atau Flink.
Jika tidak ada masalah yang diidentifikasi setelah Anda melakukan pemeriksaan sebelumnya pada Hologres, penulisan waktu nyata yang lambat mungkin disebabkan oleh operasi lambat Blink atau Flink. Dalam hal ini, Anda harus memeriksa tekanan balik pada node sink. Jika hanya satu node sink yang digunakan, Anda tidak dapat memeriksa apakah tekanan balik ada. Anda harus memeriksa komponen node sink. Untuk informasi lebih lanjut, hubungi dukungan teknis Flink.
Memecahkan masalah dengan data yang ditulis
Masalah dengan data yang ditulis biasanya disebabkan oleh data yang tidak berurutan. Misalnya, jika data yang menggunakan kunci utama yang sama didistribusikan di tugas Flink yang berbeda, data tersebut tidak dapat ditulis dalam urutan aslinya. Anda harus memeriksa logika SQL Flink dan memastikan bahwa data yang ditulis di-shuffle berdasarkan kunci utama tabel tujuan Hologres.
Memecahkan masalah kueri di tabel dimensi
-
Operasi JOIN untuk tabel dimensi dan dua aliran data
Saat membaca data dari Hologres, pastikan bahwa penggabungan tabel dimensi digunakan dengan benar. Hindari salah mengartikannya sebagai penggabungan dua aliran. Contoh berikut menunjukkan cara menggunakan Hologres sebagai tabel dimensi. Jika kata kunci
proctime AS PROCTIME()danhologres_dim FOR SYSTEM_TIME AStidak ada, operasi tersebut menjadi penggabungan dua aliran.CREATE TEMPORARY TABLE datagen_source ( a INT, b BIGINT, c STRING, proctime AS PROCTIME() ) with ( 'connector' = 'datagen' ); CREATE TEMPORARY TABLE hologres_dim ( a INT, b VARCHAR, c VARCHAR ) with ( 'connector' = 'hologres', ... ); 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 hologres_dim FOR SYSTEM_TIME AS OF T.proctime AS H ON T.a = H.a; -
Kueri di Tabel Dimensi
Periksa mode penyimpanan tabel dimensi.
Periksa apakah mode penyimpanan tabel dimensi adalah penyimpanan berorientasi baris, penyimpanan berorientasi kolom, atau penyimpanan hibrida baris-kolom.
Periksa apakah latensi kueri di tabel dimensi tinggi.
Tekanan balik pada node join Flink atau Blink adalah masalah umum dalam penggunaan tabel dimensi dan menyebabkan throughput rendah.
Periksa mode join tabel dimensi Flink.
Operasi JOIN konektor tabel dimensi Hologres Flink dapat dilakukan dalam mode sinkron atau asinkron. Mode asinkron lebih baik daripada mode sinkron. Kode berikut memberikan contoh cara mengaktifkan mode asinkron:
CREATE TABLE hologres_dim( id INT, len INT, content VARCHAR ) with ( 'connector'='hologres', 'dbname'='<yourDbname>', -- Nama database Hologres. 'tablename'='<yourTablename>', --Nama tabel Hologres tempat data ditulis. 'username'='<yourUsername>', --ID AccessKey akun Alibaba Cloud Anda. 'password'='<yourPassword>', --Rahasia AccessKey akun Alibaba Cloud Anda. 'endpoint'='<yourEndpoint>' -- Titik akhir Virtual Private Cloud (VPC) dari instance Hologres. 'async' = 'true'-- Aktifkan mode asinkron. );Periksa latensi kueri di backend.
Periksa metrik latensi penulisan waktu nyata.
Periksa apakah tabel dimensi adalah tabel berorientasi kolom. Tabel dimensi berorientasi kolom memerlukan overhead tinggi dalam skenario dengan QPS tinggi.
Jika tabel dimensi adalah tabel berorientasi baris, latensi tinggi biasanya disebabkan oleh beban tinggi pada instance. Dalam hal ini, Anda harus meningkatkan kapasitas instance.
-
Periksa apakah kunci join adalah kunci utama.
Konektor Hologres VVR 4.x (Flink 1.13) dan yang lebih baru memungkinkan kueri menggunakan Holo Client berdasarkan kolom selain kolom kunci primer. Dalam hal ini, kinerja kueri biasanya rendah dan beban instans tinggi. Selain itu, tabel tidak dioptimalkan saat dibuat. Anda harus mengoptimalkan struktur tabel. Praktik umum adalah mengonfigurasi kunci gabungan sebagai kunci distribusi, yang memungkinkan pemangkasan shard.
Periksa tekanan balik pada node Blink.
Jika tidak ada masalah yang diidentifikasi setelah Anda melakukan pemeriksaan sebelumnya pada Hologres, kueri lambat mungkin disebabkan oleh operasi lambat Blink. Dalam hal ini, Anda harus memeriksa tekanan balik pada node sink. Jika hanya satu node sink yang digunakan, Anda tidak dapat memeriksa apakah tekanan balik ada. Anda harus memeriksa komponen node sink. Anda dapat menggunakan metode yang sama untuk memeriksa tekanan balik pada node join. Untuk informasi lebih lanjut, hubungi dukungan teknis Flink.
Catatan penggunaan koneksi
Secara default, konektor Hologres menggunakan mode terkait Java Database Connectivity (JDBC).
Mode JDBC_FIXED didukung. Mode ini tidak menempati koneksi, dan konsumsi log biner dalam mode ini tidak terbatas pada batas maksimum jumlah walsender. Untuk informasi lebih lanjut, lihat Konektor Hologres.
Mulai dari mesin Flink VVR-8.0.5-Flink-1.17, penggunaan ulang koneksi diaktifkan secara default dengan
'connectionPoolName' = 'default'. Ini tidak memengaruhi sebagian besar pekerjaan. Namun, jika satu pekerjaan memiliki banyak tabel, performa mungkin menurun setelah peningkatan. Dalam kasus ini, Anda dapat mengonfigurasi parameterconnectionPoolNameuntuk tabel hot spot guna mengoptimalkan performa.Dalam mode JDBC, sejumlah koneksi digunakan. Tabel berikut menjelaskan jumlah koneksi default yang digunakan oleh berbagai jenis tabel.
Jenis tabel
Jumlah koneksi default untuk setiap pod dalam pekerjaan Flink
Tabel sumber log biner
0
Tabel sumber untuk pembacaan batch
1
Tabel dimensi
3 (Anda dapat menyesuaikan ini menggunakan parameter
connectionSize)Tabel hasil
3 (Anda dapat menyesuaikan ini menggunakan parameter
connectionSize)Perhitungan Jumlah Koneksi
Pengaturan Default
Secara default, jumlah maksimum koneksi yang dapat digunakan oleh sebuah pekerjaan dihitung menggunakan rumus berikut:
Koneksi maksimum = (Jumlah tabel sumber batch × 1 + Jumlah tabel dimensi × connectionSize + Jumlah tabel sink × connectionSize) × Paralelisme pekerjaan.Sebagai contoh, sebuah pekerjaan memiliki satu tabel sumber penuh dan inkremental, dua tabel dimensi, dan tiga tabel sink. Semua tabel menggunakan nilai parameter default
connectionSize. Paralelisme pekerjaan diatur ke5. Jumlah akhir koneksi yang digunakan adalah(1 × 1 + 2 × 3 + 3 × 3) × 5 = 80.Penggunaan Ulang Koneksi
Realtime Compute for Apache Flink 1.13-vvr-4.1.12 dan versi selanjutnya mendukung penggunaan ulang koneksi. Dalam instance konkuren yang sama dari sebuah pekerjaan, tabel dimensi dan tabel sink dengan
connectionPoolNameyang sama menggunakan kolam koneksi yang sama. Dalam contoh sebelumnya, jika dua tabel dimensi dan tiga tabel sink dikonfigurasikan denganconnectionPoolNameyang sama, danconnectionSizeditingkatkan menjadi5, jumlah akhir koneksi yang digunakan adalah(1 × 1 + 5) × 5 = 30.CatatanMode penggunaan ulang koneksi berlaku untuk sebagian besar skenario. Namun, dalam skenario dengan banyak tabel dimensi atau dalam skenario tanpa mengaktifkan mode asinkron dan caching, query titik sinkron sering dilakukan. Dengan cara ini, penggunaan ulang koneksi multi-tabel dapat menyebabkan query lambat. Dalam hal ini, Anda dapat mengonfigurasi penggunaan ulang koneksi hanya untuk tabel hasil.
Skenario Lain
Saat pekerjaan dimulai, tiga hingga enam koneksi perlu dibuat untuk memverifikasi metadata tabel. Setelah pekerjaan berjalan sesuai harapan, koneksi dilepaskan.
Flink yang sepenuhnya dikelola mendukung fitur seperti katalog Hologres, pernyataan CREATE TABLE AS (CTAS), dan pernyataan CREATE DATABASE AS (CDAS). Saat Anda menggunakan fitur-fitur ini, koneksi digunakan. Secara default, pekerjaan yang menggunakan katalog Hologres mengonsumsi tiga koneksi tambahan untuk operasi bahasa definisi data (DDL) seperti membuat tabel.
Diagnosis Koneksi
Jika sebuah pekerjaan memiliki banyak tabel dan tingkat paralelisme tinggi, banyak koneksi digunakan. Jumlah koneksi yang digunakan di Hologres mungkin mencapai batas atas. Anda dapat menggunakan metode berikut untuk mempelajari dan mendiagnosis koneksi saat ini:
Anda dapat menggunakan perintah berikut di HoloWeb untuk melihat query aktif saat ini di tabel
pg_stat_activity. Untuk informasi lebih lanjut, lihat Informasi Tampilan pg_stat_activity. Query tempat bidangapplication_nameadalahververica-connector-hologresmewakili koneksi baca/tulis dari Realtime Compute for Apache Flink.SELECT application_name, COUNT (1) AS COUNT FROM pg_stat_activity WHERE backend_type = 'client backend' AND application_name != 'hologres' GROUP BY application_name;Terkadang, paralelisme pekerjaan diatur terlalu tinggi. Pada halaman Informasi Pemantauan untuk instans di konsol Hologres Instance List, Anda dapat melihat bahwa jumlah koneksi tinggi saat startup dan kemudian menurun. Hal ini terjadi karena banyak koneksi menjadi idle dan ditutup. Ini menunjukkan bahwa pekerjaan tidak memerlukan paralelisme setinggi itu atau sebanyak itu koneksi. Anda harus merencanakan jumlah koneksi untuk tugas tersebut, mengurangi paralelisme atau nilai parameter
connectionSize, atau menggunakan mode penggunaan ulang koneksi.Atur ulang paralelisme node Hologres. Secara default, paralelisme semua operator dalam pekerjaan Flink sama. Dalam skenario tertentu, operator yang berisi logika komputasi kompleks memerlukan paralelisme lebih tinggi. Namun, paralelisme tinggi mungkin berlebihan untuk tabel hasil Hologres dan dapat memakan banyak koneksi. Dalam hal ini, Anda dapat menggunakan mode ahli dan menentukan paralelisme kecil yang sesuai untuk operator tulis berdasarkan konfigurasi sumber daya pekerjaan Anda. Ini membantu mengurangi jumlah total koneksi.
Kesalahan umum
Kesalahan: ERPC TIMEOUT atau ERPC CONNECTION CLOSED
Gejala: Kesalahan
com.alibaba.blink.store.core.rpc.RpcException: request xx UpsertRecordBatchRequest failed on final try 4, maxAttempts=4, errorCode=3, msg=ERPC_ERROR_TIMEOUTdilaporkan.Penyebab: Operasi penulisan gagal karena tekanan berlebih atau kluster yang sibuk. Periksa apakah Beban CPU dari instans Hologres mencapai batas maksimum. Kesalahan
CONNECTION CLOSEDdapat terjadi karena beban berlebih menyebabkan node backend crash, mengakibatkan kehabisan memori (OOM) atau coredump.Solusi: Coba lagi operasi penulisan. Jika kesalahan tetap ada, hubungi dukungan teknis Hologres.
Kesalahan: BackPresure Exceed Reject Limit
Penyebab: Beban kerja penulisan di backend berat dan sistem tidak dapat membersihkan data di tabel memori secara tepat waktu. Akibatnya, terjadi kegagalan penulisan.
Solusi: Abaikan kesalahan jika pesan kesalahan dilaporkan hanya sesekali, atau tambahkan konfigurasi rpcRetries = '100' untuk sink untuk meningkatkan jumlah percobaan ulang penulisan. Jika kesalahan tetap ada, hubungi dukungan teknis Hologres.
Kesalahan: Nama tabel yang diminta xxx tidak cocok dengan versi tabel xxx dari server/org.postgresql.util.PSQLException: Terjadi kesalahan I/O saat mengirim ke backend.Disebabkan oleh: java.net.SocketTimeoutException: Read timed out
Penyebab: Pernyataan ALTER TABLE dijalankan. Akibatnya, versi skema tabel Blink lebih awal daripada yang ada di server dan jumlah maksimum percobaan ulang tercapai.
Solusi: Abaikan kesalahan jika hanya terjadi sesekali. Jika kesalahan tetap ada, hubungi dukungan teknis Hologres.
Kesalahan: Gagal menanyakan metadata tabel untuk tabel
Penyebab: Tabel asing dibaca. Namun, konektor Hologres tidak mendukung operasi baca dan tulis pada tabel asing. Selain itu, kesalahan ini disebabkan oleh masalah terkait metadata instance Hologres.
Solusi: Hubungi dukungan teknis Hologres.
Kesalahan: Otentikasi cloud gagal untuk access id
Penyebab: Pasangan AccessKey salah, atau tidak ada akun pengguna yang ditambahkan ke instance Hologres.
Solusi:
Verifikasi ID AccessKey dan Rahasia AccessKey. Dalam kebanyakan kasus, kesalahan ini dilaporkan jika Rahasia AccessKey salah atau mengandung spasi.
Jika Anda tidak dapat menemukan penyebabnya, gunakan AccessKey saat ini untuk terhubung ke HoloWeb dengan masuk menggunakan akun dan kata sandi. Periksa pesan kesalahan saat Anda menguji koneksi. Jika kesalahan yang sama dilaporkan, AccessKey tidak valid. Jika kesalahan
FATAL: role "ALIYUN$xxxx" does not existdilaporkan, akun tersebut tidak memiliki izin pada instans. Administrator harus memberikan izin yang diperlukan kepada akun tersebut.
Apa yang harus saya lakukan jika tidak ada data yang dapat dikueri setelah tabel dimensi digabungkan dengan tabel lain?
Penyebab: Tabel dimensi adalah tabel partisi. Hologres tidak mengizinkan tabel partisi untuk berfungsi sebagai tabel dimensi.
Solusi: Konversikan tabel partisi menjadi tabel standar.
Kesalahan: Memodifikasi rekaman berdasarkan kunci primer tidak ada pada tabel ini
Penyebab: Mode pembaruan ditentukan, tetapi tidak ada kunci utama yang dikonfigurasikan untuk tabel hasil Hologres.
Solusi: Konfigurasikan kunci utama.
Kesalahan: Jumlah kolom shard tidak cocok
Penyebab: Tidak semua kolom kunci distribusi ditulis. Secara default, kolom kunci utama adalah kolom kunci distribusi.
Solusi: Tulis semua kolom kunci distribusi.
Kesalahan: Baris penuh diperlukan, tetapi kolom xxx hilang
Penyebab: Data di kolom yang diperlukan hilang. Kesalahan ini dilaporkan di versi Hologres sebelumnya.
Solusi: Tetapkan nilai ke kolom yang diperlukan.
Apa yang harus saya lakukan jika jumlah koneksi JDBC meningkat tajam ketika pengguna VVP membaca data dari atau menulis data ke Hologres?
Penyebab: Konektor Hologres VVP menggunakan mode JDBC untuk membaca dari atau menulis ke Hologres, kecuali untuk binary logging. Ini menempati maksimal
(Jumlah tabel Hologres untuk baca/tulis) × Paralelisme × connectionSizekoneksi. `connectionSize` adalah parameter tabel VVP dengan nilai default 3.Solusi: Jadwalkan jumlah koneksi yang sesuai, dan kurangi jumlah operasi baca/tulis bersamaan atau nilai parameter connectionSize. Jika jumlah operasi baca/tulis bersamaan atau nilai parameter connectionSize tidak dapat dikurangi, atur useRpcMode ke true untuk beralih ke mode RPC.
Apa yang harus saya lakukan jika pengguna Blink dan VVP tidak dapat terhubung ke Hologres saat mereka mencoba membaca data dari atau menulis data ke Hologres?
Penyebab: Kluster Blink atau VVP lambat atau tidak dapat mengakses Internet.
Solusi: Pastikan bahwa kluster Blink atau VVP berada di wilayah yang sama dengan instance Hologres dan menggunakan titik akhir VPC.
Kesalahan: Mode rpc Hologres tabel dimensi tidak mendukung join satu-ke-banyak
Penyebab: Dalam mode RPC untuk Blink dan VVP, tabel dimensi harus berupa tabel berorientasi baris dan bidang join harus merupakan kunci primer. Kesalahan ini sering terjadi karena kedua kondisi ini tidak terpenuhi.
Solusi: Gunakan mode JDBC dan gunakan mode penyimpanan berorientasi kolom atau hibrida baris-kolom untuk tabel dimensi.
Apa yang harus saya lakukan jika pesan kesalahan DatahubClientException dilaporkan?
Gejala: Kesalahan
Disebabkan oleh: com.aliyun.datahub.client.exception.DatahubClientException: [httpStatus:503, requestId:null, errorCode:null, errorMessage:{"ErrorCode":"ServiceUnavailable","ErrorMessage":"Queue Full"}]dilaporkan.Penyebab: Kolam thread penuh karena banyak pekerjaan konsumsi log biner dimulai ulang secara bersamaan karena alasan tertentu.
Solusi: Konsumsi log biner dalam batch.
Apa yang harus saya lakukan jika pesan kesalahan Error occurs when reading data from datahub dilaporkan?
Gejala: Kesalahan
Kesalahan terjadi saat membaca data dari datahub, msg: [httpStatus:500, requestId:xxx, errorCode:InternalServerError, errorMessage:Get binlog timeout.]dilaporkan.Penyebab: Setiap log biner berisi sejumlah besar data, yang membuat ukuran setiap permintaan RPC melebihi batas atas.
Solusi: Kurangi jumlah log biner dalam setiap batch ketika banyak bidang data dan string karakter panjang ada di setiap baris.
Kesalahan: Disebabkan oleh: java.lang.IllegalArgumentException: Kolom: created_time tipe tidak cocok: tipe baris flink: TIMESTAMP(6) WITH LOCAL TIME ZONE, hologres tipe: timestamp
Penyebab: Bidang Flink bertipe data TIMESTAMP(6), yang tidak didukung oleh Hologres.
Solusi: Ubah tipe data menjadi TIMESTAMP.
Kesalahan: Disebabkan oleh: org.postgresql.util.PSQLException: FATAL: Ditolak oleh daftar putih IP. db = xxx, usr=xxx, ip=xx.xx.xx.xx
Penyebab: Daftar putih alamat IP yang dikonfigurasikan di Hologres tidak berisi alamat IP yang digunakan oleh Flink untuk terhubung ke Hologres.
Solusi: Tambahkan alamat IP yang digunakan oleh Flink ke daftar putih alamat IP Hologres. Untuk informasi lebih lanjut, lihat Konfigurasikan daftar putih alamat IP.
Kesalahan: Disebabkan oleh: java.lang.RuntimeException: shaded.hologres.com.aliyun.datahub.client.exception.DatahubClientException: [httpStatus:400, requestId:xx, errorCode:TableVersionExpired, errorMessage:Tabel yang ditentukan telah dimodifikasi, harap refresh cursor dan coba lagi
Penyebab: Operasi DDL dilakukan pada tabel sumber, dan versi tabel berubah. Akibatnya, konsumsi data gagal.
Solusi: Tingkatkan versi Realtime Compute for Apache Flink ke 4.0.16 atau lebih baru. Setelah peningkatan, percobaan ulang konsumsi data dilakukan jika terjadi kegagalan.
Ketika pekerjaan yang mengonsumsi log biner dimulai, sebuah kesalahan dilaporkan untuk menunjukkan bahwa ID shard tidak ada. Apa yang harus saya lakukan?
Penyebab: Jumlah shard di tabel yang ingin Anda konsumsi datanya berubah setelah Anda mengganti nama tabel atau melakukan operasi lain pada tabel. Namun, informasi shard dari tabel asli digunakan ketika pekerjaan pulih dari checkpoint.
Solusi: Setelah Anda melakukan operasi seperti pembuatan ulang tabel, offset konsumsi log biner yang disimpan di checkpoint tidak valid. Anda harus memulai pekerjaan tanpa status.
Kesalahan: ERROR,22021,"urutan byte tidak valid untuk pengkodean ""UTF8"": 0x00"
Penyebab: Ketika Anda melakukan kueri titik di tabel dimensi, kunci utama dari tipe data STRING berisi karakter yang tidak dikodekan UTF-8. Akibatnya, pernyataan SQL gagal dieksekusi.
Solusi: Proses data kotor upstream.
Kesalahan: hologres.org.postgresql.util.PSQLException: ERROR: kesalahan sintaksis
Penyebab: Anda harus menentukan slot saat mengonsumsi data di log biner dalam mode JDBC. Kesalahan ini mungkin terjadi jika nama slot yang dibuat berisi karakter yang tidak didukung. Nama slot hanya boleh berisi huruf kecil, angka, dan garis bawah (_).
Solusi: Buat ulang slot, atau gunakan fitur pembuatan slot otomatis VVR 6.0.7.
Kesalahan: gagal membuat tabel hologres.hg_replication_progress
Penyebab: Saat Anda mengonsumsi log biner dalam mode JDBC, tabel
hg_replication_progressmungkin diperlukan. Jika tabel ini tidak ada di database saat ini, tabel tersebut perlu dibuat. Namun, pembuatan gagal karena jumlah shard yang dapat dibuat untuk instans telah mencapai batas atas.Solusi: Bersihkan database yang tidak lagi Anda butuhkan.
Pengecualian: Pekerjaan macet selama runtime. Sebuah thread dump menunjukkan bahwa pekerjaan macet pada tahap pemuatan driver JDBC, biasanya pada posisi Class.forName
Penyebab: Beberapa operasi inisialisasi statis dilakukan saat driver JDBC dimuat di JDK 8. Kondisi balapan mungkin terjadi selama pemuatan multi-thread.
Solusi: Coba lagi operasi atau gunakan konektor yang versi Realtime Compute for Apache Flink-nya adalah 6.0.7.
Apa yang harus saya lakukan jika pesan kesalahan "no table is defined in publication" atau "The table xxx has no slot named xxx" dilaporkan saat saya mengonsumsi log biner dalam mode JDBC?
Penyebab: Saat Anda menjatuhkan tabel dan membuat tabel lain dengan nama yang sama, publikasi yang terikat ke tabel lama tidak dijatuhkan.
Solusi: Ketika pengecualian ini terjadi, Anda dapat menjalankan pernyataan
select * from pg_publication where pubname not in (select pubname from pg_publication_tables);di Hologres untuk menanyakan publikasi yang tidak dibersihkan. Kemudian, jalankan pernyataandrop publication xx;untuk menghapus publikasi yang tersisa. Setelah itu, Anda dapat memulai ulang pekerjaan.
Apa yang harus saya lakukan jika pesan kesalahan "permission denied for database" dilaporkan saat saya mempublikasikan pekerjaan?
Penyebab: Izin yang diperlukan tidak diberikan ke akun Anda saat Anda ingin mengonsumsi log biner dalam mode JDBC di Hologres V1.3 atau Hologres V2.0.
Solusi: Kami sarankan Anda meningkatkan instans Hologres Anda ke V2.1 dan menggunakan konektor yang berjalan pada Ververica Runtime (VVR) 8.0.5 atau yang lebih baru. Dengan cara ini, Anda dapat mengonsumsi log biner menggunakan akun yang diberi izin read-only. Jika peningkatan tidak didukung, berikan izin yang diperlukan berdasarkan batasan dalam Gunakan konektor Hologres dari Realtime Compute for Apache Flink untuk mengonsumsi data Hologres secara real-time.
Apa yang harus saya lakukan jika pesan kesalahan "table writer init failed: Fail to fetch table meta from sm" dilaporkan?
Penyebab: Data ditulis ke tabel setelah operasi truncate atau rename dilakukan pada tabel.
Solusi: Masalah ini kadang-kadang terjadi dan dapat diabaikan. Masalah ini diselesaikan secara otomatis setelah failover pekerjaan. Di Hologres V2.1.1 hingga V2.1.14, waktu cache replay ditingkatkan untuk node FE. Jika Anda mengeksekusi pernyataan DDL dan kemudian pernyataan bahasa manipulasi data (DML) pada tabel, replay DDL melambat. Probabilitas pengecualian serupa mungkin meningkat. Kami menyarankan Anda meningkatkan instance Hologres Anda ke versi minor terbaru dari V2.1.
Apa yang harus saya lakukan jika pesan kesalahan serupa dengan "java.lang.ClassNotFoundException: com.alibaba.ververica.connectors.hologres.binlog.source.reader.HologresBinlogRecordEmitter" dilaporkan saat saya menggunakan dependensi konektor untuk mengembangkan pekerjaan DataStream di lingkungan lokal?
Penyebab: Kelas run-time tertentu tidak tersedia di paket JAR konektor Alibaba Cloud Realtime Compute for Apache Flink.
Solusi: Sesuaikan dependensi dengan mengikuti instruksi di Jalankan atau debug deployment Flink yang mencakup konektor di lingkungan lokal.
Apa yang harus saya lakukan jika pesan kesalahan "Binlog Convert Failed" dilaporkan atau pembacaan data dari beberapa shard berhenti pada titik waktu tertentu selama konsumsi log biner dalam mode JDBC?
Penyebab: Saat gateway instance Hologres menerima pesan timeout backend, gateway mengirimkan pengecualian ke klien. Dalam proses ini, terjadi kesalahan. Akibatnya, pembacaan data macet, atau parsing data gagal.
Solusi: Dalam kebanyakan kasus, kesalahan ini terjadi karena backpressure pekerjaan. Jika pembacaan data macet, lanjutkan pekerjaan dari checkpoint terbaru. Untuk sepenuhnya menyelesaikan masalah ini, Anda harus meningkatkan instance Hologres Anda ke V2.2.21 atau lebih baru.