我有一个使用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客户端阅读
答案 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和更新的客户。