withsoon

Event format

Standardize the metadata Uber needs to operate every event; preserve the domain payload each producer owns.

Driver location event

geo.location_pings
High-volume spatial payload
{
  "event_id": "loc-7f31",
  "event_time": "09:14:02Z",
  "ingestion_time": "09:14:03Z",
  "event_version": 2,
  "driver_id": "drv-4471",
  "geohash": "tdr1v",
  "payload": { "lat": 12.9716, "lng": 77.5946,
               "speed_kmh": 34.2 }
}

Payment capture event

payments.events
Financial transaction payload
{
  "event_id": "pay-91ac",
  "event_time": "09:37:18Z",
  "ingestion_time": "09:37:18Z",
  "event_version": 3,
  "trip_id": "trip-88213",
  "payload": { "type": "payment_captured",
               "amount": 428, "currency": "INR" }
}
Shared envelopeevent_idevent_timeingestion_timeevent_versionentity IDsThe payload changes; these operational fields do not.

Partition keys

Choose the Kafka key from the ordering and locality each Uber workload needs.

Spatial events need balanced locality. Transactional events need deterministic entity order.

Capacity planning

Calculate the minimum required for peak GPS traffic, then provision for how Uber will operate the topic.

Reliability controls

GPS retention

Keep detailed GPS briefly for operational recovery, then reduce its precision for economical long-term analysis.