Dokumen putih ini menjelaskan cara menggunakan tool pengujian benchmark Nexmark untuk mengevaluasi kinerja pemrosesan aliran Realtime Compute for Apache Flink.
Kinerja sekilas
Nexmark adalah benchmark kinerja standar industri untuk mesin pemrosesan aliran. Benchmark ini mencakup 19 kueri standar yang meliputi skenario umum seperti filtering, agregasi, join, dan window. Dokumen ini menggunakan tool pengujian Nexmark untuk melakukan evaluasi kinerja lengkap terhadap Realtime Compute for Apache Flink dengan konfigurasi 8 CU dan garis dasar 100 juta catatan input untuk setiap kueri. Hasil pengujian menunjukkan bahwa:
-
Kueri sederhana, seperti q0, q1, dan q2, mencapai RPS sebesar 4 juta hingga 6,5 juta catatan per detik.
-
Kueri agregasi dan window kompleks, seperti q4, q5, dan q16, mencapai RPS dari 150.000 hingga 630.000 catatan per detik.
Secara keseluruhan, Realtime Compute for Apache Flink memberikan kinerja Nexmark 3,24 kali lebih tinggi dibandingkan Flink open source.
Tool pengujian
Nexmark adalah suite pengujian benchmark kinerja standar untuk mesin pemrosesan aliran. Model pengujian adalah sebagai berikut:
-
Tabel sumber Nexmark: Menghasilkan data uji (event Person, Auction, dan Bid) pada TPS tertentu.
-
Transformasi: 19 kueri standar Nexmark yang mencakup skenario umum seperti filtering, transformasi, agregasi, join, dan window.
-
Tabel sink blackhole: Data ditulis ke sink blackhole untuk menghilangkan gangguan kinerja dari penyimpanan eksternal, sehingga evaluasi dapat fokus pada kemampuan pemrosesan mesin Flink itu sendiri.
Tool pengujian Nexmark yang digunakan dalam dokumen ini diimplementasikan berdasarkan OpenAPI Realtime Compute for Apache Flink. Tool ini mengotomatiskan seluruh alur kerja, termasuk pembuatan pekerjaan, penerapan, pemantauan, dan pengumpulan hasil. Anda tidak perlu menulis SQL atau membuat pekerjaan secara manual di Konsol.
Lingkungan pengujian
Pekerjaan Flink dalam pengujian ini menggunakan konfigurasi pengoptimalan berikut:
|
Parameter |
Nilai |
Deskripsi |
|
table.exec.mini-batch.enabled |
true |
Mengaktifkan agregasi Mini-Batch. |
|
table.exec.mini-batch.allow-latency |
2s |
Interval buffering Mini-Batch. |
|
table.optimizer.distinct-agg.split.enabled |
true |
Mengaktifkan pengoptimalan split untuk agregasi Distinct. |
|
execution.checkpointing.interval |
3min |
Interval checkpoint. |
Prasyarat
-
Java Development Kit (JDK) 1.8.x atau versi yang lebih baru telah diinstal.
-
Anda telah mengaktifkan Realtime Compute for Apache Flink dan membuat ruang kerja. Untuk informasi selengkapnya, lihat Aktifkan Realtime Compute for Apache Flink.
-
Anda telah memperoleh ID AccessKey dan AccessKey Secret Akun Alibaba Cloud Anda.
Prosedur
Langkah 1: Unduh tool pengujian
Unduh dan ekstrak paket tool pengujian Nexmark nexmark-flink.tar.gz.
Struktur direktori setelah diekstrak adalah sebagai berikut:
nexmark-flink/
├── run_nexmark.sh # Skrip entri pengujian
├── nexmark_env.sh # File konfigurasi variabel lingkungan (perlu diedit)
├── bin/ # Skrip waktu proses
├── conf/ # Konfigurasi pekerjaan Flink
├── lib/ # File JAR (akan diunggah ke Konsol)
└── queries-vvp/ # File SQL Kueri Nexmark
Langkah 2: Unggah JAR Nexmark
-
Login ke Konsol Realtime Compute for Apache Flink.
-
Klik ruang proyek target. Di bilah navigasi kiri, pilih .
-
Pilih dan unggah file
nexmark-flink-0.2-SNAPSHOT.jar. File tersebut berada di direktorinexmark-flink/libdari tool pengujian. -
Setelah pengunggahan selesai, klik nama file untuk menyalin alamat OSS-nya. Anda akan memerlukan alamat ini untuk langkah konfigurasi selanjutnya. Format path file bervariasi tergantung jenis penyimpanan:
-
Penyimpanan OSS Bucket:
oss://<nama OSS Bucket>/artifacts/namespaces/<nama ruang proyek>/<nama file>Contoh:
oss://oss-test/artifacts/namespaces/flink-default/nexmark-flink-0.2-SNAPSHOT.jar -
Penyimpanan fully managed:
oss://flink-fullymanaged-<ID ruang kerja>/artifacts/namespaces/<nama ruang proyek>/<nama file>Contoh: oss://flink-fullymanaged-e6a123456789/artifacts/namespaces/flink-default/nexmark-flink-0.2-SNAPSHOT.jar
Untuk melihat jenis penyimpanan ruang kerja Anda, buka Konsol manajemen Realtime Compute for Apache Flink, temukan ruang kerja target, lalu klik Details di kolom Actions.
-
Langkah 3: Konfigurasikan parameter waktu proses
Edit file nexmark-flink/nexmark_env.sh dan atur parameter berikut.
|
Parameter |
Deskripsi |
Contoh |
|
END_POINT |
Titik akhir untuk Realtime Compute for Apache Flink. Pilih titik akhir untuk wilayah Anda. Untuk informasi selengkapnya, lihat Endpoints. |
ververica.cn-hangzhou.aliyuncs.com |
|
AK |
ID AccessKey Akun Alibaba Cloud Anda. |
- |
|
SK |
AccessKey Secret Akun Alibaba Cloud Anda. |
- |
|
WORK_SPACE |
ID ruang kerja Anda. |
e6a123456789 |
|
NAMESPACE |
Nama ruang proyek Anda. |
flink-default |
|
NEXMARK_JAR |
Alamat OSS file JAR yang telah Anda unggah di Langkah 2. |
oss://flink-fullymanaged-e6a123456789/artifacts/namespaces/flink-default/nexmark-flink-0.2-SNAPSHOT.jar |
|
FLINK_VERSION |
Versi mesin Flink yang akan diuji. |
vvr-11.5-jdk11-flink-1.20 |
|
QUERIES |
Tentukan kueri yang akan dijalankan. Pisahkan beberapa kueri dengan koma, misalnya |
all |
Menjalankan semua kueri membutuhkan waktu lama. Setiap kueri harus melewati tahapan seperti pembuatan pekerjaan, pembuatan data, dan eksekusi komputasi. Kami menyarankan Anda menjalankan satu kueri terlebih dahulu (misalnya, atur QUERIES menjadi q0) untuk memverifikasi bahwa konfigurasi lingkungan dan pengaturan parameter sudah benar sebelum menjalankan pengujian skala penuh.
Langkah 4: Jalankan pengujian
-
Di direktori
nexmark-flink, jalankan perintah berikut../run_nexmark.sh -
Tool pengujian secara otomatis membuat dan menjalankan pekerjaan Nexmark menggunakan OpenAPI.
-
Setelah pengujian selesai, durasi untuk setiap kueri ditampilkan dalam milidetik. Contoh berikut menunjukkan output sampel:
INFO com.github.nexmark.flink.vvp.Nexmark - q0 13078 ============================================================================ ✓ Benchmark execution completed successfully ============================================================================
Hasil kinerja
Tabel berikut membandingkan kinerja Nexmark antara Flink open source (1.20.4) dan Realtime Compute for Apache Flink (vvr-11.5-jdk11-flink-1.20) pada konfigurasi 8 CU. Setiap kueri memproses input sebanyak 100 juta catatan. RPS = Jumlah catatan input ÷ Durasi.
Data pengujian berikut dikumpulkan dalam lingkungan perangkat keras dan versi mesin tertentu. Kinerja aktual dapat bervariasi karena peningkatan perangkat keras dan pembaruan mesin. Hasil ini hanya untuk referensi.
|
Kueri |
Flink open source di ECS Versi: 1.20.4 |
Realtime Compute for Apache Flink Versi: vvr-11.5-jdk11-flink-1.20 |
|||
|
Durasi (ms) |
RPS |
Durasi (ms) |
RPS |
RPS vs. open source (×) |
|
|
q0 |
58848 |
1.699.293 |
23450 |
4.264.392 |
2,51 |
|
q1 |
57045 |
1.753.002 |
22824 |
4.381.353 |
2,50 |
|
q2 |
51890 |
1.927.154 |
15224 |
6.568.576 |
3,41 |
|
q3 |
84986 |
1.176.664 |
21558 |
4.638.649 |
3,94 |
|
q4 |
553426 |
180.693 |
157117 |
636.468 |
3,52 |
|
q5 |
365636 |
273.496 |
357547 |
279.684 |
1,02 |
|
q7 |
1.257.452 |
79.526 |
333837 |
299.547 |
3,77 |
|
q8 |
79788 |
1.253.321 |
29939 |
3.340.125 |
2,67 |
|
q9 |
2.324.518 |
43.020 |
266563 |
375.146 |
8,72 |
|
q10 |
189985 |
526.357 |
51202 |
1.953.049 |
3,71 |
|
q11 |
408384 |
244.868 |
145983 |
685.011 |
2,80 |
|
q12 |
121554 |
822.680 |
36991 |
2.703.360 |
3,29 |
|
q14 |
68903 |
1.451.316 |
20012 |
4.997.002 |
3,44 |
|
q15 |
183709 |
544.339 |
42734 |
2.340.057 |
4,30 |
|
q16 |
917597 |
108.980 |
337293 |
296.478 |
2,72 |
|
q17 |
102847 |
972.318 |
27076 |
3.693.308 |
3,80 |
|
q18 |
574949 |
173.928 |
96335 |
1.038.044 |
5,97 |
|
q19 |
586287 |
170.565 |
95121 |
1.051.293 |
6,16 |
|
q20 |
1.340.638 |
74.591 |
231482 |
431.999 |
5,79 |
|
q21 |
127089 |
786.850 |
39693 |
2.519.336 |
3,20 |
|
q22 |
94830 |
1.054.519 |
31228 |
3.202.254 |
3,04 |
|
Total |
2.383.209 |
49.695.131 |
9550361 |
15.317.480 |
3,24 |
Prosedur pengujian Flink open source
Untuk mereproduksi hasil pada Flink open source di ECS, ikuti prosedur berikut.
Persiapan lingkungan
Buat kluster Flink menggunakan EMR di ECS dengan konfigurasi berikut:
-
Versi EMR: EMR-5.21.0
-
Spesifikasi perangkat keras: Tiga instans ecs.g6a.xlarge (4 vCPU / 16 GiB), termasuk satu node master dan dua node core.
-
Aktifkan layanan Hadoop dan HDFS.
-
Konfigurasikan login tanpa kata sandi antar semua node. Misalnya, unggah file kunci privat Anda (seperti
key.pem) ke node master. Lalu, tambahkan konfigurasi berikut ke file~/.ssh/configdi node master. Ganti alamat IP dan path file dengan nilai aktual Anda.Host 192.168.0.0 HostName 192.168.0.0 User root IdentityFile /path/to/key.pem StrictHostKeyChecking no Host 192.168.0.1 HostName 192.168.0.1 User root IdentityFile /path/to/key.pem StrictHostKeyChecking no Host 192.168.0.2 HostName 192.168.0.2 User root IdentityFile /path/to/key.pem StrictHostKeyChecking noGunakan ssh untuk memverifikasi bahwa login tanpa kata sandi antar node berfungsi dengan baik. Jika muncul error "bad permissions", jalankan
chmod 600 /path/to/key.pemuntuk memperbaiki izin.
Persiapan perangkat lunak
-
Unduh paket Flink target (Apache Flink Downloads) dan paket pengujian Nexmark (nexmark-flink.tgz). Unggah paket ke node master dan ekstrak.
tar -zxvf flink-1.20.4-bin-scala_2.12.tgz tar -zxvf nexmark-flink.tgz mv flink-1.20.4 flink mv nexmark-flink nexmark
-
Salin file JAR di direktori
nexmark/libkeflink/lib. File JAR ini berisi generator data Nexmark.cp nexmark/lib/* flink/lib/
-
Atur variabel lingkungan. Edit
~/.bashrc, tambahkan konfigurasi berikut, lalu jalankansource ~/.bashrcagar perubahan berlaku.Konfigurasikan path sesuai dengan lingkungan aktual Anda.
export JAVA_HOME=/etc/alternatives/java_sdk_11 export PATH=$JAVA_HOME/bin:$PATH export FLINK_HOME=/mnt/disk1/flink export HADOOP_CLASSPATH=$(/opt/apps/HADOOP-COMMON/hadoop-common-current/bin/hadoop classpath)
Konfigurasi dan startup klaster
-
Konfigurasikan worker Flink. Pengujian ini menggunakan delapan Pengelola Tugas, ditempatkan sebagai berikut: dua di node master dan tiga di setiap node core.
Edit
flink/conf/workers, pastikan untuk mengganti alamat IP dengan nilai aktual.192.168.0.0 192.168.0.0 192.168.0.1 192.168.0.1 192.168.0.1 192.168.0.2 192.168.0.2 192.168.0.2
-
Ganti
flink/conf/config.yamldengannexmark/conf/config.yaml, dan perbarui item konfigurasi berikut:-
jobmanager.rpc.address: Alamat IP node master, misalnya192.168.0.0. -
state.checkpoints.dir: Path HDFS, misalnyahdfs:///checkpoints -
taskmanager.memory.process.size:4G
-
-
Edit
nexmark/conf/nexmark.yamldan aturnexmark.metric.reporter.hostke alamat IP node master. -
Sebarkan direktori
flinkdannexmarkserta konfigurasi variabel lingkungan ke setiap node core.Ganti alamat IP dengan nilai aktual Anda.
scp -r flink 192.168.0.1:/mnt/disk1/ scp -r flink 192.168.0.2:/mnt/disk1/ scp -r nexmark 192.168.0.1:/mnt/disk1/ scp -r nexmark 192.168.0.2:/mnt/disk1/ scp ~/.bashrc 192.168.0.1:~/ scp ~/.bashrc 192.168.0.2:~/Setelah distribusi selesai, jalankan
source ~/.bashrcdi setiap node core agar variabel lingkungan berlaku.
-
Di node master, mulai kluster Flink.
flink/bin/start-cluster.sh
-
Inisialisasi lingkungan pengujian Nexmark. Skrip ini mengonfigurasi Metric Reporter yang diperlukan di setiap node.
nexmark/bin/setup_cluster.sh
Atur batas sumber daya
Setelah kluster Flink dimulai, Anda harus menggunakan cgroups untuk membatasi penggunaan CPU setiap proses Pengelola Tugas hingga 75%. Hal ini mencegah Pengelola Tugas kehilangan koneksi akibat timeout heartbeat yang disebabkan oleh konflik sumber daya.
Jalankan perintah berikut di semua node tempat Pengelola Tugas berjalan, termasuk node master:
yum install -y libcgroup libcgroup-tools
cgcreate -t root:root -a root:root -g cpu,memory:mygroup
echo 100000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_period_us
echo 300000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
echo $((12 * 1024 * 1024 * 1024)) > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
jps | grep TaskManagerRunner | awk '{print $1}' | xargs cgclassify -g cpu,memory:mygroup
Di sini, cpu.cfs_quota_us / cpu.cfs_period_us = 300000 / 100000 = 3, artinya cgroup dapat menggunakan maksimal 3 core CPU (75% dari 4 vCPU).
Di lingkungan fully managed Realtime Compute for Apache Flink, Anda tidak perlu mengatur batas penggunaan sumber daya secara manual. Layanan ini sepenuhnya memanfaatkan sumber daya komputasi yang telah Anda beli.
Jalankan Nexmark
Di node master, jalankan perintah berikut dan tunggu hingga selesai untuk melihat hasilnya:
nexmark/bin/run_query.sh q0,q1,q2,q3,q4,q5,q7,q8,q9,q10,q11,q12,q14,q15,q16,q17,q18,q19,q20,q21,q22