Topik ini menjawab pertanyaan umum mengenai sinkronisasi real-time.
Ikhtisar
|
Category |
Related topics |
|
Catatan konfigurasi untuk tugas sinkronisasi real-time |
|
|
FAQ untuk sinkronisasi data MySQL secara real-time |
|
|
FAQ untuk sinkronisasi data Oracle, PolarDB, dan MySQL secara real-time |
Tugas sinkronisasi real-time untuk Oracle, PolarDB, atau MySQL gagal berulang kali |
|
Pesan error dan solusi |
|
Catatan konfigurasi untuk sinkronisasi real-time
Sumber data yang didukung
Untuk daftar sumber data yang didukung untuk sinkronisasi real-time, lihat Sumber data yang didukung untuk sinkronisasi real-time.
Latensi tinggi dalam sinkronisasi real-time
Jika Anda melakukan kueri pada tabel tujuan dan menemukan bahwa data baru tidak tersedia, tugas sinkronisasi real-time mungkin mengalami latensi tinggi. Anda dapat membuka halaman tugas sinkronisasi real-time di latency untuk memeriksa apakah latency tugas terlalu tinggi. Untuk informasi lebih lanjut, lihat Solusi untuk latensi tinggi pada tugas sinkronisasi real-time.
Latensi tinggi dapat disebabkan oleh alasan berikut:
|
Symptom |
Direct cause |
Solution |
|
High read-side latency |
Perubahan data berlebihan di sumber. Kenaikan latensi yang tiba-tiba menunjukkan lonjakan volume data di sumber pada waktu tertentu. |
Jika pembaruan yang sering dan volume data besar di sumber menyebabkan latensi sinkronisasi tinggi, lakukan tindakan berikut:
|
|
The starting offset is set too early. |
Jika offset awal terlalu dini, tugas sinkronisasi real-time memerlukan waktu untuk mengejar ketinggalan data. |
|
|
High write-side latency |
Masalah kinerja atau beban pada database tujuan. |
Jika beban database tinggi, hanya menyesuaikan konkurensi tugas sinkronisasi tidak akan menyelesaikan masalah. Anda perlu menghubungi administrator basis data Anda untuk bantuan. |
|
High read-side and write-side latency |
Sinkronisasi melalui internet publik menyebabkan masalah jaringan yang mengakibatkan latensi tugas. |
Sinkronisasi melalui internet publik tidak dapat menjamin ketepatan waktu real-time. Buat koneksi jaringan dan sinkronkan data melalui jaringan internal. Catatan
Sinkronisasi melalui internet publik memiliki risiko berikut: ketidakstabilan jaringan dan kehilangan paket yang sering memengaruhi kinerja sinkronisasi serta keamanan yang rendah. |
|
Perbedaan kinerja yang besar antara database sumber dan tujuan atau beban database yang tinggi juga dapat menyebabkan latensi tinggi. |
Jika beban database tinggi, hanya menyesuaikan konkurensi tugas sinkronisasi tidak akan menyelesaikan masalah. Anda perlu menghubungi administrator basis data Anda untuk bantuan. |
Menggunakan jaringan publik
Menggunakan internet publik untuk tugas sinkronisasi real-time menimbulkan risiko berikut:
-
Jaringan mungkin tidak stabil, dan kehilangan paket yang sering dapat memengaruhi kinerja sinkronisasi.
-
Keamanan rendah.
Format kolom
Saat Data Integration menyinkronkan data dari MySQL, Oracle, LogHub, dan PolarDB ke DataHub atau Apache Kafka secara real-time, lima kolom tambahan ditambahkan ke tujuan untuk mendukung manajemen metadata, pengurutan catatan, dan deduplikasi. Untuk informasi lebih lanjut, lihat Format kolom dalam sinkronisasi real-time.
Penanganan operasi TRUNCATE
Sinkronisasi real-time mendukung operasi TRUNCATE, yang berlaku selama penggabungan inkremental dan penuh. Jika Anda memilih untuk mengabaikan TRUNCATE, data ekstra mungkin muncul di tabel tujuan.
Perbaikan kinerja
Jika kecepatan penulisan lambat, Anda dapat meningkatkan konkurensi sisi tulis dan menyetel parameter JVM. Pengaturan parameter JVM bergantung pada frekuensi perubahan data, bukan jumlah database yang disinkronkan. Jika kelompok sumber daya Anda mengizinkan, mengalokasikan lebih banyak memori dapat mengurangi frekuensi full GC dan meningkatkan kinerja sinkronisasi real-time. Tetapkan Concurrency ke 3. Di panel Basic configuration tugas, tetapkan JVM Parameters ke -Xms8192m -Xmx8192m.
Menjalankan tugas di konsol
Tidak, Anda tidak dapat menjalankan tugas sinkronisasi real-time langsung dari konsol DataWorks. Setelah Anda mengonfigurasi tugas sinkronisasi real-time, Anda harus mengirim dan menerapkan node sinkronisasi real-time, lalu menjalankan node tersebut di lingkungan produksi. Untuk informasi lebih lanjut, lihat Operasi dan tuning untuk sinkronisasi real-time tabel tunggal.
Melambat dengan sumber MySQL
Salah satu alasannya adalah peningkatan jumlah binlog yang perlu disinkronkan. Karena binlog dihasilkan di tingkat instans, bahkan jika tugas sinkronisasi dikonfigurasi hanya untuk menyinkronkan Tabel A, perubahan pada tabel lain di instans tersebut, seperti Tabel B dan Tabel C, juga menghasilkan binlog. Binlog tambahan ini memperlambat proses sinkronisasi.
Penggunaan memori untuk satu vs. beberapa database
Saat Anda memilih dua atau lebih database, tugas masuk ke mode sinkronisasi real-time instans penuh. Mode ini mengonsumsi lebih banyak sumber daya daripada dua tugas real-time terpisah yang masing-masing menyinkronkan satu database.
Kebijakan DDL yang didukung
Metode penanganan:
|
Processing |
Ignore |
Alert |
Error |
|
Pesan DDL diteruskan ke sumber data tujuan untuk diproses. Kebijakan pemrosesan dapat bervariasi tergantung pada sumber data tujuan. |
Pesan DDL dibuang, dan sumber data tujuan tidak melakukan tindakan apa pun. |
Pesan DDL dibuang, dan peringatan dikirim. Catatan
Jika tidak ada aturan peringatan yang dikonfigurasi untuk tugas real-time, Anda tidak akan menerima peringatan yang sesuai. |
Tugas dihentikan dengan error. Catatan
Jika aturan peringatan yang sesuai dengan status tugas dikonfigurasi untuk tugas real-time, Anda dapat menerima peringatan yang sesuai. |
Jenis DDL:
|
Create table |
|
|
Drop table |
|
|
Add column |
|
|
Drop column |
Processing tidak didukung. Anda hanya dapat memilih Ignore, Alert, atau Error. |
|
Rename table |
Processing tidak didukung. Anda hanya dapat memilih Ignore, Alert, atau Error. |
|
Rename column |
Processing tidak didukung. Anda hanya dapat memilih Ignore, Alert, atau Error. |
|
Alter column type |
|
|
Truncate table |
|
Pertimbangan DDL dan DML sumber
-
Setelah kolom baru ditambahkan di sumber dan diproses di tujuan, batasan berikut berlaku:
-
Saat kolom dengan DEFAULT VALUE ditambahkan, kolom baru di tabel tujuan tetap NULL. Selanjutnya, saat data baru ditambahkan ke kolom ini di sumber, tugas menyinkronkannya ke tujuan.
-
Saat kolom VIRTUAL ditambahkan, kolom baru di tabel tujuan tetap NULL. Selanjutnya, saat data baru ditambahkan ke kolom ini di sumber, tugas menyinkronkannya ke tujuan.
-
-
Untuk sinkronisasi real-time dari sumber MySQL dan PolarDB for MySQL, tambahkan kolom baru di akhir tabel alih-alih menyisipkannya di tengah. Jika penyisipan kolom di tengah tidak dapat dihindari di sumber, batasan berikut berlaku:
-
Dalam solusi penuh dan inkremental, jangan tambahkan kolom di tengah selama fase sinkronisasi penuh. Hal ini dapat menyebabkan anomali data selama fase sinkronisasi real-time.
-
Selama fase sinkronisasi real-time, waktu reset offset sinkronisasi harus ditetapkan setelah event DDL yang menambahkan kolom di tengah. Jika tidak, anomali data akan terjadi selama sinkronisasi berikutnya.
-
-
Jika terjadi anomali data, Anda dapat memulihkan data dengan melakukan inisialisasi ulang tabel yang terpengaruh. Anda hanya perlu melakukan inisialisasi ulang pada satu tabel tempat kolom ditambahkan, bukan semua tabel dalam tugas.
Jika tabel sumber memiliki nilai default, apakah nilai default dan kendala NOT NULL dipertahankan di tabel tujuan yang dibuat oleh Data Integration?
Latensi tinggi setelah failover PostgreSQL
Ini adalah perilaku dari database PostgreSQL itu sendiri. Jika latensi tidak dapat diterima, Anda dapat menghentikan tugas dan me-restart-nya untuk melakukan sinkronisasi data penuh dan inkremental.
Menjalankan sinkronisasi penuh
Di Data Integration, temukan tugas Anda di daftar tugas sinkronisasi. Lalu, di kolom Actions, klik .
FAQ sinkronisasi real-time MySQL
Tugas berhenti membaca dari MySQL
-
Jalankan perintah berikut di database untuk mengidentifikasi file binlog saat ini.
show master status -
Bandingkan ini dengan file binlog yang dibaca oleh tugas. Cari log untuk
journalName=mysql-bin.000001,position=50untuk memastikan apakah data sedang ditulis ke database. -
Jika data sedang ditulis tetapi binlog tidak maju, hubungi DBA Anda untuk bantuan.
FAQ Oracle, PolarDB, dan MySQL
Kegagalan tugas berulang untuk Oracle, PolarDB, dan MySQL
-
Symptom: Tugas sinkronisasi real-time gagal berulang kali.
Saat sumber sinkronisasi real-time adalah sumber data Oracle, PolarDB, atau MySQL, pemrosesan pesan DDL dari sumber tidak didukung secara default. Ketika terjadi perubahan DDL selain pembuatan tabel baru, tugas real-time gagal dan keluar. Dengan breakpoint resume, sinkronisasi mungkin tetap gagal meskipun tidak ada pesan DDL yang dihasilkan di sumber.
CatatanUntuk menghindari kehilangan atau kerusakan data, jangan gunakan perintah Rename untuk menukar nama dua kolom. Misalnya, jangan tukar nama Kolom A dan Kolom B.
-
Cause: Sinkronisasi real-time mendukung breakpoint resume. Untuk memastikan tidak ada data yang hilang, tugas mungkin mundur ke offset sebelumnya saat dimulai ulang. Hal ini dapat menyebabkan tugas membaca kembali pesan DDL sebelumnya, memicu kegagalan lain.
-
Solution:
-
Saat terjadi perubahan DDL di sumber, lakukan secara manual perubahan DDL yang sesuai pada database tujuan.
-
Jalankan tugas sinkronisasi real-time dan ubah kebijakan DDL dari Error ke Ignore.
CatatanKarena breakpoint resume mungkin tetap berlangganan event DDL ini, ubah sementara kebijakan ke Ignore untuk mencegah tugas gagal lagi.
-
Hentikan tugas sinkronisasi real-time, ubah kebijakan DDL dari Ignore kembali ke Error, lalu restart tugas.
-
Pesan error dan solusi
Error Kafka: Startup mode for the consumer set to timestampOffset, but no begin timestamp was specified.
Reset offset awal. Di kotak dialog Start untuk tugas, temukan opsi Reset offset dan centang kotak Reset offset untuk mengaktifkan fitur ini.
Fungsi Reset offset di Data Integration memungkinkan Anda mengubah titik awal untuk sinkronisasi data. Gunakan fungsi ini untuk menjalankan ulang tugas dari waktu atau posisi data tertentu, misalnya untuk memulihkan dari error atau menyinkronkan ulang data tertentu. Hal ini memastikan konsistensi dan integritas data.
Error MySQL: Cannot replicate because the master purged required binary logs.
Jika tugas sinkronisasi real-time MySQL gagal dengan pesan Cannot replicate because the master purged required binary logs. Replicate the missing transactions from elsewhere, or provision a new slave from backup., hal ini mungkin karena MySQL tidak memiliki catatan binlog pada offset yang dikonsumsi. Periksa periode retensi binlog di pengaturan MySQL Anda dan pastikan offset dikonfigurasi dalam rentang waktu ini saat tugas sinkronisasi dimulai.
Jika Anda tidak dapat berlangganan binlog, coba reset offset ke waktu saat ini.
Error MySQL: MySQLBinlogReaderException
Jika tugas sinkronisasi real-time MySQL gagal dengan pesan MySQLBinlogReaderException: The database you are currently syncing is the standby database, but the current value of log_slave_updates is OFF, you need to enable the binlog log update of the standby database first. , hal ini mungkin karena binlog tidak diaktifkan pada database standby. Jika Anda ingin menyinkronkan database standby, Anda harus mengaktifkan binlog untuk database standby cascading. Anda dapat meminta bantuan DBA Anda.
Untuk informasi lebih lanjut tentang cara mengaktifkan binlog, lihat Langkah 3: Aktifkan binlog untuk MySQL.
Error MySQL: show master status' has an error!
Jika tugas sinkronisasi real-time MySQL gagal dengan pesan show master status' has an error! dan detail error-nya adalah Caused by: java.io.IOException: message=Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation, with command: show master status, hal ini mungkin karena akun sumber data tidak memiliki izin database yang diperlukan.
Akun yang dikonfigurasi untuk sumber data harus memiliki izin SELECT, REPLICATION SLAVE, dan REPLICATION CLIENT untuk database tersebut. Untuk informasi lebih lanjut tentang cara memberikan izin kepada akun sumber data, lihat Langkah 2: Buat akun dan berikan izin.
Error MySQL: parse.exception.PositionNotFoundException: can't find start position forxxx
Proses sinkronisasi tidak dapat menemukan offset. Harap reset offset.
Kesalahan PolarDB: Server mysql tidak mengaktifkan fungsi tulis binlog. Harap aktifkan fungsi tulis binlog mysql terlebih dahulu
-
Penyebab kemungkinan: Parameter loose_polar_log_bin tidak diaktifkan untuk sumber data PolarDB.
-
Solusi: Anda perlu mengaktifkan parameter loose_polar_log_bin. Untuk informasi lebih lanjut, lihat Konfigurasi sumber data PolarDB.
Error Hologres: permission denied for database xxx
Saat Anda menyinkronkan data ke Hologres secara real-time, Anda perlu memberikan izin admin kepada pengguna saat ini untuk instans Hologres. Pengguna harus memiliki izin untuk membuat skema. Untuk informasi lebih lanjut, lihat Model izin Hologres.
Error MaxCompute: ODPS-0410051:invalid credentials-accessKeyid not found
Saat Anda menyinkronkan data ke sumber data MaxCompute secara real-time menggunakan AccessKey sementara, AccessKey sementara tersebut secara otomatis kedaluwarsa setelah 7 hari, yang menyebabkan tugas gagal. Platform secara otomatis menjalankan ulang tugas saat mendeteksi kegagalan yang disebabkan oleh AccessKey sementara yang kedaluwarsa. Jika Anda telah mengonfigurasi peringatan pemantauan untuk jenis kegagalan ini, Anda akan menerima peringatan.
Error Oracle: logminer doesn't init, send HeartbeatRecord
Saat tugas sinkronisasi real-time Oracle diinisialisasi, tugas memuat log arsip sebelumnya untuk menemukan offset sinkronisasi yang sesuai. Jika log arsip berukuran besar, proses inisialisasi dapat memakan waktu 3 hingga 5 menit.