5

저는 Kafka 0.9를 처음 사용하고 Java 구현 소비자 (KafkaConsumer)에서 이상한 동작을 감지 한 일부 기능을 테스트합니다.Kafka 소비자의 poll() 메소드가 차단되었습니다.

카프카 브로커는 Ambari 외부 기계에 있습니다.

심지어 생산자를 구현하고 외부 브로커에 메시지를 보내기 시작할 수있는 이유는 소비자가 이벤트 (설문 조사)를 읽으 려 할 때 방해가됩니다.

나는 콘솔 소비자 (ambari에서 로컬로 작업 중임)를 통해 메시지를 소비 할 수 있기 때문에 제작자가 잘 작동한다고 알고 있습니다. 그러나 Java Consumer를 실행할 때 아무 일도 일어나지 않습니다.

ConsumerRecords<String, String> records = consumer.poll(100); 

시간 초과는 아무것도하지 않는다, 그런데 : 나는 그것이 poll() 라인에서 차단됩니다 것을 볼 코드를 할 수 디버깅. 0, 100 또는 1000ms를 입력해도 문제가되지 않지만이 줄에서 소비자가 차단되고 예외가 발생하지 않습니다.

나는 제로 운, 등등, 다른 속성의 모든 종류의, 같은 advertised.host.name, advertised.listener을 시도 ... 그리고.

도움을 주시면 감사하겠습니다. 미리 감사드립니다!

+0

'kafka-console-consumer.sh '를 사용하는 것과 같이 메시지를 다른 방식으로 소비 할 수 있습니까? –

+0

예, 있습니다. 앰비언스를 호스팅하는 컴퓨터에서 콘솔 소비자를 통해 메시지를 사용할 수 있습니다. –

+0

그리고 소비자를 운영하는 컴퓨터는 무엇입니까? 콘솔 소비자를 거기에 시도 했습니까? –

답변

1

소비자 코드가 실행되고있는 컴퓨터가 사육사와 연결할 수없는 이유가있을 수 있습니다. Kafka가 설치된 컴퓨터에서 동일한 소비자 코드를 실행 해 봅니다 (필자는이 소프트웨어를 사용해 보았습니다). 또한 server.properties 파일의 아래 속성을 언급하여 문제를 해결했습니다. advertised.host.name="ip address which you want to expose" // 제 경우에는 ec2 컴퓨터의 공개 IP이고 동일한 ec2에 kafka 및 사육사가 설치되어 있습니다. 위의 문은 소비자가 100 밀리 후에 시간이 의미하지 않는다 advertised.port=9092 ConsumerRecords<String, String> records = consumer.poll(100); , 그것은 폴링 기간입니다. 100 밀리 초 내에 캡처되는 모든 데이터는 레코드 컬렉션으로 읽습니다.