Building an Incremental Watermark-Driven Reverse ETL with Spring Batch
Bagaimana saya merancang dan merekayasa aplikasi Java Reverse ETL kustom menggunakan Spring Batch untuk menyinkronkan data analitik olahan dari BigQuery kembali ke Cloud SQL PostgreSQL dengan aman dan efisien.
Ringkasan Eksekutif
Dalam siklus data modern, kebutuhan untuk menyalurkan wawasan olahan (processed analytics) dari data warehouse BigQuery kembali ke dalam database operasional transaksional (seperti Cloud SQL PostgreSQL) sangat penting untuk mendukung keputusan sistem secara real-time (misalnya memperbarui kuota diskon merchant atau skor retensi user di sistem backend operasional). Sinkronisasi penuh (Full Load) setiap hari sangat tidak efisien dan memicu latensi serta pembengkakan biaya komputasi BigQuery.
Saya merancang dan mengembangkan aplikasi Reverse ETL mandiri menggunakan Spring Boot dan Spring Batch dengan mekanisme Watermark Column Scan yang menjamin sinkronisasi data delta secara efisien melalui mode Full Load, Incremental, dan Merge (Upsert).
Arsitektur Alur & Implementasi Teknis
sequenceDiagram
participant Postgres as Cloud SQL (PostgreSQL)
participant Batch as Spring Batch Engine (Java)
participant BQ as GCP BigQuery
Batch->>Postgres: 1. Scan Max Watermark (e.g. SELECT MAX(updated_at))
Postgres-->>Batch: Return max_watermark value
Batch->>BQ: 2. Query dynamic delta (WHERE updated_at > max_watermark)
BQ-->>Batch: Stream matching records (BigQueryItemReader)
Batch->>Postgres: 3. Chunked upsert/write updates (PostgresItemWriter - Merge Mode)
- Spring Batch Chunk Processing: Menggunakan framework Spring Batch untuk membagi pemrosesan sinkronisasi ke dalam chunk-oriented processing. Ini memastikan penggunaan memori JVM yang stabil dan aman meskipun mentransfer jutaan records.
- Multiple Sync Modes Support:
- Full Load Mode: Sinkronisasi ulang secara menyeluruh dari BigQuery ke tabel relasional Cloud SQL.
- Incremental Mode (Watermark-based): Mengidentifikasi nilai penanda waktu maksimum (
SELECT MAX(last_sync_time) FROM merchant_analytics_prod) di target database operasional, lalu memicu pembacaan filter terbatas di hulu data warehouse. - Merge (Upsert) Mode: Melakukan integrasi update/insert dinamis pada Postgres target menggunakan pemetaan ID unik untuk meminimalkan beban I/O kunci primer database target.
- Resilient Transaction Management: Jika terjadi kendala koneksi atau kegagalan di tengah sinkronisasi, Spring Batch secara aman mengelola batasan transaksi (commit transaction boundary) untuk mencegah redundansi atau duplikasi data di database operasional.
Dampak Bisnis & Metrik Keberhasilan
- Efisiensi Komputasi: Mengurangi beban kerja dan waktu sinkronisasi Reverse ETL harian karena hanya memproses data delta.
- Konsistensi Data Real-Time: Skor retensi pengguna operasional dan dasbor analisis merchant di aplikasi AstraPay harian selalu sinkron secara presisi dengan data warehouse inti GCP.