Counted Once In Pinot
Uber's ad event pipeline is a chain of Flink jobs over Kafka. Flink runs with exactly-once checkpointing every two minutes, the Kafka producers are transactional, and downstream consumers read with read_committed. The aggregation job emits one-minute tumbling windows keyed by ad and minute; the attribution job joins those to orders and writes to Pinot and Hive. Aggregation results carry a random UUID, attribution results carry a deterministic id.
A task manager dies. Flink restores the last checkpoint and reprocesses about two minutes of events. Pinot totals stay correct.
Which combination is doing the work?
Sign in to answer questions and track your progress
Sign In