【问题标题】:Should I create more topics or more partitions?我应该创建更多主题还是更多分区?
【发布时间】:2020-09-02 13:02:54
【问题描述】:

Kafka 接到其他国家的订单。

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

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

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

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

备注:

所以,订单有关于国家/城市的数据。然后 Kafka 必须在这个国家/城市找到执行者并发送相同的命令。

【问题讨论】:

  • 请提供有关国家/地区数据量的更多详细信息。分布均匀吗?
  • 我修改了问题

标签: apache-kafka apache-kafka-streams kafka-topic


【解决方案1】:

tl;dr

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


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

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

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

    日志中的分区有多种用途。首先,他们允许 日志以超出适合单个服务器的大小。每个 单个分区必须适合托管它的服务器,但是一个主题 可能有许多分区,因此它可以处理任意数量的数据。 其次,它们充当并行单元——稍后会详细介绍。

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

  • 保留政策: Kafka 中的消息保留适用于分区/段级别,您需要确保您所做的分区与您选择的所需保留政策相结合将支持您的用例。

【讨论】:

  • 谢谢。如果我有推荐主题怎么办,我在其中存储有关电影的用户推荐。如何将用户与该主题绑定?用于检索具体 user_id 的建议?我可以使用键创建分区:user_id。但是什么 id 用户超过 100 000,Kafka 说不要在主题中创建超过 10 000 个分区。如何解决?
  • 如果我有实体订单怎么办,那么我想通过一些参数对这些订单进行分类。应该是不同的分类器主题还是分区?
  • @AliceMessis 在您的情况下,我将创建一个主题 countries 并使用 country_idcountry_name 作为消息键,以便将同一国家/地区的消息放在同一个分区中.这样,每个分区将包含特定国家(或多个国家 - 视情况而定)的信息。
  • 如何按参数分类排序。例如,用户可以订阅价格超过 300 点的订单
  • 嗨@AliceMessis,请记住,stackoverflow 意味着一个问题和一个答案。不鼓励在 cmets 中添加越来越多的问题,除非您想了解给您的答案。对于未来的问题,我建议在您的原始帖子中提供尽可能多的信息和疑虑。这有助于人们为您提供全面的答案。
猜你喜欢
  • 2023-02-02
  • 2018-07-22
  • 2019-06-05
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多