How we seamlessly migrated high volume real-time streaming traffic from one service to another with zero data loss and duplication

This post details a custom time-based switchover logic for migrating high-volume real-time streaming traffic between services with zero data loss and duplication. The approach involves moving stream processing code to a shared `/commons` directory, enabling both old and new services to use the same logic. Temporary sink resources are created for validation. A `map[string]time.Time` in the shared code schedules the switchover for each stream, ensuring simultaneous transition. The deployment includes buffer time, close monitoring, and a post-switchover validation period where the old service consumes but does not write. Learnings emphasize the effectiveness of this temporary measure for specific use cases but caution against its general use due to potential rollback inconsistencies.
More from the Data Production Issue (DPI) Operationalization trail
- Data Mesh at Grab (Part III): Operationalizing data reliability with automated DPIs
- The Hugo evolution: Engineering Grab's unified, one-click data ingestion platform with Apache Flink
- Data Mesh at Grab (Part II): The foundational tools behind certification
- Real-time data quality monitoring: Kafka stream contracts with syntactic and semantic test
- Data mesh at Grab part I: Building trust through certification