KafkaStream.ConsumerIterator.hasNext()会无限期地阻塞

时间:2019-05-15 01:28:18

标签: java apache-kafka

最近,我们开始将Kafka堆栈从0.8.2版本升级到2.2.0。之前我们也使用过Apache Kafka,但现在我们正尝试迁移到Confluent Platform。升级后,我们无需更改任何代码(我们使用的是kafka_2.9.2版本0.8.1.1,而kafka-clients版本为0.8.1.1)。

除KafkaStream之外,所有使用KafkaProducer写入Kafka的代码都可以正常工作。当我尝试使用KafkaStreams从主题中读取数据时,它似乎永远处于阻塞状态。

一旦我从KafkaStreams创建一个ConsumerIterator,它将立即阻塞直到发生超时。我要去哪里错了?

我尝试将auto.offset.reset属性设置为“最小”和“最大”,并同时在另一个进程中启动了KafkaProducer以将消息写入该主题。但是KafkaStreams没用。

public static void main(String...args) {
    Properties properties = new Properties();
    properties.put("zookeeper.connect", "localhost:2181");
    properties.put("group.id", "test-group");
    properties.put("auto.offset.reset", "smallest");
    ConsumerConfig consumerConfig = new ConsumerConfig(properties);
    ConsumerConnector consumerConnector = Consumer.createJavaConsumerConnector(consumerConfig);

    Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
    topicCountMap.put("test_topic", new Integer(1));
    Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumerConnector
        .createMessageStreams(topicCountMap);
    KafkaStream<byte[], byte[]> stream = consumerMap.get("jobs_google_api").get(0);
    ConsumerIterator<byte[], byte[]> it = stream.iterator();
    List<String> messages = new ArrayList<>();
    while (it.hasNext())
      messages.add(new String(it.next().message()));
    System.out.println(messages);
  }```

0 个答案:

没有答案