Message ordering
0-day streakReview

Your progress

Level 1

0 XP100 XP to level 2
0day streak
0best streak
0topics started
0cards reviewed
    Review cards

    Progress is stored only in this browser. No account is required.

    Message ordering: per-key queues and the sequential convoy: the 60-second story

    Message ordering

    The parcel shipped. The app says “preparing your order”.

    PAID was retried and landed after SHIPPED. Every message was delivered and every write succeeded; only the sequence was wrong.

    200/s

    the ceiling of one globally ordered lane

    At 5 ms a message, one lane handles 1 ÷ 0.005 s, however many machines you own. A 40,000-a-second sale needs 200 lanes.

    Order per key, one lane per order, lanes in parallel

    A1 never overtakes A2, but orders A and B interleave freely. That is all the business needed.

    “Kafka is ordered”?

    Bad: Kafka is ordered

    Only within a partition, and a thread pool after poll() scrambles even that.

    Good: Order per key

    Key payment events by payment ID for order per payment and 48-way parallelism.

    Per-key order rests on three rules

    1. Same key, same lane
    2. Each lane is first in, first out
    3. One message per key in flight at a time
    4. Most real ordering bugs break the third rule

    You take a keyed Kafka topic from 12 to 16 partitions.

    The catch

    About 75% of keys move. Their old events sit in one partition and new ones in another, read at different speeds.

    One poison refund stops its whole lane

    Dead-lettering it lets later events overtake it. For money and stock, park the key, holding it and its later messages while others flow.

    When order slips anyway, version every event

    Stored at v7, a late v6 is skipped, v8 is applied, and a v9 arriving before v8 waits. Use versions, not timestamps.

    Remember

    Ask for order per key, not globally. One lane and one reader per key; park stuck keys; version every event.