Karakteristik performa pipeline Kafka ke BigQuery

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:

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:

  1. Buka kalkulator harga.
  2. Klik Tambahkan ke estimasi.
  3. Pilih Dataflow.
  4. Untuk Jenis layanan, pilih "Dataflow Classic".
  5. Pilih Setelan lanjutan untuk menampilkan kumpulan opsi lengkap.
  6. Pilih lokasi tempat tugas berjalan.
  7. Untuk Jenis tugas, pilih "Streaming".
  8. Pilih Aktifkan Streaming Engine.
  9. Masukkan informasi untuk jam operasi tugas, worker node, mesin pekerja, dan penyimpanan Persistent Disk.
  10. 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 Dataflow
  • PROJECT_ID: project ID
  • KAFKA_BOOTSTRAP_ADDRESS: alamat bootstrap cluster Apache Kafka
  • KAFKA_TOPIC: nama topik Kafka
  • BQ_DATASET: nama set data BigQuery
  • BQ_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 Dataflow
  • PROJECT_ID: project ID
  • SCHEMA_LOCATION: jalur ke file skema di Cloud Storage
  • KAFKA_BOOTSTRAP_ADDRESS: alamat bootstrap cluster Apache Kafka
  • KAFKA_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