使用新的kafka客户端获取旧kafka发布的主题的分区信息时超时

时间:2017-06-27 18:05:05

标签: java apache-kafka kafka-consumer-api

我有一个使用kafka client 2.11: 0.10.2.1的小型Java spark服务。

以下是我阅读从最新Kafka版本发布的主题时工作正常的代码:

    Properties props = new Properties();
    props.put(org.apache.kafka.clients.producer.ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, producerConfig.getBrokerConnectionString());
    props.put(org.apache.kafka.clients.producer.ProducerConfig.ACKS_CONFIG, "all");
    props.put(org.apache.kafka.clients.producer.ProducerConfig.RETRIES_CONFIG, producerConfig.getRetry());
    props.put(org.apache.kafka.clients.producer.ProducerConfig.BATCH_SIZE_CONFIG, producerConfig.getBatchSize());
    props.put(org.apache.kafka.clients.producer.ProducerConfig.LINGER_MS_CONFIG, producerConfig.getLingerTimeInMs());
    props.put(org.apache.kafka.clients.producer.ProducerConfig.REQUEST_TIMEOUT_MS_CONFIG, producerConfig.getRequestTimeout());
    props.put(org.apache.kafka.clients.producer.ProducerConfig.MAX_BLOCK_MS_CONFIG, producerConfig.getMaxBlockMS());
    props.put(org.apache.kafka.clients.producer.ProducerConfig.CONNECTIONS_MAX_IDLE_MS_CONFIG, producerConfig.getMaxIdleTime());
    props.put(org.apache.kafka.clients.producer.ProducerConfig.BUFFER_MEMORY_CONFIG, maxBytesInBuffer / producerConfig.getProducersCount());
    props.put(org.apache.kafka.clients.producer.ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
    props.put(org.apache.kafka.clients.producer.ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.ByteArraySerializer");
    producers = new Producer[1];
    producers[0] = new KafkaProducer<>(props);
    producers[0].partitionsFor("mYTopic").size(); 

现有Kafka主题,其中kafka版本为0.8.2.x 。我也希望使用相同的代码。但是这段代码在最后一行(partitionsFor)中给出了Kafka发布的0.8.2.x版主题的超时。在这方面的任何帮助将不胜感激。

简而言之:Kafka主题(由0.8.2.x发布)无法通过0.10.2.1客户端阅读

1 个答案:

答案 0 :(得分:0)

一般而言,经纪人在向客户方面向后兼容,但客户在经纪方面并不向后兼容。最新版本略有放宽,但仍然适用于年龄超过0.10的经纪商。

http://kafka.apache.org/documentation.html#upgrade

  

从版本0.10.2开始,Java客户端(生产者和消费者)已获得与旧代理进行通信的能力。版本0.11.0客户端可以与版本0.10.0或更新的代理进行通信。但是,如果您的代理超过0.10.0,则必须先升级Kafka群集中的所有代理,然后再升级客户端。版本0.11.0经纪商支持0.8.x和更新的客户。