Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengoptimalkan waktu restart pekerjaan Flink untuk pemulihan tugas dan operasi penskalaan dengan Amazon di EMR EKS
Ketika tugas gagal atau ketika operasi penskalaan terjadi, Flink mencoba untuk mengeksekusi kembali tugas dari pos pemeriksaan terakhir selesai. Proses restart bisa memakan waktu satu menit atau lebih lama untuk dijalankan, tergantung pada ukuran status pos pemeriksaan dan jumlah tugas paralel. Selama periode restart, tugas backlog dapat menumpuk untuk pekerjaan itu. Ada beberapa cara, bahwa Flink mengoptimalkan kecepatan pemulihan dan memulai ulang grafik eksekusi untuk meningkatkan stabilitas pekerjaan.
Halaman ini menjelaskan beberapa cara Amazon EMR Flink dapat meningkatkan waktu restart pekerjaan selama pemulihan tugas atau operasi penskalaan pada instance spot. Instans spot adalah kapasitas komputasi yang tidak terpakai yang tersedia dengan diskon. Ini memiliki perilaku unik, termasuk gangguan sesekali, jadi penting untuk memahami bagaimana Amazon EKS menangani ini, termasuk bagaimana EMR EMR Amazon EKS melakukan penonaktifan dan memulai kembali pekerjaan.
Topik
Tugas-pemulihan lokal
catatan
Pemulihan tugas-lokal didukung dengan Flink di Amazon EMR pada EKS 6.14.0 dan lebih tinggi.
Dengan pos pemeriksaan Flink, setiap tugas menghasilkan snapshot statusnya yang ditulis Flink ke penyimpanan terdistribusi seperti Amazon S3. Dalam kasus pemulihan, tugas mengembalikan keadaan mereka dari penyimpanan terdistribusi. Penyimpanan terdistribusi memberikan toleransi kesalahan dan dapat mendistribusikan kembali status selama penskalaan ulang karena dapat diakses oleh semua node.
Namun, toko terdistribusi jarak jauh juga memiliki kelemahan: semua tugas harus membaca statusnya dari lokasi terpencil melalui jaringan. Hal ini dapat mengakibatkan waktu pemulihan yang lama untuk negara bagian besar selama pemulihan tugas atau operasi penskalaan.
Masalah waktu pemulihan yang lama ini diselesaikan dengan pemulihan tugas-lokal. Tugas menulis status mereka di pos pemeriksaan ke dalam penyimpanan sekunder yang bersifat lokal untuk tugas, seperti pada disk lokal. Mereka juga menyimpan status mereka di penyimpanan utama, atau Amazon S3 dalam kasus kami. Selama pemulihan, penjadwal menjadwalkan tugas pada Task Manager yang sama di mana tugas berjalan lebih awal sehingga mereka dapat pulih dari penyimpanan status lokal alih-alih membaca dari penyimpanan status jarak jauh. Untuk informasi selengkapnya, lihat Task-Local Recovery di Dokumentasi
Tes benchmark kami dengan pekerjaan sampel telah menunjukkan bahwa waktu pemulihan telah dikurangi dari menit menjadi beberapa detik dengan pemulihan tugas-lokal diaktifkan.
Untuk mengaktifkan pemulihan tugas-lokal, atur konfigurasi berikut di file Anda. flink-conf.yaml
Tentukan nilai interval checkpointing dalam milidetik.
state.backend.local-recovery: true state.backend:
hasmap or rocksdb
state.checkpoints.dir: s3://STORAGE-BUCKET-PATH
/checkpoint execution.checkpointing.interval:15000
Pemulihan tugas-lokal dengan pemasangan volume Amazon EBS
catatan
Pemulihan tugas-lokal oleh Amazon EBS didukung dengan Flink di Amazon EMR pada EKS 6.15.0 dan lebih tinggi.
Dengan Flink EMR di Amazon aktifEKS, Anda dapat secara otomatis menyediakan EBS volume Amazon ke TaskManager pod untuk tugas pemulihan lokal. Mount overlay default dilengkapi dengan volume 10 GB, yang cukup untuk pekerjaan dengan status lebih rendah. Pekerjaan dengan status besar dapat mengaktifkan opsi pemasangan EBS volume otomatis. Bagian TaskManager Pod secara otomatis dibuat dan dipasang selama pembuatan pod dan dihapus selama penghapusan pod.
Gunakan langkah-langkah berikut untuk mengaktifkan pemasangan EBS volume otomatis untuk Flink di Amazon EMR padaEKS:
-
Ekspor nilai untuk variabel berikut yang akan Anda gunakan dalam langkah mendatang.
export AWS_REGION=
aa-example-1
export FLINK_EKS_CLUSTER_NAME=my-cluster
export AWS_ACCOUNT_ID=111122223333
-
Buat atau perbarui
kubeconfig
YAML file untuk klaster Anda.aws eks update-kubeconfig --name $FLINK_EKS_CLUSTER_NAME --region $AWS_REGION
-
Buat akun IAM layanan untuk driver Amazon EBS Container Storage Interface (CSI) di EKS klaster Amazon Anda.
eksctl create iamserviceaccount \ --name ebs-csi-controller-sa \ --namespace kube-system \ --region $AWS_REGION \ --cluster $FLINK_EKS_CLUSTER_NAME\ --role-name TLR_${AWS_REGION}_${FLINK_EKS_CLUSTER_NAME} \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --approve
-
Buat EBS CSI driver Amazon dengan perintah berikut:
eksctl create addon \ --name aws-ebs-csi-driver \ --region $AWS_REGION \ --cluster $FLINK_EKS_CLUSTER_NAME \ --service-account-role-arn arn:aws:iam::${AWS_ACCOUNT_ID}:role/TLR_${AWS_REGION}_${FLINK_EKS_CLUSTER_NAME}
-
Buat kelas EBS penyimpanan Amazon dengan perintah berikut:
cat ≪ EOF ≫ storage-class.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ebs-sc provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer EOF
Dan kemudian terapkan kelas:
kubectl apply -f storage-class.yaml
-
Helm instal operator Amazon EMR Flink Kubernetes dengan opsi untuk membuat akun layanan. Ini menciptakan
emr-containers-sa-flink
untuk digunakan dalam penerapan Flink.helm install flink-kubernetes-operator flink-kubernetes-operator/ \ --set jobServiceAccount.create=true \ --set rbac.jobRole.create=true \ --set rbac.jobRoleBinding.create=true
-
Untuk mengirimkan pekerjaan Flink dan mengaktifkan penyediaan EBS volume otomatis untuk pemulihan tugas-lokal, atur konfigurasi berikut di file Anda.
flink-conf.yaml
Sesuaikan batas ukuran untuk ukuran status pekerjaan. AturserviceAccount
keemr-containers-sa-flink
. Tentukan nilai interval checkpointing dalam milidetik. Dan hilangkan.executionRoleArn
flinkConfiguration: task.local-recovery.ebs.enable: true kubernetes.taskmanager.local-recovery.persistentVolumeClaim.sizeLimit: 10Gi state.checkpoints.dir: s3://
BUCKET-PATH
/checkpoint state.backend.local-recovery: true state.backend:hasmap or rocksdb
state.backend.incremental: "true" execution.checkpointing.interval:15000
serviceAccount: emr-containers-sa-flink
Saat Anda siap untuk menghapus plugin EBS CSI driver Amazon, gunakan perintah berikut:
# Detach Attached Policy aws iam detach-role-policy --role-name TLR_${$AWS_REGION}_${FLINK_EKS_CLUSTER_NAME} --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy # Delete the created Role aws iam delete-role --role-name TLR_${$AWS_REGION}_${FLINK_EKS_CLUSTER_NAME} # Delete the created service account eksctl delete iamserviceaccount --name ebs-csi-controller-sa --namespace kube-system --cluster $FLINK_EKS_CLUSTER_NAME --region $AWS_REGION # Delete Addon eksctl delete addon --name aws-ebs-csi-driver --cluster $FLINK_EKS_CLUSTER_NAME --region $AWS_REGION # Delete the EBS storage class kubectl delete -f storage-class.yaml
Pos pemeriksaan inkremental berbasis log generik
catatan
Checkpointing inkremental berbasis log generik didukung dengan Flink di Amazon pada 6.14.0 dan yang lebih tinggi. EMR EKS
Checkpointing inkremental berbasis log generik ditambahkan di Flink 1.16 untuk meningkatkan kecepatan pos pemeriksaan. Interval pos pemeriksaan yang lebih cepat sering mengakibatkan pengurangan pekerjaan pemulihan karena lebih sedikit peristiwa yang perlu diproses ulang setelah pemulihan. Untuk informasi selengkapnya, lihat Meningkatkan kecepatan dan stabilitas pos pemeriksaan dengan pos pemeriksaan inkremental berbasis log generik di Blog Apache Flink
Dengan pekerjaan sampel, tes benchmark kami telah menunjukkan bahwa waktu pos pemeriksaan berkurang dari menit menjadi beberapa detik dengan pos pemeriksaan inkremental berbasis log generik.
Untuk mengaktifkan pos pemeriksaan inkremental berbasis log generik, atur konfigurasi berikut di file Anda. flink-conf.yaml
Tentukan nilai interval checkpointing dalam milidetik.
state.backend.changelog.enabled: true state.backend.changelog.storage: filesystem dstl.dfs.base-path: s3://
bucket-path
/changelog state.backend.local-recovery: true state.backend: rocksdb state.checkpoints.dir: s3://bucket-path
/checkpoint execution.checkpointing.interval:15000
Pemulihan berbutir halus
catatan
Dukungan pemulihan berbutir halus untuk penjadwal default didukung dengan Flink di Amazon EMR pada 6.14.0 dan yang lebih tinggi. EKS Dukungan pemulihan berbutir halus dalam penjadwal adaptif tersedia dengan Flink di Amazon pada 6.15.0 dan lebih tinggi. EMR EKS
Ketika tugas gagal selama eksekusi, Flink mengatur ulang seluruh grafik eksekusi dan memicu eksekusi ulang lengkap dari pos pemeriksaan terakhir yang diselesaikan. Ini lebih mahal daripada hanya menjalankan kembali tugas yang gagal. Pemulihan berbutir halus hanya memulai kembali komponen yang terhubung dengan pipa dari tugas yang gagal. Dalam contoh berikut, grafik pekerjaan memiliki 5 simpul (A
keE
). Semua koneksi antara simpul disalurkan dengan distribusi pointwise, dan parallelism.default
untuk pekerjaan diatur ke. 2
A → B → C → D → E
Untuk contoh ini, ada total 10 tugas yang berjalan. Pipeline pertama (a1
toe1
) berjalan pada TaskManager (TM1
), dan pipeline kedua (a2
toe2
) berjalan pada yang lain TaskManager (TM2
).
a1 → b1 → c1 → d1 → e1
a2 → b2 → c2 → d2 → e2
Ada dua komponen yang terhubung dengan pipa:a1 → e1
, dana2 →
e2
. Jika salah satu TM1
atau TM2
gagal, kegagalan hanya berdampak pada 5 tugas dalam pipa di mana TaskManager sedang berjalan. Strategi restart hanya memulai komponen pipelined yang terpengaruh.
Pemulihan berbutir halus hanya berfungsi dengan pekerjaan Flink paralel sempurna. Ini tidak didukung dengan keyBy()
atau redistribute()
operasi. Untuk informasi lebih lanjut, lihat FLIP-1: Pemulihan Berbutir Halus dari Kegagalan Tugas
Untuk mengaktifkan pemulihan berbutir halus, atur konfigurasi berikut di file Anda. flink-conf.yaml
jobmanager.execution.failover-strategy: region restart-strategy:
exponential-delay or fixed-delay
Mekanisme restart gabungan dalam penjadwal adaptif
catatan
Mekanisme restart gabungan dalam penjadwal adaptif didukung dengan Flink di Amazon EMR pada EKS 6.15.0 dan lebih tinggi.
Penjadwal adaptif dapat menyesuaikan paralelisme pekerjaan berdasarkan slot yang tersedia. Ini secara otomatis mengurangi paralelisme jika tidak cukup slot yang tersedia agar sesuai dengan paralelisme pekerjaan yang dikonfigurasi. Jika slot baru tersedia, pekerjaan ditingkatkan lagi ke paralelisme pekerjaan yang dikonfigurasi. Penjadwal adaptif menghindari waktu henti di tempat kerja ketika tidak ada cukup sumber daya yang tersedia. Ini adalah penjadwal yang didukung untuk Flink Autoscaler. Kami merekomendasikan penjadwal adaptif dengan Amazon EMR Flink karena alasan ini. Namun, penjadwal adaptif mungkin melakukan beberapa restart dalam waktu singkat, satu restart untuk setiap sumber daya baru yang ditambahkan. Hal ini dapat menyebabkan penurunan kinerja dalam pekerjaan.
Dengan Amazon EMR 6.15.0 dan yang lebih tinggi, Flink memiliki mekanisme restart gabungan dalam penjadwal adaptif yang membuka jendela restart ketika sumber daya pertama ditambahkan, dan kemudian menunggu hingga interval jendela yang dikonfigurasi dari default 1 menit. Ini melakukan restart tunggal ketika ada sumber daya yang cukup tersedia untuk menjalankan pekerjaan dengan paralelisme yang dikonfigurasi atau ketika interval waktu habis.
Dengan contoh pekerjaan, pengujian benchmark kami menunjukkan bahwa fitur ini memproses 10% rekaman lebih banyak daripada perilaku default saat Anda menggunakan adaptive scheduler dan Flink autoscaler.
Untuk mengaktifkan mekanisme restart gabungan, atur konfigurasi berikut di flink-conf.yaml
file Anda.
jobmanager.adaptive-scheduler.combined-restart.enabled: true jobmanager.adaptive-scheduler.combined-restart.window-interval: 1m