View a markdown version of this page

Bermigrasi dari KCL 2.x ke KCL 3.x - Amazon Kinesis Data Streams

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Bermigrasi dari KCL 2.x ke KCL 3.x

Topik ini memberikan petunjuk langkah demi langkah untuk memigrasikan konsumen Anda dari KCL 2.x ke KCL 3.x. Sebaiknya migrasi ke KCL 3.5 atau yang lebih baru untuk menggunakan format tabel tunggal. KCL 3.x mendukung migrasi konsumen KCL 2.x di tempat. Anda dapat terus menggunakan data dari aliran data Kinesis Anda sambil memigrasikan pekerja Anda secara bergulir.

penting

KCL 3.x mempertahankan antarmuka dan metode yang sama dengan KCL 2.x. Oleh karena itu, Anda tidak perlu memperbarui kode pemrosesan rekaman Anda selama migrasi. Namun, Anda harus mengatur konfigurasi yang tepat dan memeriksa langkah-langkah yang diperlukan untuk migrasi. Kami sangat menyarankan Anda mengikuti langkah-langkah migrasi berikut untuk pengalaman migrasi yang lancar.

penting

Untuk migrasi baru dari KCL 2.x ke KCL 3.5 atau yang lebih baru, format tabel tunggal digunakan secara default. Aplikasi Anda hanya menggunakan tabel sewa untuk semua metadata, menghilangkan kebutuhan akan metrik pekerja terpisah dan tabel status koordinator. Untuk informasi selengkapnya, lihat Format tabel tunggal untuk KCL.

Langkah 1: Prasyarat

Sebelum Anda mulai menggunakan KCL 3.x, pastikan Anda memiliki yang berikut:

  • Java Development Kit (JDK) 8 atau yang lebih baru

  • AWS SDK untuk Java 2.x

  • Maven atau Gradle untuk manajemen ketergantungan

penting

Jangan gunakan AWS SDK untuk Java versi 2.27.19 hingga 2.27.23 dengan KCL 3.x. Versi ini menyertakan masalah yang menyebabkan kesalahan pengecualian terkait dengan penggunaan DynamoDB KCL. Kami menyarankan Anda menggunakan AWS SDK untuk Java versi 2.28.0 atau yang lebih baru untuk menghindari masalah ini.

Langkah 2: Tambahkan dependensi

Jika Anda menggunakan Maven, tambahkan dependensi berikut ke pom.xml file Anda. Pastikan Anda mengganti 3.x.x ke versi KCL terbaru.

<dependency> <groupId>software.amazon.kinesis</groupId> <artifactId>amazon-kinesis-client</artifactId> <version>3.x.x</version> <!-- Use the latest version --> </dependency>

Jika Anda menggunakan Gradle, tambahkan yang berikut ini ke build.gradle file Anda. Pastikan Anda mengganti 3.x.x ke versi KCL terbaru.

implementation 'software.amazon.kinesis:amazon-kinesis-client:3.x.x'

Anda dapat memeriksa versi terbaru KCL di Maven Central Repository.

Langkah 3: Siapkan konfigurasi terkait migrasi

Untuk bermigrasi dari KCL 2.x ke KCL 3.x, Anda harus mengatur parameter konfigurasi berikut:

  • CoordinatorConfig.clientVersionConfig: Konfigurasi ini menentukan mode kompatibilitas versi KCL mana yang akan dijalankan aplikasi. Saat bermigrasi dari KCL 2.x ke 3.x, migrasi dilakukan secara bertahap. Pertama, atur konfigurasi ini ke CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1 dan terapkan ke semua pekerja. Tambahkan baris berikut saat membuat objek penjadwal Anda:

configsBuilder.coordinatorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1)

Pada fase ini, aplikasi Anda tetap kompatibel dengan KCL 2.x dan migrasi tidak dimulai, yang memungkinkan Anda meluncurkan pustaka KCL 3.x dengan aman di seluruh armada Anda.

Setelah semua pekerja berjalan denganCLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1, atur konfigurasi ini CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X untuk memulai migrasi. Untuk mengatur konfigurasi ini, tambahkan baris berikut saat membuat objek penjadwal Anda:

configsBuilder.coordinatorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X)

Berikut ini adalah contoh cara mengatur CoordinatorConfig.clientVersionConfig untuk bermigrasi dari KCL 2.x ke 3.x. Anda dapat menyesuaikan konfigurasi lain sesuai kebutuhan berdasarkan kebutuhan spesifik Anda:

Scheduler scheduler = new Scheduler( configsBuilder.checkpointConfig(), configsBuilder.coordinatorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X), configsBuilder.leaseManagementConfig(), configsBuilder.lifecycleConfig(), configsBuilder.metricsConfig(), configsBuilder.processorConfig(), configsBuilder.retrievalConfig() );

Penting bahwa semua pekerja di aplikasi konsumen Anda menggunakan algoritma penyeimbangan beban yang sama pada waktu tertentu karena KCL 2.x dan 3.x menggunakan algoritma load balancing yang berbeda. Menjalankan pekerja dengan algoritma penyeimbangan beban yang berbeda dapat menyebabkan distribusi beban kurang optimal karena kedua algoritma beroperasi secara independen.

Pengaturan kompatibilitas KCL 2.x ini memungkinkan aplikasi KCL 3.x Anda berjalan dalam mode yang kompatibel dengan KCL 2.x dan menggunakan algoritma penyeimbangan beban untuk KCL 2.x hingga semua pekerja di aplikasi konsumen Anda telah ditingkatkan ke KCL 3.x. Ketika migrasi selesai, KCL akan secara otomatis beralih ke mode fungsionalitas KCL 3.x penuh dan mulai menggunakan algoritma load balancing KCL 3.x baru untuk semua pekerja yang sedang berjalan.

penting

Jika Anda tidak menggunakan ConfigsBuilder tetapi membuat LeaseManagementConfig objek untuk mengatur konfigurasi, Anda harus menambahkan satu parameter lagi yang dipanggil applicationName di KCL versi 3.x atau yang lebih baru. Untuk detailnya, lihat Kesalahan kompilasi dengan LeaseManagementConfig konstruktor. Sebaiknya gunakan ConfigsBuilder untuk mengatur konfigurasi KCL. ConfigsBuildermenyediakan cara yang lebih fleksibel dan dapat dipelihara untuk mengkonfigurasi aplikasi KCL Anda.

catatan

Untuk perubahan konfigurasi terkait migrasi terbaru untuk KCL 3.5, lihat pembaruan konfigurasi KCL 3.5.

Langkah 4: Ikuti praktik terbaik untuk implementasi metode shutdownRequested ()

KCL 3.x memperkenalkan fitur yang disebut serah terima sewa yang anggun untuk meminimalkan pemrosesan ulang data ketika sewa diserahkan kepada pekerja lain sebagai bagian dari proses penugasan ulang sewa. Ini dicapai dengan memeriksa nomor urut terakhir yang diproses di tabel sewa sebelum serah terima sewa. Untuk memastikan serah terima sewa yang anggun berfungsi dengan baik, Anda harus memastikan bahwa Anda memanggil checkpointer objek dalam shutdownRequested metode di kelas Anda. RecordProcessor Jika Anda tidak memanggil checkpointer objek dalam shutdownRequested metode, Anda dapat mengimplementasikannya seperti yang diilustrasikan dalam contoh berikut.

penting
  • Contoh implementasi berikut adalah persyaratan minimal untuk serah terima sewa yang anggun. Anda dapat memperluasnya untuk menyertakan logika tambahan yang terkait dengan checkpointing jika diperlukan. Jika Anda melakukan pemrosesan asinkron apa pun, pastikan bahwa semua catatan yang dikirimkan ke hilir diproses sebelum memanggil checkpointing.

  • Sementara serah terima sewa yang anggun secara signifikan mengurangi kemungkinan pemrosesan ulang data selama transfer sewa, itu tidak sepenuhnya menghilangkan kemungkinan ini. Untuk menjaga integritas dan konsistensi data, rancang aplikasi konsumen hilir Anda agar idempoten. Ini berarti mereka harus dapat menangani pemrosesan catatan duplikat potensial tanpa efek buruk pada sistem secara keseluruhan.

/** * Invoked when either Scheduler has been requested to gracefully shutdown * or lease ownership is being transferred gracefully so the current owner * gets one last chance to checkpoint. * * Checkpoints and logs the data a final time. * * @param shutdownRequestedInput Provides access to a checkpointer, allowing a record processor to checkpoint * before the shutdown is completed. */ public void shutdownRequested(ShutdownRequestedInput shutdownRequestedInput) { try { // Ensure that all delivered records are processed // and has been successfully flushed to the downstream before calling // checkpoint // If you are performing any asynchronous processing or flushing to // downstream, you must wait for its completion before invoking // the below checkpoint method. log.info("Scheduler is shutting down, checkpointing."); shutdownRequestedInput.checkpointer().checkpoint(); } catch (ShutdownException | InvalidStateException e) { log.error("Exception while checkpointing at requested shutdown. Giving up.", e); } }

Langkah 5: Periksa prasyarat KCL 3.x untuk mengumpulkan metrik pekerja

KCL 3.x mengumpulkan metrik pemanfaatan CPU seperti pemanfaatan CPU dari pekerja untuk menyeimbangkan beban di seluruh pekerja secara merata. Pekerja aplikasi konsumen dapat berjalan di Amazon EC2, Amazon ECS, Amazon EKS, atau. AWS Fargate KCL 3.x dapat mengumpulkan metrik pemanfaatan CPU dari pekerja hanya jika prasyarat berikut terpenuhi:

Amazon Elastic Compute Cloud(Amazon EC2)

  • Sistem operasi Anda harus OS Linux.

  • Anda harus mengaktifkan IMDSv2 di instans EC2 Anda.

Layanan Kontainer Elastis Amazon (Amazon ECS) di Amazon EC2

  • Sistem operasi Anda harus OS Linux.

  • Anda harus mengaktifkan titik akhir metadata tugas ECS versi 4.

  • Versi agen kontainer Amazon ECS Anda harus 1.39.0 atau yang lebih baru.

Amazon ECS aktif AWS Fargate

  • Anda harus mengaktifkan titik akhir metadata tugas Fargate versi 4. Jika Anda menggunakan platform Fargate versi 1.4.0 atau yang lebih baru, ini diaktifkan secara default.

  • Platform Fargate versi 1.4.0 atau yang lebih baru.

Layanan Kubernetes Elastis Amazon (Amazon EKS) di Amazon EC2

  • Sistem operasi Anda harus OS Linux.

Amazon EKS pada AWS Fargate

  • Platform Fargate 1.3.0 atau yang lebih baru.

penting

Jika KCL 3.x tidak dapat mengumpulkan metrik pemanfaatan CPU dari pekerja karena prasyarat tidak terpenuhi, itu akan menyeimbangkan kembali beban tingkat throughput per sewa. Mekanisme penyeimbangan kembali fallback ini akan memastikan semua pekerja akan mendapatkan tingkat throughput total yang sama dari sewa yang ditetapkan untuk setiap pekerja. Untuk informasi selengkapnya, lihat Bagaimana KCL memberikan sewa kepada pekerja dan menyeimbangkan beban.

Langkah 6: Perbarui izin IAM untuk KCL 3.x

Anda harus menambahkan izin berikut ke peran atau kebijakan IAM yang terkait dengan aplikasi konsumen KCL 3.x Anda. Ini melibatkan pembaruan kebijakan IAM yang ada yang digunakan oleh aplikasi KCL. Untuk informasi selengkapnya, lihat Izin IAM diperlukan untuk aplikasi konsumen KCL.

penting

Aplikasi KCL Anda yang ada mungkin tidak memiliki tindakan dan sumber daya IAM berikut yang ditambahkan dalam kebijakan IAM karena tidak diperlukan di KCL 2.x. Pastikan Anda telah menambahkannya sebelum menjalankan aplikasi KCL 3.x Anda:

  • Tindakan: UpdateTable

    • Sumber Daya (ARN): arn:aws:dynamodb:region:account:table/KCLApplicationName

  • Tindakan: Query

    • Sumber Daya (ARN): arn:aws:dynamodb:region:account:table/KCLApplicationName/index/*

  • Tindakan: CreateTableDescribeTable,Scan,GetItem,,PutItem,UpdateItem, DeleteItem

    • Sumber Daya (ARN):arn:aws:dynamodb:region:account:table/KCLApplicationName-WorkerMetricStats, arn:aws:dynamodb:region:account:table/KCLApplicationName-CoordinatorState

    Ganti “wilayah”, “akun”, dan "KCLApplicationName" di ARN dengan nama aplikasi Anda sendiri Wilayah AWS, Akun AWS nomor, dan KCL masing-masing. Jika Anda menggunakan konfigurasi untuk menyesuaikan nama tabel metadata yang dibuat oleh KCL, gunakan nama tabel yang ditentukan alih-alih nama aplikasi KCL.

Langkah 7: Terapkan kode KCL 3.x ke pekerja Anda

Setelah Anda menetapkan konfigurasi yang diperlukan untuk migrasi dan menyelesaikan semua daftar periksa migrasi sebelumnya, Anda dapat membuat dan menerapkan kode Anda ke pekerja Anda.

catatan

Jika Anda melihat kesalahan kompilasi dengan LeaseManagementConfig konstruktor, lihat Kesalahan kompilasi dengan LeaseManagementConfig konstruktor untuk informasi pemecahan masalah.

Langkah 8: Selesaikan migrasi

Selama penerapan kode KCL 3.x, KCL terus menggunakan algoritma penugasan sewa dari KCL 2.x. Ketika Anda berhasil menerapkan kode KCL 3.x ke semua pekerja Anda, KCL secara otomatis mendeteksi ini dan beralih ke algoritma penetapan sewa baru berdasarkan pemanfaatan sumber daya pekerja. Untuk detail selengkapnya tentang algoritma penugasan sewa baru, lihatBagaimana KCL memberikan sewa kepada pekerja dan menyeimbangkan beban.

Selama penerapan, Anda dapat memantau proses migrasi dengan metrik berikut yang dipancarkan ke CloudWatch. Anda dapat memantau metrik di bawah Migration operasi. Semua metrik adalah per- KCL-application metrik dan diatur ke tingkat SUMMARY metrik. Jika Sum statistik CurrentState:3xWorker metrik cocok dengan jumlah total pekerja di aplikasi KCL Anda, ini menunjukkan bahwa migrasi ke KCL 3.x telah berhasil diselesaikan.

penting

Diperlukan setidaknya 10 menit bagi KCL untuk beralih ke algoritma penugasan penyewa baru setelah semua pekerja siap menjalankannya.

CloudWatch metrik untuk proses migrasi KCL
Metrik-metrik Deskripsi
CurrentState:3xWorker

Jumlah pekerja KCL berhasil bermigrasi ke KCL 3.x dan menjalankan algoritma penugasan sewa baru. Jika jumlah Sum metrik ini cocok dengan jumlah total pekerja Anda, ini menunjukkan bahwa migrasi ke KCL 3.x telah berhasil diselesaikan.

  • Tingkat metrik: Ringkasan

  • Unit: Hitungan

  • Statistik: Statistik yang paling berguna adalah Sum

CurrentState:2xCompatibleWorker

Jumlah pekerja KCL yang berjalan dalam mode kompatibel KCL 2.x selama proses migrasi. Nilai bukan nol untuk metrik ini menunjukkan bahwa migrasi masih berlangsung.

  • Tingkat metrik: Ringkasan

  • Unit: Hitungan

  • Statistik: Statistik yang paling berguna adalah Sum

Fault

Jumlah pengecualian yang ditemui selama proses migrasi. Sebagian besar pengecualian ini adalah kesalahan sementara, dan KCL 3.x akan secara otomatis mencoba lagi untuk menyelesaikan migrasi. Jika Anda mengamati nilai Fault metrik persisten, tinjau log Anda dari periode migrasi untuk pemecahan masalah lebih lanjut. Jika masalah berlanjut, hubungi Dukungan.

  • Tingkat metrik: Ringkasan

  • Unit: Hitungan

  • Statistik: Statistik yang paling berguna adalah Sum

GsiStatusReady

Status pembuatan indeks sekunder global (GSI) pada tabel sewa. Metrik ini menunjukkan apakah GSI pada tabel sewa telah dibuat, prasyarat untuk menjalankan KCL 3.x. Nilainya adalah 0 atau 1, dengan 1 menunjukkan penciptaan yang berhasil. Selama status rollback, metrik ini tidak akan dipancarkan. Setelah Anda memutar ke depan lagi, Anda dapat melanjutkan pemantauan metrik ini.

  • Tingkat metrik: Ringkasan

  • Unit: Hitungan

  • Statistik: Statistik yang paling berguna adalah Sum

workerMetricsReady

Status emisi metrik pekerja dari semua pekerja. Metrik menunjukkan apakah semua pekerja memancarkan metrik seperti pemanfaatan CPU. Nilainya adalah 0 atau 1, dengan 1 menunjukkan semua pekerja berhasil memancarkan metrik dan siap untuk algoritma penugasan sewa baru. Selama status rollback, metrik ini tidak akan dipancarkan. Setelah Anda memutar ke depan lagi, Anda dapat melanjutkan pemantauan metrik ini.

  • Tingkat metrik: Ringkasan

  • Unit: Hitungan

  • Statistik: Statistik yang paling berguna adalah Sum

KCL menyediakan kemampuan rollback ke mode kompatibel 2.x selama migrasi. Setelah migrasi berhasil ke KCL 3.x berhasil, kami sarankan Anda menghapus CoordinatorConfig.clientVersionConfig pengaturan CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X jika rollback tidak lagi diperlukan. Menghapus konfigurasi ini menghentikan emisi metrik terkait migrasi dari aplikasi KCL.

catatan

Kami menyarankan Anda memantau kinerja dan stabilitas aplikasi Anda untuk jangka waktu tertentu selama migrasi dan setelah menyelesaikan migrasi. Jika Anda mengamati masalah apa pun, Anda dapat mengembalikan pekerja untuk menggunakan fungsionalitas yang kompatibel dengan KCL 2.x menggunakan Alat Migrasi KCL.