At hundreds of millions of events/day (~a few thousand/sec, higher at peaks) the winning move is to decouple ingestion from serving: absorb writes into a durable log, process the stream once, and fan out to two stores tuned for opposite jobs — pre-aggregated for parents (fast reads), raw and full-fidelity for ML.
a mailroom — the collector receives mail, Kafka is the conveyor belt, and every item is copied onto two shelves: a parents glance at, and a the ML team digs through.
