首页 文章

什么时候Kafka连接需要ZooKeeper配置?

提问于
浏览
3

Kafka console consumer似乎要求您指定要连接到的ZooKeeper实例:

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

但显然可以通过Java API直接连接到Kafka代理:

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();
  }
}

Is there a way to run the consumer without specifying a ZK node? If not, why?

1 回答

  • 4

    这取决于正在使用的消费者API的版本 . 从最新的Kafka版本0.10.1开始,直接针对代理的新API是控制台消费者使用的默认值 . 0.10.1之前的版本默认使用较旧的API定位Zookeeper,但可以通过使用命令指定参数(如: --new-consumer--bootstrap-server someBroker:9092 )来设置为控制台使用者使用新的使用者API .

相关问题