Chapter 9. Upserts in the Serving Layer

AATD’s operations team is happy with the progress we’ve made so far. They’re now able to get real-time insights into popular products and categories, which is making procurement significantly easier.

But (and there’s always a but, isn’t there?), they’ve been receiving complaints about delayed orders, and at the moment, they don’t have any insight into what’s happening with the delivery of orders to customers. Customers would also like to know the status of their order and when it’s likely to arrive at their residence.

In this chapter, we’re going to solve both of those problems. We’ll introduce order and delivery statuses, which will evolve over time. Working with this type of data will require the service to handle multiple events for the same order. In addition to wanting to know the latest status, we’ll also want to know how that status has changed over time.

It’s gonna be a fun chapter!

Order Statuses

As mentioned earlier, users want to be able to track the status of their order from when it’s placed until it’s delivered to them, and operators want to know if any orders aren’t being fulfilled in a timely manner. To provide this functionality, we’ll need to have order statuses.

We’re going to add an ordersStatuses topic to Kafka to keep track of these states. Orders will go through the following stages:

  • PLACED_ORDER

  • ORDER_CONFIRMED

  • BEING_PREPARED

  • BEING_COOKED

  • OUT_FOR_DELIVERY

  • ARRIVING_AT_DOOR

  • DELIVERED

In a real system, ...

Get Building Real-Time Analytics Systems now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.