Meaning#

The Kafka Connect cluster is running but reports zero connectors, meaning no Debezium CDC source connector is deployed or running — CDC for the environment may be unconfigured or all connectors were removed. Fires when:

max(kafka_connect_worker_metrics_connector_count{namespace="safetywing-<env>-infra"}) == 0

for: 15m, severity ticket, tier component.

Impact#

No change capture is happening at all in this environment: no MySQL changes flow from MOCO MySQL into Kafka. Downstream consumers (search indices, mirror/derived tables, event-driven flows) receive nothing new. For a freshly provisioned env this may be expected during bring-up; for an established env it means CDC is silently broken.

Diagnosis#

Check whether any KafkaConnector CRs exist and what state they are in.

kubectl config use-context hetzner

kubectl get kafkaconnect,kafkaconnector -n safetywing-<env>-infra

# If connectors exist but report 0, inspect status/conditions
kubectl get kafkaconnector <name> -n safetywing-<env>-infra -o yaml   # status.conditions / tasksMax

Confirm whether Connect itself sees any connectors via the REST API.

kubectl get pods -n safetywing-<env>-infra -l strimzi.io/kind=KafkaConnect
kubectl exec -n safetywing-<env>-infra <connect-pod> -- \
  curl -s localhost:8083/connectors | jq

Check operator logs if KafkaConnector CRs exist but aren’t being reconciled into Connect.

kubectl logs -n safetywing-<env>-infra <connect-pod> --tail=200

Confirm the metric in Prometheus (prom-ep.hetzner.safetywing.dev).

max(kafka_connect_worker_metrics_connector_count{namespace="safetywing-<env>-infra"})

Mitigation#

  1. If no KafkaConnector CRs exist, the kafka-cdc chart connector definitions were never applied or were pruned — check the env’s ArgoCD Application is Synced and Healthy, and that connector values are present in the chart.

  2. If CRs exist but Connect shows zero connectors, ensure use-connector-resources is enabled on the KafkaConnect CR (Strimzi only manages KafkaConnector CRs when annotated strimzi.io/use-connector-resources: "true"):

    kubectl get kafkaconnect -n safetywing-<env>-infra -o jsonpath='{.items[0].metadata.annotations}{"\n"}'
  3. Force re-reconciliation of a connector that exists but isn’t loading:

    kubectl annotate kafkaconnector <name> -n safetywing-<env>-infra \
      strimzi.io/restart="true" --overwrite
  4. If a connector failed to instantiate (e.g. bad Debezium config or missing source DB), verify MOCO MySQL connectivity/credentials in the same namespace and check connector status conditions for the error.

  5. Common root causes: env still mid-provisioning, ArgoCD app not synced, missing use-connector-resources annotation, deleted connector CRs, or connector creation rejected due to invalid config.

References#