在负载测试之后,我在我们的一个测试环境中遇到了一个场景,其中kafka分区的偏移量分布不均匀。如果它被关闭了几百个,我会认为这是正常的,但这似乎是不同的。
在10个分区中,我看到在我们的分区中有以下分布:
-------------------------
|partition | offset|
-------------------------
|0 | 100000+|
-------------------------
|1 | ~200|
-------------------------
|2 - 10 | ~50|
-------------------------
...
负载测试生成唯一键并将它们分配给生成的事件。根据kafka文档,只要密钥不相同,它们就应该随机选择一个分区。我觉得奇怪的是,第一个分区的偏移量如此之高,我想知道是否有人知道为什么会发生这种情况?
在正常情况下,只有在进行负载试验时,才会出现这种情况。
[编辑]:只有生产者配置与ssl设置相关。其他都是默认值。这个 key
是使用 uuid/v4
在负载试验期间。
{
host: process.env.KAFKA_URL,
requestTimeout: 1000,
ssl: true,
sslOptions: config.sslOptions
}
2条答案
按热度按时间31moq8wy1#
根据kafka文档,只要密钥不相同,它们就应该随机选择一个分区。
逻辑
DefaultPartitioner
课堂更像是在编写代码时。
看起来你的钥匙大部分都掉到了分区里
0
可能值得重新考虑创建键和/或选择另一个分区策略。如果您真的想让分区选择循环,您可以使用
null
钥匙。nnsrf1az2#
按键选择分区有两种依赖关系:
如果生产者为每个消息记录提供相同的密钥,哈希将为您提供相同的哈希数,但不能确保如果您提供两个不同的密钥,则它永远不会为您提供相同的哈希数。
默认分区器使用密钥的哈希值和主题上的分区总数来确定分区号。如果增加分区号,那么如果提供相同的键,则默认分区程序将平均返回不同的数字。其解释如下:https://jaceklaskowski.gitbooks.io/apache-kafka/content/kafka-producer-internals-defaultpartitioner.html
同时->https://www.learningjournal.guru/courses/kafka/kafka-foundation-training/custom-partitioner/