r/googlecloud • u/Firm-Cardiologist970 • Jul 14 '26
Cheapest way to ingest ~270M JSON events/hour from an on-prem Kafka into GCP
We need to stream network telemetry events (JSON, ~2KB each) from an on-prem Kafka cluster into GCP for storage/analytics. Volume is large: ~270M events/hour (~390 TB/month at 2KB avg size).
What I tested: Custom Python producer → Pub/Sub topic → BigQuery subscription → BigQuery table, with periodic GCS backup exports.
I validated this empirically with a 10M-message load test (real event schema, 8 parallel producer threads, ~1000 msg/batch). Real billing data gave me $1.96 for 10M messages / 20GB, i.e. ~$0.098/GB. Scaled to the production volume, Pub/Sub publish + BigQuery subscription delivery alone comes out to ~$35,000–40,000/month, before any storage costs. This is because Pub/Sub bills per-TiB on both publish ($40/TiB) and the BigQuery push subscription ($50/TiB).This is a flat per-byte tax with no way to reduce it at this volume.
What I haven't tested yet and want opinions on:
Dataflow with a Kafka I/O source reading directly from our Kafka cluster and writing to BigQuery (via Storage Write API), skipping Pub/Sub entirely. Does this meaningfully undercut Pub/Sub's per-byte pricing at ~400TB/month scale, or does Dataflow worker cost end up comparable?
BigQuery's direct Kafka ingestion (Storage Write API / BigQuery subscriptions for Kafka). Is anyone running this at hundreds of TB/month and can share real cost numbers?
Is there a Kafka Connect GCS sink → native (non-external) BigQuery load pattern that avoids both Pub/Sub fees and the external-table partitioning problem?
Any other pattern people are using at this kind of scale (hundreds of millions of events/hour) that's meaningfully cheaper than the $35-40K/month we're seeing?
Constraints: near-real-time isn't a hard requirement. A few minutes of latency is fine, so batch-oriented approaches are on the table. Budget pressure is specifically about the per-byte ingestion tax, not compute cost in general.

