2016-11-10 18 views
3

Kafka console consumer、接続しZooKeeperのインスタンスを指定する必要のようです:カフカ接続はいつZooKeeper設定が必要ですか?

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

しかし、Java 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を使用するように設定できます。

関連する問題