Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡连接何时需要ZooKeeper配置?_Java_Console_Apache Kafka_Apache Zookeeper - Fatal编程技术网

Java 卡夫卡连接何时需要ZooKeeper配置?

Java 卡夫卡连接何时需要ZooKeeper配置?,java,console,apache-kafka,apache-zookeeper,Java,Console,Apache Kafka,Apache Zookeeper,似乎需要您指定要连接到的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

似乎需要您指定要连接到的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();
  }
}
公共类KafkaClient{
公共静态void main(字符串[]args){
字符串topic=“mytopic”;
Properties props=新属性();
put(“bootstrap.servers”,“kafka.example.com:9092”);
道具放置(“阿克斯”、“全部”);
道具放置(“重试”,0);
道具放置(“批量大小”,16384);
道具放置(“玲儿小姐”,1);
props.put(“buffer.memory”,33554432);
put(“key.serializer”、“org.apache.kafka.common.serialization.StringSerializer”);
put(“value.serializer”、“org.apache.kafka.common.serialization.StringSerializer”);
制作人=新卡夫卡制作人(道具);
回调cb=新回调(){
@凌驾
完成时无效(记录元数据rdata,异常exc){
if(exc){
抛出exc;
}
}
}
producer.send(新的ProducerRecord(主题'somekey','someval'),cb);
producer.close();
}
}

有没有一种方法可以在不指定ZK节点的情况下运行使用者?如果没有,原因是什么?

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