默认情况下,kafka使用一个目录来保存日志。为了提高性能,建议将更多磁盘安装到代理,并将每个磁盘分配给一个目录,然后输入server.properties以log.dirs=逗号分隔的目录列表。文档称,分区将以循环方式分布在目录中。据我现在了解,对于新主题来说也是如此。
我想将已创建主题的一半分区分配给新创建的分区,log.dir同时将另一半保留在原处 - 有支持的方法吗?
方法 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。集群/网络上的负载将会减少。
| 归档时间: |
|
| 查看次数: |
4840 次 |
| 最近记录: |