Manajemen state adalah isu kompleks dan kritis yang memengaruhi performa, stabilitas, serta pemanfaatan sumber daya di Apache Flink. Topik ini menjelaskan prinsip dan strategi manajemen state, serta cara menggunakan fitur-fitur Realtime Compute for Apache Flink untuk mengoptimalkan performa dan stabilitas penyebaran state besar.
Apa itu State
Apache Flink adalah kerangka kerja open source untuk pemrosesan dan analisis real-time aliran data. Konsep inti dari Apache Flink adalah State, yaitu informasi yang dipertahankan di seluruh beberapa peristiwa. Mirip dengan peran memori dalam komputer, State memungkinkan operator melacak data historis saat memproses aliran tak terbatas. State dapat disimpan sebagai pasangan key-value atau tipe data yang lebih kompleks, seperti daftar, array, dan objek kustom. Akses dan pembaruan data state sangat penting untuk pemrosesan aliran yang kompleks.
Manajemen state adalah fitur penting dari konsol pengembangan Realtime Compute for Apache Flink. Fitur ini memungkinkan sistem secara otomatis mengelola checkpoint suatu penyebaran dan meminimalkan ruang penyimpanan yang diperlukan tanpa memengaruhi ketersediaannya. Fitur ini juga memungkinkan Anda mengelola savepoint secara efisien dan berbaginya antara penyebaran, memberikan nilai praktis yang besar untuk pengujian A/B dan failover aktif/standby pada penyebaran state besar.
Masalah yang disebabkan oleh ukuran state besar
Memelihara penyebaran state besar adalah tantangan. Seiring bertambahnya ukuran state dari waktu ke waktu, beberapa masalah performa muncul.
Tekanan Balik dan Penurunan Performa
Tekanan balik terjadi ketika overhead I/O mencapai tingkat tertentu, meningkatkan latensi pemrosesan dan menurunkan throughput yang diukur dalam transaksi per detik (TPS).
Pemanfaatan Sumber Daya Rendah
Dalam banyak kasus, operator stateful memiliki sejumlah besar sumber daya CPU yang tidak digunakan. Semakin besar ukuran state, semakin signifikan pemborosan sumber daya tersebut.
Timeout Checkpoint dan Savepoint
Ketika ukuran state besar, checkpoint dan savepoint lebih rentan mengalami timeout. Hal ini meningkatkan waktu yang diperlukan untuk melanjutkan data setelah penyebaran di-restart dan latensi pemrosesan end-to-end exactly-once.
Startup dan Penskalaan Lambat
Saat memulai atau menskalakan penyebaran, setiap operator perlu memulihkan data lokalnya berdasarkan data state dari seluruh penyebaran. Waktu yang dibutuhkan untuk proses ini sebanding dengan ukuran state, sehingga meningkatkan waktu gangguan layanan penyebaran state besar.
Alur kerja penyetelan penyebaran state besar
Untuk mencegah masalah-masalah di atas, ikuti langkah-langkah berikut untuk mengoptimalkan manajemen state pada penyebaran state besar:
Identifikasi Kemacetan Potensial
Gunakan alat diagnostik untuk memahami status operasi saat ini dari suatu penyebaran dan tentukan apakah hambatan performa disebabkan oleh manajemen state yang tidak tepat. Untuk informasi tentang cara menggunakan alat diagnostik, lihat Monitor Performa Penyebaran.
Gunakan Versi Mesin Terbaru
Realtime Compute for Apache Flink terus mengoptimalkan modul state dari mesin Ververica Runtime (VVR). Dalam banyak kasus, versi mesin terbaru memberikan performa optimal. VVR adalah mesin kelas enterprise yang sepenuhnya kompatibel dengan Apache Flink. VVR juga dilengkapi dengan GeminiStateBackend untuk secara signifikan memfasilitasi akses state, checkpoint, dan pemulihan state. GeminiStateBackend secara otomatis menyesuaikan konfigurasi parameter untuk memastikan performa optimal, menghilangkan kebutuhan akan konfigurasi manual. Sebelum melakukan optimasi lainnya, pastikan Anda menggunakan versi VVR terbaru. Untuk informasi lebih lanjut, lihat GeminiStateBackend, Konfigurasi GeminiStateBackend, dan Tingkatkan Versi Mesin Penyebaran.
Terapkan Strategi Penyetelan yang Berbeda untuk Masalah yang Berbeda
Penurunan Performa Runtime (Tekanan Balik)
Untuk mengatasi masalah ini, ambil langkah-langkah berikut: Optimalkan query SQL, sesuaikan time-to-live (TTL) untuk mengurangi data state, lalu sesuaikan alokasi memori dan pengaturan paralelisme untuk mengurangi operasi I/O pada disk. Untuk informasi lebih lanjut, lihat Kontrol Ukuran State untuk Mengurangi Tekanan Balik dalam Penyebaran SQL dan Kontrol Ukuran State untuk Mengurangi Tekanan Balik menggunakan Datastream API.
Checkpoint atau Savepoint Timeout
Untuk mengatasi masalah ini, ambil langkah-langkah berikut: Optimalkan performa runtime untuk mengurangi tekanan balik, optimalkan performa fase sinkron, sesuaikan paralelisme untuk mengurangi ukuran state setiap sub-tugas, lalu pertimbangkan untuk menggunakan savepoint format asli untuk meningkatkan efisiensi. Untuk informasi lebih lanjut, lihat Diagnosis dan Pencegahan Timeout Checkpoint dan Savepoint.
Startup dan Penskalaan Lambat
Jika ruang disk lokal cukup, Anda dapat mengaktifkan fitur pemulihan lokal. Anda juga dapat menggunakan fitur lazy loading dan delayed pruning dari GeminiStateBackend untuk mempercepat startup dan penskalaan penyebaran. Untuk informasi lebih lanjut, lihat Tingkatkan Kecepatan Startup dan Penskalaan.