Kafka重新平衡的数据在一个主题,由于缓慢(er)消费者

eni9jsuy  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(328)

例如,假设我有一个有4个分区的主题。我向这个主题发送4k消息。每个分区获得1k条消息。由于外部因素的影响,3个用户分别处理了所有1k的消息。但是,第4个分区只能处理200条消息,剩下800条消息要处理。有没有一种机制允许我“重新平衡”主题中的数据,比如说给分区1-3 200个分区4s数据,让所有分区都有200条消息作为一个进程?
我并不是在寻找一种向用户组添加额外节点并让kafka平衡分区的方法。
添加了重新分配分区的输出:
当前分区副本分配

{
  "version": 1,
  "partitions": [
    {
      "topic": "MyTopic",
      "partition": 0,
      "replicas": [
        0
      ],
      "log_\ndirs": [
        "any"
      ]
    },
    {
      "topic": "MyTopic",
      "partition": 1,
      "replicas": [
        0
      ],
      "log_dirs": [
        "any"
      ]
    },
    {
      "topic": "MyTopic",
      "partition": 4,
      "replicas": [
        0
      ],
      "log_dirs": [
        "any"
      ]
    },
    {
      "topic": "MyTopic",
      "partition": 3,
      "replicas": [
        0
      ],
      "log_dirs": [
        "any"
      ]
    },
    {
      "topic": "MyTopic",
      "p\nartition": 2,
      "replicas": [
        0
      ],
      "log_dirs": [
        "any"
      ]
    },
    {
      "topic": "MyTopic",
      "partition": 5,
      "replicas": [
        0
      ],
      "log_dirs": [
        "any"
      ]
    }
  ]
}

建议的分区重新分配配置

{
  "version": 1,
  "partitions": [
    {
      "topic": "MyTopic",
      "partition": 3,
      "replicas": [
        0
      ],
      "log_ dirs": [
        "any"
      ]
    },
    {
      "topic": "MyTopic",
      "partition": 0,
      "replicas": [
        0
      ],
      "log_dirs": [
        "any"
      ]
    },
    {
      "topic": "MyTopic",
      "partition": 5,
      "replicas": [
        0
      ],
      "log_dirs": [
        "any"
      ]
    },
    {
      "topic": "MyTopic",
      "partition": 2,
      "replicas": [
        0
      ],
      "log_dirs": [
        "any"
      ]
    },
    {
      "topic": "MyTopic",
      "p artition": 4,
      "replicas": [
        0
      ],
      "log_dirs": [
        "any"
      ]
    },
    {
      "topic": "MyTopic",
      "partition": 1,
      "replicas": [
        0
      ],
      "log_dirs": [
        "any"
      ]
    }
  ]
}
6ju8rftf

6ju8rftf1#

您可以做一些事情来提高性能
增加分区数
增加正在使用分区的使用者组。
第一种方法将重新平衡分区上的负载,第二种方法将增加分区上的并行性,以快速使用消息。
我希望这有帮助。您可以参考此链接了解更多信息
https://xyu.io/2016/02/29/balancing-kafka-on-jbod/
Kafka消费者是消费群体的一部分。组中有一个或多个消费者。每个分区被分配给一个使用者。
如果您的使用者比分区多,那么您的一些使用者将处于空闲状态。如果分区多于使用者,则可能会将多个分区分配给单个使用者。
每当新使用者加入时,就会启动重新平衡,并为新使用者分配一些先前分配给其他使用者的分区。
例如,如果有20个分区全部由一个使用者使用,而另一个使用者加入,则会出现重新平衡。
在重新平衡过程中,消费者群体“暂停”。

lf3rwulv

lf3rwulv2#

在生成消息时分配分区。它们永远不会在分区之间自动移动。通常,对于每个分区,可以有多个使用者(具有不同的使用者组id)以不同的速度进行消费,因此代理不能基于使用者(组)的慢度在分区之间移动消息。不过,您可以尝试以下几点:
更多分区,希望更公平地分配负载(您可以拥有比使用者更多的分区)
让生产者在每条消息上显式地设置分区,以便在分区之间生成一个分布,消费者可以更好地处理这个分布
让使用者监视他们的延迟,并在他们落后时主动取消订阅分区,以便让其他使用者承担负载。

相关问题