로그인 이후 Kafka 메시지를 전송이 안되요

저는 Rancher Desktop에서 Helm과 Kubernetes를 사용해 단일 노드 Kafka 클러스터를 설정했습니다.
Java/Spring Boot 애플리케이션이 시작될 때 Kafka에 로그인하고 프로듀서를 시작하는 것까지는 성공하지만, 메시지를 전송하려고 하면 실패합니다.

Kafka 클러스터는 Bitnami Helm 차트를 사용해 배포했습니다.

아래는 제가 사용한 values.yaml입니다.

controller:
  replicaCount: 1
  persistence:
    size: 1Gi
  podSecurityContext:
    enabled: false
  containerSecurityContext:
    enabled: false
  resources:
    limits:
      memory: 2Gi
  automountServiceAccountToken: true

externalAccess:
  enabled: true
  service:
    type: LoadBalancer
    ports:
      external: 9094
  autoDiscovery:
    enabled: true

broker:
  podSecurityContext:
    enabled: false
  containerSecurityContext:
    enabled: false

sasl:
  client:
    users: [ "myuser" ]
    passwords: [ "mypassword" ]

rbac:
  create: true

# siehe https://github.com/bitnami/charts/issues/19522
extraConfig: |
  deleteTopicEnable=true
  auto.create.topics.enable=false
  offsets.topic.replication.factor=1
  transaction.state.log.replication.factor=1

provisioning:
  enabled: true
  topics:
    - name: heartBeat

Java 애플리케이션을 시작하면 다음과 같은 로그가 출력됩니다:

[2025-04-15 10:37:05,188] [main] severity=INFO - org.apache.kafka.clients.producer.ProducerConfig.logAll - traceid= - ProducerConfig 값들:  
    acks = -1  
    auto.include.jmx.reporter = true  
    batch.size = 16384  
    bootstrap.servers = [localhost:9094]  
    ...

org.springframework.kafka.support.serializer.JsonSerializer  
[2025-04-15 10:37:05,188] [main] severity=INFO - org.apache.kafka.common.telemetry.internals.KafkaMetricsCollector.init - traceid= - Kafka metrics collector 초기화 중  
[2025-04-15 10:37:05,198] [main] severity=INFO - org.apache.kafka.clients.producer.KafkaProducer.configureTransactionState - traceid= - [Producer clientId=producer-1] idemopotent producer 인스턴스화 완료  
[2025-04-15 10:37:05,207] [main] severity=INFO - org.apache.kafka.common.security.authenticator.AbstractLogin.login - traceid= - 로그인 성공  
[2025-04-15 10:37:05,213] [main] severity=INFO - org.apache.kafka.common.utils.AppInfoParser.<init> - traceid= - Kafka 버전: 3.8.1  
[2025-04-15 10:37:05,214] [main] severity=INFO - org.apache.kafka.common.utils.AppInfoParser.<init> - traceid= - Kafka 커밋 ID: 70d6ff42debf7e17  
[2025-04-15 10:37:05,214] [main] severity=INFO - org.apache.kafka.common.utils.AppInfoParser.<init> - traceid= - Kafka 시작 시간(ms): 1744706225213  
[2025-04-15 10:37:05,451] [kafka-producer-network-thread | producer-1] severity=INFO - org.apache.kafka.clients.Metadata.update - traceid= - [Producer clientId=producer-1] 클러스터 ID: jg0sCtb1jEoEwK8lBIlDGj  
[2025-04-15 10:37:26,496] [kafka-producer-network-thread | producer-1] severity=INFO - org.apache.kafka.clients.NetworkClient.handleDisconnections - traceid= - [Producer clientId=producer-1] 노드 0 연결 끊김  
[2025-04-15 10:37:26,497] [kafka-producer-network-thread | producer-1] severity=WARN - org.apache.kafka.clients.NetworkClient.processDisconnection - traceid= - [Producer clientId=producer-1] 노드 0 (192.168.127.2/192.168.127.2:9094) 와의 연결을 설정할 수 없습니다. 노드가 사용 불가능할 수 있습니다.  

로그인 이후에 무언가 연결을 시도합니다.

노드 0 (192.168.127.2/192.168.127.2:9094) 와의 연결을 설정할 수 없습니다. 노드가 사용 불가능할 수 있습니다.

물론 이것은 작동하지 않습니다. Kafka는 오직 localhost:9094를 통해서만 접근할 수 있기 때문입니다.
클라이언트나 Kafka가 메시지를 전송하기 위해 올바른 주소를 사용하도록 설정하려면 어떻게 해야 하나요?

values.yaml에 다음 내용을 추가하세요:

controller:
extraEnvVars:
- name: KAFKA_CFG_ADVERTISED_LISTENERS
value: PLAINTEXT://localhost:9094
- name: KAFKA_CFG_LISTENERS
value: PLAINTEXT://:9094

1 Like

두 가지 문제가 있습니다.

첫째, externalAccess 섹션에 breaking change가 발생했고,
둘째, @poisened_monkey가 지적했듯이 advertised.listeners 설정이 반드시 필요합니다.

전체 externalAccess 섹션은 아래와 같이 완전히 교체되어야 합니다:

externalAccess:
  enabled: true
  autoDiscovery:
    enabled: true
  broker:
    service:
      type: LoadBalancer
      ports:
        external: 9094
  controller:
    service:
      type: LoadBalancer
    containerPorts:
      external: 9094

defaultInitContainers:
  autoDiscovery:
    enabled: true

serviceAccount:
  create: true

rbac:
  create: true

listeners:
  advertisedListeners: CLIENT://kafka01-controller-0.kafka01-controller-headless.default.svc.cluster.local:9092,INTERNAL://kafka01-controller-0.kafka01-controller-headless.default.svc.cluster.local:9094,EXTERNAL://localhost:9094