Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Sinkronisasi offset grup konsumen
MSK Replicator dapat menyinkronkan offset grup konsumen dari cluster sumber ke cluster target, memungkinkan konsumen untuk beralih cluster dan melanjutkan pemrosesan tanpa melewatkan catatan. Topik ini mencakup cara kerja sinkronisasi offset dalam konfigurasi searah (lama) dan dua arah (ditingkatkan) dan menyoroti jebakan umum.
Cara kerja sinkronisasi offset
Sebagai bagian dari mereplikasi data, MSK Replicator mengkonsumsi pesan dari cluster sumber dan memproduksinya ke cluster target. Hal ini dapat menyebabkan pesan memiliki offset yang berbeda pada sumber dan kluster target Anda. Jika Anda telah mengaktifkan sinkronisasi offset grup konsumen selama pembuatan Replicator, MSK Replicator secara otomatis menerjemahkan offset saat menyalin metadata sehingga setelah gagal ke cluster target, konsumen Anda dapat melanjutkan pemrosesan dari dekat tempat mereka tinggalkan.
MSK Replicator mengoptimalkan untuk konsumen pada cluster sumber yang membaca dari posisi yang lebih dekat ke ujung aliran (akhir partisi topik). Jika grup konsumen Anda tertinggal di cluster sumber, Anda mungkin melihat lag yang lebih tinggi untuk grup konsumen pada target dibandingkan dengan sumbernya, yang berarti konsumen akan memproses ulang lebih banyak pesan duplikat setelah failover. Untuk mengurangi lag ini, konsumen Anda di cluster sumber perlu mengejar ketinggalan dan mulai mengkonsumsi dari ujung aliran. Saat konsumen Anda mengejar ketinggalan, MSK Replicator akan secara otomatis mengurangi lag.
Sinkronisasi offset adalah pipa tiga tahap:
Pemetaan offset — Saat catatan direplikasi dari sumber ke target, replikator merekam pemetaan berkala antara offset sumber dan offset target yang sesuai. Karena offset sumber dan target berbeda (titik awal yang berbeda, pemadatan, dan sebagainya), pemetaan ini sangat penting.
Terjemahan offset — Secara berkala, replikator membaca offset komit untuk setiap grup konsumen yang direplikasi pada cluster sumber. Kemudian menggunakan pemetaan offset yang disimpan untuk menerjemahkan offset sumber tersebut ke offset target yang setara.
Offset commit — Offset yang diterjemahkan berkomitmen pada
__consumer_offsetstopik cluster target, sehingga ketika konsumen terhubung ke target dan bergabung dengan grup yang sama, ia melanjutkan dari kira-kira posisi yang tepat.
Perilaku kunci:
Terjemahan offset adalah perkiraan, tidak tepat. Sampel replikator mengimbangi pemetaan pada interval, sehingga offset yang diterjemahkan mungkin sedikit di belakang posisi ekuivalen sebenarnya. Ini adalah desain - ini salah di sisi at-least-once pengiriman, yang berarti konsumen dapat membaca kembali sejumlah kecil pesan setelah failover.
Offset hanya berkomitmen untuk kelompok konsumen pada target jika tidak ada konsumen yang secara aktif mengkonsumsi dalam kelompok itu pada target. Ini mencegah replikator mengganggu konsumen yang sudah berjalan di cluster target.
Grup konsumen harus cocok dengan filter grup konsumen yang dikonfigurasi (sertakan/kecualikan pola) untuk disinkronkan.
Replikasi searah dengan sinkronisasi offset lama
Ini adalah mode default untuk replikator satu arah standar (Cluster A → Cluster B).
Penamaan topik — Sinkronisasi offset lama mendukung replikasi nama topik awalan dan identik.
Arah — Offset kelompok konsumen hanya disinkronkan ke cluster target ketika produsen aktif pada sumber dan konsumen tidak aktif pada cluster target.
Failover — Konsumen dapat diarahkan ke cluster target dan akan melanjutkan dari posisi offset yang diterjemahkan.
Tidak ada dukungan failback - Sinkronisasi offset lama tidak menerjemahkan offset dari target kembali ke sumber. Jika Anda memindahkan konsumen ke target dan kemudian ingin memindahkannya kembali ke sumbernya, tidak ada terjemahan offset otomatis untuk perjalanan pulang. Jika failback adalah persyaratan, gunakan pengaturan dua arah dengan sinkronisasi offset yang disempurnakan.
Pengaturan dua arah dengan sinkronisasi offset yang disempurnakan
Pengaturan dua arah membutuhkan dua replikator yang berjalan dalam arah yang berlawanan (Replicator A → B dan Replicator B → A). Setiap replikator masih melakukan replikasi data searah dan sinkronisasi offset — replikator mereplikasi data dari sumbernya ke targetnya, dan menyinkronkan offset grup konsumen ke arah yang sama. Dengan sinkronisasi offset yang disempurnakan, setiap replikator dapat terus menyinkronkan kelompok konsumen bahkan ketika produsen dan konsumen aktif pada cluster yang berbeda.
Karakteristik utama:
Penamaan topik — Sinkronisasi yang disempurnakan membutuhkan replikasi nama topik yang identik pada kedua replikator.
Dua replikator, masing-masing searah - Setiap replikator mereplikasi data dan menyinkronkan offset dalam satu arah. Perilaku dua arah berasal dari pasangan yang bekerja bersama.
Membaca pemetaan dari kedua replikator — Saat menerjemahkan offset, replikator bekerja sama untuk menentukan terjemahan paling akurat yang tersedia.
Failover dan failback — Konsumen dapat dipindahkan dari salah satu cluster ke cluster lainnya dan melanjutkan dari kira-kira posisi yang benar.
Kapan mengaktifkan sinkronisasi offset dua arah:
Migrasi dengan kemampuan rollback — Saat bermigrasi dari satu cluster ke cluster lainnya dan Anda ingin kemampuan untuk memutar kembali ke cluster asli jika masalah muncul.
Arsitektur aktif-aktif — Ketika kedua cluster secara aktif melayani membaca dan menulis, dan Anda membutuhkan konsumen untuk dapat beralih antar cluster.
Pemulihan bencana — Ketika Anda perlu memastikan bahwa konsumen dapat melanjutkan pemrosesan dari offset yang benar pada salah satu cluster setelah peristiwa failover atau failback.
Memantau sinkronisasi offset
Pantau CloudWatch metrik Amazon berikut untuk memverifikasi bahwa sinkronisasi offset berfungsi dengan benar:
ConsumerGroupCount— Verifikasi bahwa jumlah kelompok konsumen yang diharapkan sedang disinkronkan pada kedua Replikator.ConsumerGroupOffsetSyncFailure— Harus 0 pada kedua Replikator. Jika nilai ini lebih besar dari 0, periksa apakah grup konsumen aktif, verifikasi izin Baca dan Jelaskan, dan pastikan topik ada di kluster target.OffsetLag (MSK Cluster)danOffsetLag (Non-MSK Cluster)— Bandingkan kelambatan konsumen tingkat partisi di kedua cluster untuk memverifikasi offset disinkronkan.
Perangkap umum
-
Konsumen dapat membaca kembali sejumlah kecil pesan setelah failover
Terjemahan offset adalah perkiraan. Offset yang diterjemahkan sengaja konservatif — mungkin sedikit di belakang posisi ekuivalen yang sebenarnya. Ini berarti konsumen biasanya akan memproses ulang sejumlah kecil catatan setelah berpindah cluster. Aplikasi harus dirancang untuk menangani pemrosesan duplikat (idempotensi).
-
Offset tidak disinkronkan ke grup yang secara aktif mengkonsumsi target
Jika grup konsumen sudah aktif di cluster target, replikator tidak akan menimpa offsetnya. Ini adalah mekanisme keamanan. Namun, itu berarti bahwa jika konsumen memulai pada target sebelum replikator memiliki kesempatan untuk menyinkronkan offset, konsumen tersebut akan mulai dari kebijakan reset offset default target (biasanya
latestatauearliest), bukan dari posisi yang diterjemahkan. -
Sinkronisasi offset memiliki lag yang melekat
Terjemahan offset bergantung pada dua proses asinkron: replikasi data dan sinkronisasi offset. Selalu ada beberapa penundaan antara ketika konsumen melakukan offset pada sumber dan ketika offset yang diterjemahkan muncul pada target. Selama failover, kelambatan ini dapat mengakibatkan konsumen membaca ulang lebih banyak pesan daripada yang diharapkan jika konsumen sumber baru-baru ini aktif.
-
Grup konsumen harus disertakan dalam filter replikasi
Hanya grup konsumen yang cocok dengan pola include yang dikonfigurasi (dan tidak cocok dengan pola pengecualian) yang akan disinkronkan offsetnya. Jika offset grup konsumen tidak muncul pada target, verifikasi bahwa offset tersebut termasuk dalam konfigurasi replikasi grup konsumen.
-
Replikator searah tidak mendukung failback
Dengan sinkronisasi offset lama (searah), offset hanya diterjemahkan dari sumber ke target. Jika Anda memindahkan konsumen ke target dan kemudian perlu memindahkannya kembali ke sumbernya, Anda perlu menentukan offset yang benar secara manual atau menerima pemrosesan ulang. Jika failback adalah persyaratan, gunakan pengaturan dua arah dengan sinkronisasi offset yang disempurnakan.
-
Penghapusan topik dan rekreasi dapat membatalkan pemetaan offset
Jika topik dihapus dan dibuat ulang di salah satu cluster, pemetaan offset menjadi basi karena topik baru dimulai dari offset 0. Dengan sinkronisasi offset lama, ini dapat mengakibatkan terjemahan offset yang salah. Sinkronisasi offset yang disempurnakan mendeteksi rekreasi topik dan mengatur ulang pemetaan secara otomatis.