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

y3bcpkx1  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(348)

默认情况下,kafka使用一个目录来保存日志。为了提高性能,建议向代理装载更多磁盘,然后将每个磁盘分配到一个目录中 server.properties 输入 log.dirs= 作为一个单独的目录列表。文档中说,分区将以循环方式分布在目录中。据我现在所知,这对新的主题是正确的。
我想把我已经创建的主题的一半分区分配给一个新创建的主题 log.dir 同时保持另一半的位置-有没有一个支持的方法来做到这一点?

bq9c1y66

bq9c1y661#

https://community.hortonworks.com/articles/59715/migrating-kafka-partitions-data-to-new-data-folder.html
方法1:只需删除现有的数据目录内容并配置新的数据目录位置
在这种方法中,kafka从集群的其他成员复制分区数据。完整的分区数据将从头复制。所有分区都平均分配到各个目录位置。复制时间将取决于数据大小。如果我们有大量的数据,副本可能需要更多的时间加入isr。这也会给网络/集群带来很大的负载。这可能会给kafka集群带来一些问题。我们可能会看到,一些isr更改和客户端错误。这种方法应该适合于小型集群(gbs的数据)
注意:在kafka中,代理id将存储在log.dir/meta.properties文件中。如果我们没有配置broker.id,那么默认情况下kafka会生成一个新的broker-id。
方法2:将分区目录移动到新的数据目录(不复制检查点文件)
它类似于上面的方法,但这里kafka只复制移动的分区。
方法3:移动分区目录和分割检查点文件。
每个数据目录包含三个检查点文件,即复制偏移检查点、恢复点偏移检查点和清除偏移检查点。这些文件包含该目录中可用分区的上次提交的偏移量、日志结束检查点和更干净的检查点详细信息。每个文件都包含版本号、实体号,每个条目对应一行。
我们需要复制/创建这些文件到新目录,我们需要更新这些文件。我们需要调整两个目录(旧目录和新目录)中的条目。如果我们有大量的分区,这可能会很乏味。但如果我们有大量的数据,这是最好的方法。通过这种方法,副本将快速加入isr。群集/网络上的负载将减少。

相关问题