Sla taken op in een time-bucketed / priority queue op sleutel van de vervaltijd, poll alleen de taken die nu aan de beurt zijn, en geef ze door aan idempotente workers met at-least-once bezorging. Scan nooit 10 miljoen rows per tick — indexeer op vuurtijd zodat elke poll alleen raakt wat aan de beurt is.
Architectuur
API ─▶ Task store (DB/Redis ZSET, score = due_ts) ── 10M taken, gesharded
│
Poller (leider per partitie) ── ZPOPMIN due<=now ──▶ Ready queue (Kafka)
│ leiderverkiezing (etcd/ZK) │
▼ ▼
andere pollers idle/standby Worker pool (idempotent)
└─ ack ✔ / retry ✖ ─▶ DLQ
