Kafka消费者api未能订阅主题

时间:2017-03-09 22:59:44

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

我正在使用简单的Kafka客户端API。据我所知,消费者消息有两种方式,订阅主题并为消费者分配分区。

然而,第一种方法不起作用。消费者poll()将永远挂起。它仅适用于assign

    // common config for consumer
    Map<String, Object> config = new HashMap<>();
    config.put("bootstrap.servers", bootstrap);

    config.put("group.id", KafkaTestConstants.KAFKA_GROUP);
    config.put("enable.auto.commit", "true");
    config.put("auto.offset.reset", "earliest");
    config.put("key.deserializer", StringDeserializer.class.getName());
    config.put("value.deserializer", StringDeserializer.class.getName());
    StringDeserializer deserializer = new StringDeserializer();
    KafkaConsumer<String, String> consumer = new KafkaConsumer<>(config, deserializer, deserializer);

    // subscribe does not work, poll() hangs
    consumer.subscribe(Arrays.asList(KafkaTestConstants.KAFKA_TOPIC));

以下是分配分区的工作代码。

    // assign works
    TopicPartition tp = new TopicPartition(KafkaTestConstants.KAFKA_TOPIC, 0);
    List<TopicPartition> tps = Arrays.asList(tp);
    consumer.assign(tps);

因为我想利用自动提交功能,该功能应该仅根据此post与消费者群体管理一起使用。为什么subscribe()无效?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。 我使用的是kafka_2.12 jar版本,当我将其降级到kafka_2.11时可以使用。