如何将现有的kafka主题分区分散到更多目录中?

Jan*_*rek 4 apache-kafka

默认情况下,kafka使用一个目录来保存日志。为了提高性能,建议将更多磁盘安装到代理,并将每个磁盘分配给一个目录,然后输入server.propertieslog.dirs=逗号分隔的目录列表。文档称,分区将以循环方式分布在目录中。据我现在了解,对于新主题来说也是如此。

我想将已创建主题的一半分区分配给新创建的分区,log.dir同时将另一半保留在原处 - 有支持的方法吗?

Sha*_*Guo 5

https://community.hortonworks.com/articles/59715/migration-kafka-partitions-data-to-new-data-folder.html

方法 1:只需删除现有数据目录内容并配置新的数据目录位置

在这种方法中,Kafka 从集群的其他成员复制分区数据。完整的分区数据将从头开始复制。所有分区都均匀地分配在目录位置上。复制时间取决于数据大小。如果我们有大量数据,副本可能需要更多时间才能加入ISR。这也会给网络/集群带来大量负载。这可能会给Kafka集群带来一些问题。我们可能会看到一些 ISR 更改和客户端错误。这种方法应该适合小型集群(GB 数据)

注意:在 Kafka 中,broker-id 将存储在 log.dir/meta.properties 文件中。如果我们没有配置broker.id,那么默认情况下Kafka会生成一个新的broker-id。为了避免这种情况,请在 log.dirs 目录中保留现有的 meta.properties 文件。

方法2:将分区目录移动到新的数据目录(不复制检查点文件)

它与上面的方法类似,但这里 Kafka 仅复制移动的分区。

方法3:移动分区目录并分割检查点文件。

每个数据目录包含三个检查点文件,即replication-offset-checkpoint、recovery-point-offset-checkpoint 和cleaner-offset-checkpoint。这些文件包含该目录中可用分区的最后提交的偏移量、日志结束检查点和清理检查点详细信息。每个文件包含版本号、整体数、每个条目一行。

我们需要将这些文件复制/创建到新目录,并且需要更新这些文件。我们需要调整两个目录(旧目录和新目录)中的条目。如果我们有大量分区,这可能会很乏味。但如果我们有大量数据,这是最好的方法。通过这种方法,副本将快速加入 ISR。集群/网络上的负载将会减少。