2016-11-10 1 views
3

Kafka console consumer는에 연결하기 위해 사육사 인스턴스를 지정하도록 요구하는 것 같다카프카 연결은 언제 ZooKeeper 설정이 필요합니까?

./kafka-console-consumer.sh --zookeeper myzk.example.com:2181 --topic mytopic 

그러나 자바 API를 통해 직접 카프카 브로커에 연결을 명확하게 할 수있다 :

public class KafkaClient { 
    public static void main(String[] args) { 

    String topic = "mytopic"; 

    Properties props = new Properties(); 
    props.put("bootstrap.servers", "kafka.example.com:9092"); 
    props.put("acks", "all"); 
    props.put("retries", 0); 
    props.put("batch.size", 16384); 
    props.put("linger.ms", 1); 
    props.put("buffer.memory", 33554432); 
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 

    Producer<String, String> producer = new KafkaProducer<>(props); 

    Callback cb = new Callback() { 
     @Override 
     void onCompletion(RecordMetadata rdata, Exception exc) { 
      if(exc) { 
       throw exc; 
      } 
     } 
    } 

    producer.send(new ProducerRecord<String, String>(topic, 'somekey', 'someval'), cb); 
    producer.close(); 
    } 
} 

인가 ZK 노드를 지정하지 않고 소비자를 운영 할 수있는 방법이 있습니까? 그렇지 않다면, 왜?

답변

4

이것은 사용중인 소비자 API의 버전에 따라 다릅니다. 최신 Kafka 릴리스 0.10.1부터는 브로커를 직접 대상으로하는 새로운 API가 콘솔 사용자가 사용하는 기본값입니다. 0.10.1 이전의 버전은 Zookeeper를 타겟팅하는 이전 API를 기본으로하지만 명령과 함께 --new-consumer--bootstrap-server someBroker:9092과 같은 매개 변수를 지정하여 콘솔 소비자에 대한 새 소비자 API를 사용하도록 설정할 수 있습니다.