Kafka分区偏移量分布极不均匀

zrfyljdw  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(577)

在负载测试之后,我在我们的一个测试环境中遇到了一个场景,其中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
}
31moq8wy

31moq8wy1#

根据kafka文档,只要密钥不相同,它们就应该随机选择一个分区。
逻辑 DefaultPartitioner 课堂更像是

hash(key) % numberOfPartitions

在编写代码时。
看起来你的钥匙大部分都掉到了分区里 0 可能值得重新考虑创建键和/或选择另一个分区策略。
如果您真的想让分区选择循环,您可以使用 null 钥匙。

nnsrf1az

nnsrf1az2#

按键选择分区有两种依赖关系:
如果生产者为每个消息记录提供相同的密钥,哈希将为您提供相同的哈希数,但不能确保如果您提供两个不同的密钥,则它永远不会为您提供相同的哈希数。
默认分区器使用密钥的哈希值和主题上的分区总数来确定分区号。如果增加分区号,那么如果提供相同的键,则默认分区程序将平均返回不同的数字。其解释如下:https://jaceklaskowski.gitbooks.io/apache-kafka/content/kafka-producer-internals-defaultpartitioner.html
同时->https://www.learningjournal.guru/courses/kafka/kafka-foundation-training/custom-partitioner/

相关问题