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.