2016-10-17 2 views
0

카프카에 간단한 제작자 응용 프로그램을 올바르게 작성하는 방법을 찾으려고합니다.카프카 API : java.io.IOException : 주소를 해석 할 수 없습니다 : 357d78957cf5 : 9092

1) 0.10.0.1을 사용하지 말아야한다고 말해주십시오. 완전히 고민하고 있습니다.

내가 아파치 위키에서 발견이 예는 그래서 내가 사용하고 무엇을 그것은 0.10 http://kafka.apache.org/documentation#producerconfigs

완전히 다르다 0.8 https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+Producer+Example

근무 : "org.apache.kafka"% "kafka_2 .10 "%"0.10.0.1 ",

분명히 알려진 몇 가지 문제점이 있기 때문에 나는이 최신 카프카 라이브러리에 대해 매우 나쁘다고 생각합니다. 런타임에는 일부 구성에 대한 경고 목록이 알려진 구성이 아니라는 것을 보여줍니다. 하지만 앱을 제공하지 않으면 앱이 실행되지 않습니다. github에서 사람들은 이런 종류의 문제를 확인했습니다.

2) 정직하게도 문서가 옳다면 제 코드는 매우 간단합니다.

val props = new Properties() 
    props.put("bootstrap.servers", "192.168.99.100:9092"); 
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer") 
    props.put("key.deserializer","org.apache.kafka.common.serialization.StringDeserializer"); 
    props.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer"); 
    props.put("value.deserializer","org.apache.kafka.common.serialization.StringDeserializer"); 
    props.put("producer.type", "async") 
    props.put("advertised.listeners", "192.168.99.100:32777") 

    val producer = new KafkaProducer[String, String](props) 
    val t = System.currentTimeMillis() 
    val runtime = new Date().getTime(); 
    val msg = runtime + ", hello world"; 
    val message = new ProducerRecord[String, String](topic, null, msg) 
    producer.send(message); 

나는 사육사 (192.168.99.100:32777)와 카프카 (192.168.99.100:9092)을위한 2 개 개의 분리 도커 컨테이너를 실행하고 있습니다. 설정이 작동합니다. 나는 카프카 (Kafka) 명령 줄을 사용하여 생산자와 소비자를 적절하게 만들 수 있습니다. 그러나, 내 자신의 클라이언트를 작성하려고 노력하지 않습니다.

먼저 자신의 문서는 advertised.listeners이 필요하거나 ProducerConfig의 일부라고 말하지 않습니다. 하지만이 기능이 없으면이 예외가 발생했습니다. "노드를 사용할 수 없으므로 메타 데이터 요청을 보내지 않음". (아파치 문서에 따르면, "advertised.host.name이"사용되지 않았기 때문에) 나는 "advertised.listeners"를 추가하면 cann't connect to kafka server

: 그래서 나는이 페이지를 발견했다. 이 무한 예외가 발생했습니다 : "java.io.IOException : 주소를 해결할 수 없습니다 : 357d78957cf5 : 9092"

정직하게 그 주소의 출처를 모르겠습니다. 터미널에서는 명확하게 내 고정 표시기 컨테이너 IP 사용하고 보여줍니다

enter image description here

을 그리고 내가 찾은이 : Kafka 0.8.2.2 - Unable to publish messages 나는 내 문제에 대한 정답이라고 생각하지만, 난 정말 모르는 내가 이 문제를 해결하기 위해해야만합니다.

답변

0

제작자를 사용하기 전에 다음과 같은 배경을 유용하게 사용할 수 있습니다. 0.8.x의 이전 제작자 (Scala)는 이미 0.9.0부터 제거되었습니다.

따라서 새 제작자 (Java)를 사용 중입니다. Kafka 개발팀은 제작자 또는 소비자와 상관없이 모든 클라이언트가 Zookeeper 종속성을 제거하기로 결정했습니다. 따라서 ZK 설정을 더 이상 설정하지 않아야합니다. 게다가 "advertised.listeners"가 ZK 서비스를 가리 키도록하는 것은 올바르지 않습니다.

"advertised.listeners"는 일반적으로 하나 이상의 NIC가있는 IaaS 시스템 용입니다.여기에 카프카 의사가 말한 바가 있습니다 :

IaaS 환경에서 이것은 브로커가 바인드하는 인터페이스와 다를 수 있습니다. 이 값을 설정하지 않으면 listeners 값이 사용됩니다.

클라이언트가 공용 NIC를 바인드하도록 설정하고 브로커의 내부 통신이 개인 NIC를 바인드하도록 설정할 수 있습니다.

+0

매우 유용한 배경. 그 덕분입니다. 그러나 그것은 내 문제를 해결하지 못합니다. "advertised.listeners"를 설정하지 않고이 예외를 발견했습니다. "노드를 사용할 수 없으므로 메타 데이터 요청 전송을 포기하십시오." – sowen

+0

이 예외가 나타나는 이유는 클러스터에 사용 가능한 노드가 없거나 클라이언트가 브로커에 연결하지 못했기 때문입니다. 리스너 설정을 확인하십시오. 게다가 서버 설정과 클라이언트 설정에 호스트 이름이나 IP를 사용해야합니다. 그들을 섞지 마십시오. – amethystic

+0

미안하지만, 나는이 주제에서 매우 새롭다. 그래서 나는 아직도 매우 혼란 스럽다. 어떤 노드를 참조하고 있습니까? 도커 컨테이너 IP? 너무 복잡해지기를 원치 않으므로 맹독류에 무리가 없으며 하나의 컨테이너 만 실행됩니다. 카프카 컨테이너 안에 수동으로 주제를 만들었습니다. 어떻게 "호스트 이름 또는 IP"를 설정하고 서버 설정이 무엇이며 클라이언트 설정은 무엇입니까? 감사! – sowen

관련 문제