我应该创建更多主题还是更多分区?

Should I create more topics or more partitions?

Kafka 收到来自其他国家的订单。

我需要按国家对这些订单进行分组。我应该创建更多带有国家/地区名称的主题,还是要创建一个具有不同分区的主题?

另一个是拥有一个主题并使用 strean Kafka 过滤订单并发送到特定国家主题吗?

如果国家数量超过 180 个,哪个更好?

我想在特定 country/city.

中的执行者之间分发订单

备注:

所以,订单有关于 country/city 的数据。那么 Kafka 必须在这个 country/city 中找到执行者并向他们发送相同的命令。

tl;dr

在你的情况下,我会创建一个主题 countries 并使用 country_idcountry_name 作为消息键,以便将来自同一国家/地区的消息放在相同的位置划分。这样,每个分区将包含特定国家(或国家 - 视情况而定)的信息。


我想说这个决定取决于多种因素;

  • Logic/Separation 关注点: 您可以根据您尝试实现的逻辑决定是否在多个分区上使用多个主题。通常,不同的实体需要不同的主题。例如,假设您要流式传输 userscompanies。创建一个包含两个分区的主题没有多大意义,其中第一个分区包含 users,第二个分区包含 companies。此外,为多个分区设置一个主题将不允许您实现例如users 的消息排序只能使用键控消息实现(具有相同键的消息放置在同一分区中)。

  • 主机存储能力:分区必须适合主机的存储,而主题可以是通过将其划分到多个分区来分布在整个 Kafka 集群中。 Kafka Docs 可以进一步阐明这一点:

    The partitions in the log serve several purposes. First, they allow the log to scale beyond a size that will fit on a single server. Each individual partition must fit on the servers that host it, but a topic may have many partitions so it can handle an arbitrary amount of data. Second they act as the unit of parallelism—more on that in a bit.

  • 吞吐量:如果你有高吞吐量,为每个实体创建不同的主题并将它们分成多个分区以便多个消费者可以加入更有意义消费者群体。不要忘记 Kafka 中的并行级别是由分区的数量(显然还有活跃的消费者)定义的。

  • 保留策略: Kafka 中的消息保留在 partition/segment 级别上工作,您需要确保您结合使用的分区使用您选择的所需保留策略将支持您的用例。