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

时间:2016-03-17 13:06:09

标签: apache-kafka

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

我想将已经创建的主题的一半分区分发给新创建的log.dir,同时保持另一半的位置 - 是否有支持的方法可以做到这一点?

1 个答案:

答案 0 :(得分:4)

https://community.hortonworks.com/articles/59715/migrating-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:移动分区目录并拆分检查点文件。

每个数据目录包含三个检查点文件,即复制偏移检查点,恢复点偏移检查点和清除偏移检查点。这些文件包含该目录中可用分区的上次提交的偏移量,日志结束检查点和更清晰的检查点详细信息。每个文件都包含版本号,no.of entires,每个条目一行。

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