Kafka连接何时需要ZooKeeper配置?
问题描述:
的Kafka console consumer似乎需要你指定的ZooKeeper实例连接:Kafka连接何时需要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节点的情况下运行消费者?如果不是,为什么?
答
这取决于正在使用哪个版本的使用者API。从最新的Kafka发行版0.10.1开始,直接定位代理的新API是控制台消费者使用的默认API。 0.10.1之前的版本默认为针对Zookeeper的旧API,但可以通过使用命令指定参数如--new-consumer
和--bootstrap-server someBroker:9092
来设置为为控制台使用者使用新的使用者API。