我正在使用kafka流的网页访问事件的网站用户到一个分析服务。每个事件将包含消费者的下列详细信息:
我需要很高的吞吐量,所以我决定用分区键将主题划分为userId-ipAddress ie。
对于userId 1000和ip地址10.0.0.1,事件的分区键为"1000-10.0.0.1“。
在这个用例中,分区键是动态的,所以在创建主题时预先指定分区的数量。可以用动态分区计数在kafka中创建主题吗?
使用这种分区是一种很好的实践,还是有其他方法可以实现呢?
发布于 2015-09-26 08:04:16
用动态分区计数创建Kafka主题是不可能的。创建主题时,必须指定分区的数量。以后可以使用复制工具手动更改它。
但我不明白为什么首先需要动态分区计数。分区键与分区数无关。您可以在10个分区或1000个分区中使用分区键。当你向卡夫卡主题发送信息时,卡夫卡必须将它发送到一个特定的分区。每个分区都是通过它的ID来标识的,而ID只是一个数字。卡夫卡计算出这样的东西
partition_id = hash(partition_key) % number_of_partition它将消息发送给分区partition_id。如果您的用户比分区多得多,您应该会没事的。更多建议:
userId作为分区键。您可能不需要IP地址作为分区密钥的一部分。它有什么好处?通常,您需要来自单个用户的所有消息才能在一个分区中结束。如果您将IP地址作为分区密钥,那么来自单个用户的消息可能会在多个分区中结束。我不知道你的用例,但一般来说,这不是你想要的。现在,您应该能够处理系统中的所有消息。如果流量增加,您可以添加更多的Kafka代理,并且可以使用复制工具来更改分区的领导者/副本。如果流量增长超过10倍,则必须创建新的分区。
https://stackoverflow.com/questions/32761598
复制相似问题