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

问题描述 投票:1回答:1

Kafka从其他国家获得订单。

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

还有一个主题,并使用strean Kafka筛选订单并发送到特定国家/地区主题吗?

如果国家/地区的数量超过180个,哪个更好?

我想在特定国家/城市的执行者之间分配订单。

备注:

因此,订单包含有关国家/城市的数据。然后,卡夫卡必须在这个国家/城市中找到执行者,并向他们发送相同的命令。

apache-kafka apache-kafka-streams kafka-topic
1个回答
1
投票

tl; dr

在您的情况下,我将创建一个主题countries,并使用country_idcountry_name作为消息键,以便将同一国家/地区的消息放置在同一分区中。这样,每个分区都将包含特定国家(地区)的信息。


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

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

  • [主机存储功能:分区必须适用于主机的存储,而主题可以通过在多个分区之间进行分区而分布在整个Kafka群集中。 Kafka Docs可以进一步阐明这一点:

    日志中的分区有多种用途。首先,他们允许日志的规模将超出可容纳在一台服务器上的大小。每单个分区必须适合承载该分区的服务器,但是一个主题可能有许多分区,因此它可以处理任意数量的数据。其次,它们充当并行性的单元-稍后对此进行详细说明。

  • 吞吐率:如果吞吐量高,则更有意义的是为每个实体创建不同的主题并将它们分为多个分区,以便多个使用者可以加入使用者组。不要忘记,Kafka中的并行度是由分区(显然是活动的使用者)的数量定义的。

  • [Retention Policy:] Kafka中的邮件保留功能适用于分区/段级别,您需要确保结合使用的保留策略和您选择的保留策略来支持您的用例。

© www.soinside.com 2019 - 2024. All rights reserved.