I think that topic for each tenant is the right choice.
The naming convention might be something like this: topic_base_name_tenant_id.
The reasons are:
- It allows flexible configuration for each tenant (like @Sebastian mentioned earlier).
- Clearer logical separation.
Now let's say that we will use different approach. For example, partition for each tenant. It might be problematic, since:
- You are limiting the parallelism level to the number of tenants.
- Adding new tenants, results adding new partition → republish old messages (The default partitioning algorithm is: message_key % partition_size).