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

标签 apache-kafka

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

我想将我已创建主题的一半分区分配给新创建的 log.dir同时将另一半保持在原处 - 是否有支持的方法来做到这一点?

最佳答案

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 文件。

方法二:将分区目录移动到新的数据目录(不处理检查点文件)

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

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

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

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

关于apache-kafka - 如何将现有的 kafka 主题分区分散到更多目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36061426/

相关文章:

spring-boot - "spring-kafka without springboot"是什么意思

apache-kafka - Kafka Tool 可以显示实际字符串而不是常规的十六进制格式

java - 如何取回 Kafka 生产者和消费者配置(Java API)?

python - kafka-python KafkaConsumer 多分区提交偏移量

kubernetes - KafkaStreams : Error changing permissions for the directory/var/data/state-store

apache-kafka - Kafka Processor API 中的 Header 有什么用?

java - 无法从对象生成 avro 通用记录

apache-kafka - 发件箱模式 - 我们如何防止消息中继过程生成重复的消息?

apache-kafka - 即使在保留时间/大小之后,数据仍然保留在 Kafka 主题中

sql-server - Kafka Connect JDBC 源连接器不适用于 Microsoft SQL Server