Kafka分区巨大的副本大小

tjrkku2a  于 2023-02-28  发布在  Apache
关注(0)|答案(1)|浏览(136)

我们有一个由3个经纪人组成的托管MSK Kafka集群。我们注意到其中一个经纪人在相当长的一段时间内比其他经纪人的磁盘使用量大得多。
经过一些分析,我们发现__consumer_offsets主题中的一个分区副本比其他副本大得多。主代理上的分区和一个副本的大小大约为40MB。第三个副本为150GB。我们确实有一些非常活跃的使用者组(每天数十亿条消息),但我会期望副本均匀分布,特别是如果主副本不是很大的话。
我们认为这是因为在某个时间点,所有代理中的磁盘都处于100%。我们增加了磁盘并重新启动了所有代理。
由于是AWS MSK,我们无法访问服务器。对于为什么会发生这种情况以及如何解决这个问题,有什么建议吗?

jchrr9hc

jchrr9hc1#

经过一番折腾,我找到了一个解决办法。这个想法是重新创建有问题的副本。
步骤:
1.获取现有分区分配使用:

./kafka-reassign-partitions.sh \
  --generate --broker-list "1,2,3" \
  --topics-to-move-json-file ./topics-to-generate.json \
  --bootstrap-server <PUT_BOOTSTRAP_SERVERS_HERE>

其中topics-to-generate.json文件为:

{
  "topics": [
    {"topic": "__consumer_offsets"}
  ],
  "version":1
}

1.使用步骤1的输出,通过删除有问题的副本及其日志目录(在我们的示例中,它是代理3上的分区13)来更新有问题的分区:

...
        {
            "topic": "__consumer_offsets",
            "partition": 12,
            "replicas": [3,1,2],
            "log_dirs": ["any","any","any"]
        },
        {
            "topic": "__consumer_offsets",
            "partition": 13,
            "replicas": [1,2],
            "log_dirs": ["any","any"]
        },
        {
            "topic": "__consumer_offsets",
            "partition": 14,
            "replicas": [2,3,1],
            "log_dirs": ["any","any","any"]
        },
...

1.应用新配置:

./kafka-reassign-partitions.sh \
  --reassignment-json-file ./new-partitions-assignment.json \
  --execute \
  --bootstrap-server <PUT_BOOTSTRAP_SERVERS_HERE>

(执行后,可以通过将--execute替换为--verify来查看状态)
1.等待磁盘大小下降
1.使用步骤1中的原始配置恢复原始分区分配:

./kafka-reassign-partitions.sh \
  --reassignment-json-file ./original-partitions-assignment.json \
  --execute \
  --bootstrap-server <PUT_BOOTSTRAP_SERVERS_HERE>

相关问题