卡夫卡从其他国家获得订单。
我需要按国家/地区对这些订单进行分组。我应该创建更多带有国家名称的主题还是要创建一个具有不同分区的主题?
另一种是拥有一个主题并使用 strean Kafka 过滤订单并发送到特定国家主题?
如果国家数量超过 180 个更好?
我想在特定国家/城市的执行者之间分配订单。
评论:
所以,订单有关于国家/城市的数据。然后卡夫卡必须在这个国家/城市找到执行者,并向他们发送相同的命令。
卡夫卡从其他国家获得订单。
我需要按国家/地区对这些订单进行分组。我应该创建更多带有国家名称的主题还是要创建一个具有不同分区的主题?
另一种是拥有一个主题并使用 strean Kafka 过滤订单并发送到特定国家主题?
如果国家数量超过 180 个更好?
我想在特定国家/城市的执行者之间分配订单。
评论:
所以,订单有关于国家/城市的数据。然后卡夫卡必须在这个国家/城市找到执行者,并向他们发送相同的命令。
tl;博士
在您的情况下,我将创建一个主题countries
并使用country_id
orcountry_name
作为消息键,以便将同一国家/地区的消息放置在同一分区中。通过这种方式,每个分区将包含特定国家(或多个国家 - 视情况而定)的信息。
我想说这个决定取决于多种因素。
逻辑/关注点分离:您可以根据您尝试实现的逻辑来决定是否在多个分区上使用多个主题。通常,您需要针对不同实体的不同主题。例如,假设您想要流式传输users
和companies
. 创建具有两个分区的单个主题没有多大意义,第一个分区保存第一个分区users
,第二个保存companies
. 此外,为多个分区设置一个主题将不允许您实现例如消息排序,users
这只能使用键控消息来实现(具有相同键的消息放置在同一个分区中)。
主机存储能力:一个分区必须适合主机的存储,而一个主题可以通过将其分区到多个分区来分布在整个 Kafka 集群中。Kafka Docs可以更清楚地说明这一点:
日志中的分区有多种用途。首先,它们允许日志扩展到超出单个服务器的大小。每个单独的分区必须适合托管它的服务器,但一个主题可能有许多分区,因此它可以处理任意数量的数据。其次,它们充当并行单元——稍后会详细介绍。
吞吐量:如果你有高吞吐量,那么为每个实体创建不同的主题并将它们分成多个分区以便多个消费者可以加入消费者组更有意义。不要忘记 Kafka 中的并行级别是由分区的数量(显然是活跃的消费者)定义的。
保留策略: Kafka 中的消息保留适用于分区/段级别,您需要确保您所做的分区与您选择的所需保留策略相结合将支持您的用例。