【问题标题】:How to spread existing kafka topic partitions into more directories?如何将现有的 kafka 主题分区分散到更多目录中?
【发布时间】:2016-07-03 20:28:00
【问题描述】:

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

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

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

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

    方法一:删除现有数据目录内容,配置新数据目录位置

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

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

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

    与上述方法类似,但这里Kafka只复制移动的分区。

    方法三:移动分区目录,拆分检查点文件。

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 2020-10-19
      • 2021-08-30
      • 2019-02-25
      • 2016-10-01
      • 2016-02-14
      • 2016-10-15
      • 2015-03-05
      相关资源
      最近更新 更多