是否可以创建一个带有动态分区计数的kafka主题?

yi0zb3m4  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(350)

我使用Kafka流的事件页面访问的网站用户到分析服务。每个事件将包含消费者的以下详细信息:
用户id
用户的ip地址
我需要非常高的吞吐量,所以我决定使用分区键作为 userId-ipAddress ie公司
对于用户标识1000和ip地址10.0.0.1,事件的分区键为“1000-10.0.0.1”
在这个用例中,分区键是动态的,因此在创建主题时预先指定分区的数量。可以用动态分区计数在kafka中创建主题吗?
使用这种分区是一种好的做法还是有其他方法可以实现这一点?

c2e8gylq

c2e8gylq1#

用动态分区计数创建Kafka主题是不可能的。创建主题时,必须指定分区数。您可以稍后使用复制工具手动更改它。
但是我不明白为什么你首先需要动态分区计数。分区键与分区数无关。您可以将分区密钥用于10个分区或1000个分区。当您向kafka主题发送消息时,kafka必须将其发送到特定分区。每个分区都由它的id标识,id只是一个数字。Kafka计算出这样的东西

partition_id = hash(partition_key) % number_of_partition

它将消息发送到分区 partition_id . 如果你的用户远远多于分区,你应该可以。更多建议:
使用 userId 作为分区键。您可能不需要ip地址作为分区密钥的一部分。有什么用?通常,您需要将来自单个用户的所有消息都放在一个分区中。如果您将ip地址作为分区密钥,那么来自单个用户的消息可能会在多个分区中结束。我不知道你的用例,但这不是你想要的。
测量需要多少分区来处理所有消息。然后创建十倍多的分区。您可以创建比实际需要更多的分区。Kafka不会介意的,也不会有表现上的惩罚。了解如何在kafka集群中选择主题/分区的数量?
现在您应该能够处理系统中的所有消息。如果流量增加,您可以添加更多kafka代理,并且可以使用复制工具更改分区的引线/副本。如果流量增长超过10倍,则必须创建新分区。

相关问题