Ordering is per partition, and only per partition

Kafka guarantees order within a partition and nothing across partitions, which means the key choice is the ordering design.

// no key: round-robin. no ordering guarantee at all.
$producer->produce(RD_KAFKA_PARTITION_UA, 0, $payload);

// keyed by order id: every event for one order is in
// one partition, and therefore ordered
$producer->produce(
    RD_KAFKA_PARTITION_UA, 0, $payload, (string) $order->id
);

Choosing the key is choosing what is ordered relative to what, and the mistake is picking something too coarse — keying by tenant puts every event for a large customer in one partition and creates a hot spot that limits throughput for everybody. Keying by the entity whose events must be ordered is nearly always right. A consumer that processes messages asynchronously after receiving them loses the ordering the broker provided, which is easy to do by accident.