[apache-kafka] 콘솔 생산자에서 리더를 사용할 수 없음

Kafka를 사용하려고합니다.
모든 구성이 올바르게 완료되었지만 콘솔에서 메시지를 생성하려고하면 다음 오류가 계속 발생합니다.

WARN Error while fetching metadata with correlation id 39 :
     {4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

카프카 버전 : 2.11-0.9.0.0



답변

advertised.host.name설정 과 관련이있을 수 있습니다 server.properties.

무엇 일어날 수있는 당신의 프로듀서, 리더는 주어진 파티션 누구인지 찾기 위해 파악하려고하는 것입니다 advertised.host.nameadvertised.port연결하고 시도합니다. 이러한 설정이 올바르게 구성되지 않으면 리더를 사용할 수 없다고 생각할 수 있습니다.


답변

여기에 나열된 모든 권장 사항을 시도했습니다. 나를 위해 일한 것은 가서 server.properties추가하는 것이 었습니다 .

port = 9092
advertised.host.name = localhost

남겨 listenersadvertised_listeners주석.


답변

나를 위해 해결 한 것은 다음과 같이 청취자를 설정하는 것입니다.

advertised.listeners = PLAINTEXT://my.public.ip:9092
listeners = PLAINTEXT://0.0.0.0:9092

이로 인해 KAFKA 브로커는 모든 인터페이스를 청취합니다.


답변

도커 컨테이너로 kafka를 실행하고 비슷한 메시지가 로그에 넘쳐났습니다.
그리고 KAFKA_ADVERTISED_HOST_NAME‘kafka’로 설정되었습니다.

필자의 경우 오류의 원인 /etc/hosts은 ‘kafka’컨테이너 자체에서 ‘kafka’에 대한 누락 된 레코드였습니다.
예를 들어 ping kafka‘kafka’컨테이너 내부 에서 실행 하면 실패합니다.ping: bad address 'kafka'

Docker와 관련 하여이 문제는 hostname컨테이너 를 지정하여 해결됩니다 .

그것을 달성하기위한 옵션 :


답변

kafka_2.12-0.10.2.1을 사용하고 있습니다.

vi config/server.properties

아래 줄을 추가하십시오 :

listeners=PLAINTEXT://localhost:9092
  • advertised.listeners는 std listener 속성에서 값을 가져 오기 때문에 변경할 필요가 없습니다.

브로커가 생산자와 소비자에게 광고 할 호스트 이름과 포트. 설정하지 않으면

  • 구성된 경우 “리스너”값을 사용합니다.

그렇지 않으면에서 반환 된 값을 사용합니다 java.net.InetAddress.getCanonicalHostName().

Kafka 브로커를 중지하십시오.

bin/kafka-server-stop.sh

브로커 재시작 :

bin/kafka-server-start.sh -daemon config/server.properties

이제 아무 문제가 없어야합니다.


답변

Kafka와 함께 일하면서 지난 2 주 동안 같은 문제를 목격했으며 그 이후로이 Stackoverflow의 게시물을 읽었습니다.

2 주 동안의 분석 후에 나는 존재하지 않는 주제에 대한 메시지를 생성하려고 할 때 이것이 발생 한다고 추론했습니다 .

필자의 경우 결과는 Kafka가 오류 메시지를 다시 보내지 만 동시에 존재하지 않는 주제를 만듭니다. 따라서이 이벤트 이후에 해당 주제에 대한 메시지를 다시 생성하려고하면 작성된 주제로 더 이상 오류가 표시되지 않습니다.

참고 : 특정 Kafka 설치가 동일한 주제가 없을 때 주제를 자동으로 생성하도록 구성되었을 수 있습니다. 그것은 내 경우에 주제를 재설정 한 후 모든 주제에 대해 한 번만 문제를 볼 수있는 이유를 설명해야합니다. 구성이 다를 수 있으며이 경우 동일한 오류가 계속 발생합니다.

문안 인사,

루카 탐 펠리니


답변

아직 생성되지 않은 주제를 구독하려고 할 때이 메시지가 나타납니다. 우리는 일반적으로 배포 된 환경에서 선험적으로 생성 할 주제에 의존하지만, 매번 깨끗하게 시작되는 dockerized kafka 인스턴스에 대해 실행되는 구성 요소 테스트가 있습니다.

이 경우 테스트 설정에서 AdminUtils 를 사용 하여 주제가 존재하는지 확인하고 존재하지 않는 경우 작성합니다. AdminUtils 설정에 대한 자세한 내용은이 다른 스택 오버 플로우를 참조하십시오 .