政务公开网站建设情况网站怎样建设
2026/3/28 23:09:04 网站建设 项目流程
政务公开网站建设情况,网站怎样建设,长沙旅游攻略景点必去,平台网站建设报价Kafka Broker 端用于管理日志目录#xff08;Log Directory#xff09;迁移和查询 的核心逻辑#xff0c;分别对应两个关键 API#xff1a; alterReplicaLogDirs(...)#xff1a;实现 KIP-113 中的 ALTER_REPLICA_LOG_DIRS 请求#xff0c;用于将某个分区的日志从一个磁盘…KafkaBroker 端用于管理日志目录Log Directory迁移和查询的核心逻辑分别对应两个关键 APIalterReplicaLogDirs(...)实现KIP-113中的ALTER_REPLICA_LOG_DIRS请求用于将某个分区的日志从一个磁盘目录迁移到另一个。describeLogDirs(...)实现DESCRIBE_LOG_DIRS请求用于查询每个日志目录中各分区的存储状态大小、滞后等。下面我将从设计目标、执行流程、关键机制、典型场景四个维度帮你深入理解。 一、为什么需要这些功能背景Kafka 支持配置多个log.dirs例如挂载多块 SSD但默认情况下分区在创建时会随机分配到一个在线目录后续无法更改其物理位置这会导致问题某块磁盘快满了但其他磁盘空闲需要将热分区迁移到更快的 NVMe 盘磁盘故障后恢复需重新平衡数据✅KIP-113 引入了“动态日志目录迁移”能力允许管理员在线迁移分区日志。 二、alterReplicaLogDirs迁移日志目录 方法作用将指定分区TopicPartition的日志文件从当前目录迁移到目标目录destinationDir。 执行流程详解Step 1️⃣参数校验if(Log.logFutureDirName(...).size255)→ InvalidTopicExceptionif(!logManager.isLogDirOnline(destinationDir))→ KafkaStorageException防止因 topic 名过长导致文件名超限Linux 文件名限制目标目录必须处于online 状态即未被标记为 offlineStep 2️⃣检查分区当前状态getPartition(topicPartition)match{caseOnline(partition)...caseOfflinethrowcaseNone// 分区尚未创建比如刚创建 topic但还没选举 Leader}关键点分区可能还未创建如果 Broker 还没收到该分区的LeaderAndIsrRequest即还没成为副本则不能立即迁移但可以预设“偏好目录”logManager.maybeUpdatePreferredLogDir(topicPartition,destinationDir)✅ 这样当后续创建分区时会直接在destinationDir中创建日志Step 3️⃣强制获取分区否则报错valpartitiongetPartitionOrException(topicPartition)partition.localLogOrException// 确保本地有副本如果本地根本没有这个副本比如不是 ISR 成员抛出NotLeaderOrFollowerException兼容性处理将其映射为Errors.REPLICA_NOT_AVAILABLEStep 4️⃣启动迁移核心逻辑if(partition.maybeCreateFutureReplica(destinationDir,...)){valfutureLogfutureLocalLogOrException(...)logManager.abortAndPauseCleaning(topicPartition)// 暂停 Log CompactionreplicaAlterLogDirsManager.addFetcherForPartitions(...)} “Future Replica” 机制KIP-113 核心Kafka 不直接移动现有日志风险高、阻塞写入而是在destinationDir中创建一个新的“未来日志”future log启动一个特殊的 Fetcher 线程ReplicaAlterDirThread该线程从当前日志current log持续拉取数据追加到 future log当 future log 追上 current log 后原子切换指针partition.setLog(futureLog)删除旧日志 这类似于副本同步机制但源和目标都在同一个 Broker 上⚠️ 特殊处理取消正在进行的迁移if(partition.futureReplicaDirChanged(destinationDir)){replicaAlterLogDirsManager.removeFetcherForPartitions(...)partition.removeFutureLocalReplica()}如果用户多次调用alterReplicaLogDirs指向不同目录先取消旧的迁移任务避免资源浪费 三、describeLogDirs查询日志目录状态 方法作用返回每个log.dir中包含的分区信息包括当前日志current log大小 offset lag未来日志future log大小 offset lag如果正在迁移 返回结构示例简化[{logDir:/disk1/kafka,errorCode:0,topics:[{name:orders,partitions:[{partitionIndex:0,partitionSize:1024,offsetLag:0,isFutureKey:false},{partitionIndex:0,partitionSize:800,offsetLag:224,isFutureKey:true}]}]},{logDir:/disk2/kafka,errorCode:0,topics:[]}] 关键逻辑vallogsByDirlogManager.allLogs.groupBy(_.parentDir)遍历所有日志包括 current 和 future按目录分组.setOffsetLag(getLogEndOffsetLag(...))offsetLagLeader LEO - 当前日志 LEO对 future log 来说lag 越小表示越接近完成迁移✅ 管理员可通过此接口监控迁移进度 四、关键设计思想总结机制目的Future Replica实现无停机、安全的日志迁移Fetcher-based Copy复用现有副本同步逻辑保证一致性Preferred Log Dir支持“预设目录”适用于尚未创建的分区Pause Cleaning迁移期间暂停 Log Compaction避免冲突Describe with Lag提供可观测性便于运维 五、典型使用场景场景 1磁盘空间不均衡# 查看各目录使用情况kafka-log-dirs.sh --describe --bootstrap-server localhost:9092 --dirs /disk1,/disk2# 将大分区迁移到空闲磁盘kafka-reassign-partitions.sh --alter-replica-log-dirs...场景 2升级存储介质将 HDD 上的分区迁移到 SSD无需重启 Broker不影响生产者/消费者场景 3Topic 创建前指定目录先调用alterReplicaLogDirs设置偏好目录再创建 Topic → 自动在指定目录创建日志❗ 六、注意事项 限制只能迁移本地副本不能迁移非本 Broker 的分区必须是 Leader 或 Follower目标目录必须 online如果磁盘故障被标记为 offline迁移会失败迁移期间占用额外磁盘空间current future 日志同时存在直到切换完成不支持内部主题如__consumer_offsets虽然代码没显式禁止但通常不建议操作topic 名长度限制因 future log 文件名格式为topic-partition_dir过长会超 255 字符✅ 总结这两段代码体现了 Kafka面向运维友好、高可用、可扩展的设计理念alterReplicaLogDirs通过“未来副本 异步复制”实现安全在线迁移describeLogDirs提供细粒度存储视图支撑自动化运维它们共同构成了 Kafka存储层弹性调度的基础是大规模集群管理的关键能力。如果你正在做磁盘扩容、性能调优、容量规划这些接口非常实用。需要我进一步解释Future Replica 的切换时机或ReplicaAlterDirThread 的工作细节吗

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询