Halaman ini menjelaskan karakteristik performa untuk tugas streaming Dataflow yang membaca dari Apache Kafka dan menulis ke BigQuery. Halaman ini memberikan hasil uji benchmark untuk pipeline khusus peta, yang melakukan transformasi per pesan tanpa melacak status atau mengelompokkan elemen di seluruh streaming.
Banyak workload integrasi data, termasuk ETL, validasi kolom, dan pemetaan skema, termasuk dalam kategori khusus peta. Jika pipeline Anda mengikuti pola ini, Anda dapat menggunakan benchmark ini untuk menilai tugas Dataflow Anda terhadap konfigurasi referensi yang berperforma baik.
Metodologi pengujian
Benchmark dilakukan menggunakan resource berikut:
Cluster Managed Service untuk Apache Kafka. Pesan dibuat menggunakan template Streaming Data Generator.
- Kecepatan pesan: Sekitar 1.000.000 pesan per detik
- Beban Input: 1 GiB/dtk
- Format pesan: Teks JSON yang dibuat secara acak dengan skema tetap
- Ukuran pesan: Sekitar 1 KiB per pesan
- Partisi Kafka: 1000
Tabel BigQuery standar.
Pipeline streaming Dataflow yang menggunakan template Apache Kafka ke BigQuery. Pipeline ini melakukan penguraian dan pemetaan skema minimum yang diperlukan. Tidak ada fungsi yang ditentukan pengguna (UDF) kustom yang digunakan.
Setelah penskalaan horizontal stabil dan pipeline mencapai status stabil, pipeline diizinkan berjalan selama sekitar satu hari, setelah itu hasilnya dikumpulkan dan dianalisis.
Pipeline Dataflow
Benchmark ini menggunakan pipeline khusus peta yang melakukan pemetaan dan konversi pesan JSON sederhana. Pipeline diuji menggunakan mode tepat satu kali dan minimal satu kali. Pemrosesan minimal satu kali memberikan throughput yang lebih baik. Namun, pemrosesan ini hanya boleh digunakan jika data duplikat dapat diterima atau sink hilir menangani penghapusan duplikat.
Konfigurasi tugas
Tabel berikut menunjukkan cara konfigurasi tugas Dataflow.
| Setelan | Nilai |
|---|---|
| Jenis mesin pekerja | e2-standard-2 |
| vCPU mesin pekerja | 2 |
| RAM mesin pekerja | 8 GB |
| Persistent Disk mesin pekerja | Persistent Disk Standar (HDD), 30 GB |
| Pekerja maksimum | 120 |
| Streaming Engine | Ya |
| Penskalaan otomatis horizontal | Ya |
| Model penagihan | Penagihan berbasis resource |
| Storage Write API diaktifkan? | Ya |
| Streaming Storage Write API | 400 |
| Frekuensi pemicu Storage Write API | 5 detik |
| Format Pesan | JSON |
| Mode Autentikasi Kafka |
Kredensial Default Aplikasi (ADC). Untuk mengetahui informasi selengkapnya, lihat Jenis autentikasi untuk broker Kafka. |
Storage Write API BigQuery direkomendasikan untuk pipeline streaming. Saat menggunakan mode tepat satu kali dengan Storage Write API, Anda dapat menyesuaikan setelan berikut:
Jumlah streaming penulisan. Untuk memastikan paralelisme kunci yang memadai di tahap penulisan, tetapkan jumlah streaming Storage Write API ke nilai yang lebih besar dari jumlah CPU pekerja, sambil mengikuti rekomendasi throughput per streaming.
Frekuensi pemicu. Nilai detik satu digit cocok untuk pipeline throughput tinggi.
Untuk mengetahui informasi selengkapnya, lihat Menulis dari Dataflow ke BigQuery.
Pertimbangan khusus juga harus diberikan pada jumlah partisi Apache Kafka. Untuk memastikan paralelisme kunci yang memadai di tahap pembacaan, jumlah partisi harus setidaknya sama dengan jumlah total vCPU pekerja. Untuk mengetahui informasi selengkapnya, lihat Membaca dari Apache Kafka ke Dataflow.
Hasil benchmark
Bagian ini menjelaskan hasil pengujian benchmark.
Throughput dan penggunaan resource
Tabel berikut menunjukkan hasil pengujian untuk throughput pipeline dan penggunaan resource.
| Hasil | Tepat satu kali | Minimal satu kali |
|---|---|---|
| Throughput input per pekerja | Rata-rata: 15 MBps, n=3 | Rata-rata: 18 MBps, n=3 |
| Penggunaan CPU rata-rata di semua pekerja | Rata-rata: 70%, n=3 | Rata-rata: 75%, n=3 |
| Jumlah worker node | Rata-rata: 63, n=3 | Rata-rata: 53, n=3 |
| Unit Komputasi Streaming Engine per jam | Rata-rata: 58, n=3 | Rata-rata: 0, n=3 |
Algoritma penskalaan otomatis dapat memengaruhi tingkat penggunaan CPU target. Untuk mencapai penggunaan CPU target yang lebih tinggi atau lebih rendah, Anda dapat menetapkan rentang penskalaan otomatis atau petunjuk penggunaan pekerja. Target penggunaan yang lebih tinggi dapat menyebabkan biaya yang lebih rendah, tetapi juga latensi ekor yang lebih buruk, terutama untuk beban yang bervariasi.
Latensi
Tabel berikut menunjukkan hasil benchmark untuk latensi pipeline untuk mode tepat satu kali, tidak termasuk tahap input.
| Total latensi menyeluruh tahap, tidak termasuk tahap input | Tepat satu kali |
|---|---|
| P50 | Rata-rata: 1.200 md, n=3 |
| P95 | Rata-rata: 3.000 md, n=3 |
| P99 | Rata-rata: 5.400 md, n=3 |
Pengujian mengukur latensi menyeluruh per tahap (metrik
job/streaming_engine/stage_end_to_end_latencies
) di tiga eksekusi pengujian yang berjalan lama. Metrik ini mengukur waktu yang dihabiskan Streaming Engine di setiap tahap pipeline. Metrik ini mencakup semua langkah internal pipeline, seperti:
- Mengacak dan mengantrekan pesan untuk diproses
- Waktu pemrosesan sebenarnya; misalnya, mengonversi pesan ke objek baris
- Menulis status persisten, serta waktu yang dihabiskan untuk mengantrekan penulisan status persisten
Karena batasan metrik, latensi tahap input tidak dilaporkan. Oleh karena itu, latensi tahap input tidak disertakan dalam total.
Benchmark yang ditampilkan di sini mewakili nilai dasar. Latensi sangat sensitif terhadap kompleksitas pipeline. UDF kustom, transformasi tambahan, dan logika jendela yang kompleks dapat meningkatkan latensi.
Perkirakan biaya
Anda dapat memperkirakan biaya dasar pipeline Anda sendiri yang sebanding dengan Penagihan berbasis resource menggunakan Google Cloud kalkulator harga, sebagai berikut:
- Buka kalkulator harga.
- Klik Tambahkan ke estimasi.
- Pilih Dataflow.
- Untuk Jenis layanan, pilih "Dataflow Classic".
- Pilih Setelan lanjutan untuk menampilkan kumpulan opsi lengkap.
- Pilih lokasi tempat tugas berjalan.
- Untuk Jenis tugas, pilih "Streaming".
- Pilih Aktifkan Streaming Engine.
- Masukkan informasi untuk jam operasi tugas, worker node, mesin pekerja, dan penyimpanan Persistent Disk.
- Masukkan perkiraan jumlah Unit Komputasi Streaming Engine.
Penggunaan resource dan biaya diskalakan secara linear dengan throughput input, meskipun untuk tugas kecil dengan hanya beberapa pekerja, total biaya didominasi oleh biaya tetap. Sebagai titik awal, Anda dapat mengekstrapolasi jumlah worker node dan konsumsi resource dari hasil benchmark.
Misalnya, Anda menjalankan pipeline khusus peta dalam mode tepat satu kali, dengan kecepatan data input 100 MiB/dtk. Berdasarkan hasil benchmark untuk pipeline 1 GiB/dtk, Anda dapat memperkirakan persyaratan resource sebagai berikut:
- Faktor Penskalaan: (100 MiB/dtk) / (1 GiB/dtk) = 0,1
- Worker node yang diproyeksikan: 63 pekerja × 0,1 = 6,3 pekerja
- Jumlah Unit Komputasi Streaming Engine yang diproyeksikan per jam: 58 × 0,1 = 5,8 unit per jam
Nilai ini hanya boleh digunakan sebagai perkiraan awal. Throughput dan biaya sebenarnya dapat sangat bervariasi, berdasarkan faktor-faktor seperti jenis mesin, distribusi ukuran pesan, kode pengguna, jenis agregasi, paralelisme kunci, dan ukuran jendela. Untuk mengetahui informasi selengkapnya, lihat Praktik terbaik untuk pengoptimalan biaya Dataflow.
Menjalankan pipeline pengujian
Bagian ini menunjukkan perintah
gcloud dataflow flex-template run
yang digunakan untuk menjalankan pipeline khusus peta.
Mode tepat satu kali
gcloud dataflow flex-template run JOB_NAME \
--project=PROJECT_ID \
--template-file-gcs-location=gs://dataflow-templates-us-central1/latest/flex/Kafka_to_BigQuery_Flex \
--enable-streaming-engine \
--parameters \
readBootstrapServerAndTopic="KAFKA_BOOTSTRAP_ADDRESS;KAFKA_TOPIC",\
kafkaReadAuthenticationMode=APPLICATION_DEFAULT_CREDENTIALS,\
messageFormat=JSON,\
writeMode=SINGLE_TABLE_NAME,\
outputTableSpec="PROJECT_ID:BQ_DATASET.BQ_TABLE_NAME",\
useBigQueryDLQ=true,\
outputDeadletterTable="PROJECT_ID:BQ_DATASET.BQ_TABLE_NAME_dlq",\
numStorageWriteApiStreams=400
Mode minimal satu kali
gcloud dataflow flex-template run JOB_NAME \
--project=PROJECT_ID \
--template-file-gcs-location=gs://dataflow-templates-us-central1/latest/flex/Kafka_to_BigQuery_Flex \
--enable-streaming-engine \
--additional-experiments=streaming_mode_at_least_once \
--parameters \
readBootstrapServerAndTopic="KAFKA_BOOTSTRAP_ADDRESS;KAFKA_TOPIC",\
kafkaReadAuthenticationMode=APPLICATION_DEFAULT_CREDENTIALS,\
messageFormat=JSON,\
writeMode=SINGLE_TABLE_NAME,\
outputTableSpec="PROJECT_ID:BQ_DATASET.BQ_TABLE_NAME",\
useBigQueryDLQ=true,\
outputDeadletterTable="PROJECT_ID:BQ_DATASET.BQ_TABLE_NAME_dlq",\
numStorageWriteApiStreams=400,\
useStorageWriteApiAtLeastOnce=true
Ganti kode berikut:
JOB_NAME: nama tugas DataflowPROJECT_ID: project IDKAFKA_BOOTSTRAP_ADDRESS: alamat bootstrap cluster Apache KafkaKAFKA_TOPIC: nama topik KafkaBQ_DATASET: nama set data BigQueryBQ_TABLE_NAME: nama tabel BigQuery
Membuat data pengujian
Untuk membuat data pengujian, gunakan perintah berikut untuk menjalankan template Streaming Data Generator:
gcloud dataflow flex-template run JOB_NAME \
--project=PROJECT_ID \
--template-file-gcs-location=gs://dataflow-templates-us-central1/latest/flex/Streaming_Data_Generator \
--max-workers=140 \
--parameters \
schemaLocation=SCHEMA_LOCATION,\
qps=1000000,\
sinkType=KAFKA,\
bootstrapServer=KAFKA_BOOTSTRAP_ADDRESS,\
kafkaTopic=KAFKA_TOPIC,\
outputType=JSON
Ganti kode berikut:
JOB_NAME: nama tugas DataflowPROJECT_ID: project IDSCHEMA_LOCATION: jalur ke file skema di Cloud StorageKAFKA_BOOTSTRAP_ADDRESS: alamat bootstrap cluster Apache KafkaKAFKA_TOPIC: nama topik Kafka
Template Streaming Data Generator menggunakan file JSON Data Generator untuk menentukan skema pesan. Pengujian benchmark menggunakan skema pesan yang mirip dengan berikut ini:
{ "logStreamId": "{{integer(1000001,2000000)}}", "message": "{{alphaNumeric(962)}}" }
Langkah berikutnya
- Menggunakan antarmuka pemantauan tugas Dataflow
- Praktik terbaik untuk pengoptimalan biaya Dataflow
- Memecahkan masalah tugas streaming yang lambat atau macet
- Membaca dari Apache Kafka ke Dataflow
- Menulis dari Dataflow ke BigQuery