{"record":{"id":"5601d4d753339db0","repo":"zhisheng17/flink-learning","slug":"high-availability-should-be-enabled-when-starting","errorCode":null,"errorMessage":"High availability should be enabled when starting standby JobManagers.","messagePattern":"High availability should be enabled when starting standby JobManagers\\.","errorType":"validation","errorClass":"IllegalConfigurationException","httpStatus":null,"severity":"error","filePath":"flink-learning-k8s/flink-k8s/src/main/java/org/apache/flink/kubernetes/kubeclient/parameters/KubernetesJobManagerParameters.java","lineNumber":167,"sourceCode":"\tpublic KubernetesConfigOptions.ServiceExposedType getRestServiceExposedType() {\n\t\treturn flinkConfig.get(KubernetesConfigOptions.REST_SERVICE_EXPOSED_TYPE);\n\t}\n\n\tpublic boolean isInternalServiceEnabled() {\n\t\treturn !HighAvailabilityMode.isHighAvailabilityModeActivated(flinkConfig);\n\t}\n\n\tpublic int getReplicas() {\n\t\tfinal int replicas =\n\t\t\tflinkConfig.get(KubernetesConfigOptions.KUBERNETES_JOBMANAGER_REPLICAS);\n\t\tif (replicas < 1) {\n\t\t\tthrow new IllegalConfigurationException(\n\t\t\t\tString.format(\n\t\t\t\t\t\"'%s' should not be configured less than one.\",\n\t\t\t\t\tKubernetesConfigOptions.KUBERNETES_JOBMANAGER_REPLICAS.key()));\n\t\t} else if (replicas > 1\n\t\t\t&& !HighAvailabilityMode.isHighAvailabilityModeActivated(flinkConfig)) {\n\t\t\tthrow new IllegalConfigurationException(\n\t\t\t\t\"High availability should be enabled when starting standby JobManagers.\");\n\t\t}\n\t\treturn replicas;\n\t}\n}\n","sourceCodeStart":149,"sourceCodeEnd":173,"githubUrl":"https://github.com/zhisheng17/flink-learning/blob/d731cee7618021be56d132cc925102ffff8d75e6/flink-learning-k8s/flink-k8s/src/main/java/org/apache/flink/kubernetes/kubeclient/parameters/KubernetesJobManagerParameters.java#L149-L173","documentation":"getReplicas additionally rejects kubernetes.jobmanager.replicas > 1 when high availability is not activated. Multiple JobManager replicas only make sense with HA (leader election via Kubernetes/Kubernetes ConfigMap or ZooKeeper); without it standby JobManagers would be useless or conflicting, so the library refuses to start them.","triggerScenarios":"Configuring kubernetes.jobmanager.replicas >= 2 without setting high-availability to Kubernetes (or ZooKeeper), e.g. -Dkubernetes.jobmanager.replicas=3 without high-availability: org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactory.","commonSituations":"Users enabling replicas for fault tolerance but forgetting HA setup, copying HA cluster configs partially, or enabling HA with the wrong mode value that isHighAvailabilityModeActivated does not recognize (e.g. 'NONE').","solutions":["Enable HA: high-availability: org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactory plus storage path settings (high-availability.storageDir).","If you don't want HA, set kubernetes.jobmanager.replicas back to 1.","Verify high-availability mode is recognized: check HighAvailabilityMode.isHighAvailabilityModeActivated over your effective config (ZOOKEEPER or FACTORY_CLASS set)."],"exampleFix":"// before\nkubernetes.jobmanager.replicas: 2\n// after\nhigh-availability: org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactory\nhigh-availability.storageDir: s3://bucket/flink/ha\nkubernetes.jobmanager.replicas: 2","handlingStrategy":"validation","validationCode":"int replicas = flinkConfig.get(KubernetesConfigOptions.KUBERNETES_JOBMANAGER_REPLICAS);\nboolean ha = HighAvailabilityMode.isHighAvailabilityModeActivated(flinkConfig);\nif (replicas > 1 && !ha) {\n    throw new IllegalArgumentException(\"replicas>1 requires high-availability to be enabled\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    int replicas = jmParameters.getReplicas();\n} catch (IllegalConfigurationException e) {\n    LOG.error(\"Enable HA or reduce replicas: {}\", e.getMessage());\n}","preventionTips":["Whenever raising jobmanager.replicas above 1, also configure high-availability and high-availability.storageDir.","Keep HA and replica settings in the same config template so they change together.","Validate HA mode is one Flink recognizes (factory class set, not 'NONE')."],"tags":["kubernetes","jobmanager","high-availability"],"backgroundTag":"conflicting-config-options","analyzedSha":"d731cee7618021be56d132cc925102ffff8d75e6","analyzedAt":"2026-09-06T05:35:08.496Z","contentChangedAt":"2026-09-06T05:35:08.496Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}