NoReplicaOnlineException: No replica for partition

问题场景:
每次都是在选Leader的时候发生,并且都是上午8点,并且不知道什么时间它会自己修复,所以会导致间隔几个或十几个小时才能恢复,影响业务的监控。

kafka.common.NoReplicaOnlineException: No replica for partition [app_exp,1] is alive. Live brokers are: [Set(1, 2, 3)], Assign
ed replicas are: [List(4)]
at kafka.controller.OfflinePartitionLeaderSelector.selectLeader(PartitionLeaderSelector.scala:73)
at kafka.controller.PartitionStateMachine.electLeaderForPartition(PartitionStateMachine.scala:344)
at kafka.controller.PartitionStateMachine.kafkacontrollerPartitionStateMachine

handleStateChange(PartitionStateMachine.scala:205)atkafka.controller.PartitionStateMachine
anonfuntriggerOnlinePartitionStateChange3.apply(PartitionStateMachine.scala:120
)
at kafka.controller.PartitionStateMachine
anonfun$triggerOnlinePartitionStateChange$3.apply(PartitionStateMachine.scala:117)atscala.collection.TraversableLike$WithFilter
anonfunforeach1.apply(TraversableLike.scala:733)
at scala.collection.mutable.HashMap
anonfun$foreach$1.apply(HashMap.scala:99)atscala.collection.mutable.HashMap
anonfunforeach1.apply(HashMap.scala:99)
at scala.collection.mutable.HashTableclass.foreachEntry(HashTable.scala:230)atscala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40)atscala.collection.mutable.HashMap.foreach(HashMap.scala:99)atscala.collection.TraversableLikeWithFilter.foreach(TraversableLike.scala:732)
at kafka.controller.PartitionStateMachine.triggerOnlinePartitionStateChange(PartitionStateMachine.scala:117)
at kafka.controller.PartitionStateMachine.startup(PartitionStateMachine.scala:70)
at kafka.controller.KafkaController.onControllerFailover(KafkaController.scala:336)
at kafka.controller.KafkaController$$anonfun$1.apply$mcV$sp(KafkaController.scala:167)
at kafka.server.ZookeeperLeaderElector.elect(ZookeeperLeaderElector.scala:84)
### 三级标题:Kubernetes 创建 ReplicaSet 报错 no matches for kind ReplicaSet in version v1 的原因与解决方法 Kubernetes 创建 ReplicaSet 时出现 `no matches for kind ReplicaSet in version v1` 错误,通常是因为使用的 `apiVersion` 不正确。ReplicaSet 资源并不属于 `v1` 核心版本,而是定义在 `apps/v1` 中。Kubernetes 在 1.9 版本之后将 ReplicaSet、Deployment 等资源从 `extensions/v1beta1` 和 `apps/v1beta1` 迁移到了 `apps/v1`,旧版本的 API 已被弃用[^2]。 因此,若在 YAML 文件中使用了 `apiVersion: v1` 并尝试定义 `kind: ReplicaSet`,Kubernetes API 会提示找不到该资源类型。 ### 正确的配置示例 以下是定义 ReplicaSet 的正确 YAML 示例,使用了 `apps/v1` 的 API 版本: ```yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx-replicaset labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.21 ports: - containerPort: 80 ``` ### 验证与创建 完成配置文件的修改后,可以使用以下命令进行创建: ```bash kubectl apply -f replicaset.yaml ``` 若希望在创建前验证配置文件是否符合当前集群的 API 要求,可使用以下命令进行验证: ```bash kubectl apply --dry-run=client -f replicaset.yaml ``` ### 升级后资源定义适配建议 若集群是从低版本升级而来,且存在大量使用旧 API 版本的资源文件,建议使用 Helm 插件 `helm-mapkubeapis` 来自动转换 API 版本。该插件能识别并更新资源定义中的 `apiVersion` 字段,以适配新版本 Kubernetes 的要求[^4]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值