【问题标题】:Timeout when getting partition info for topic published by older kafka using new kafka client使用新的 kafka 客户端获取旧版 kafka 发布的主题的分区信息时超时
【发布时间】:2017-07-03 00:05:43
【问题描述】:

我有一个使用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 客户端读取

【问题讨论】:

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


【解决方案1】:

一般而言,代理相对于客户端向后兼容,但客户端相对于代理不向后兼容。最新版本稍微放宽了这一点,但仍然适用于 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 和更新的客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多