我正在使用简单的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()
无效?
答案 0 :(得分:0)
我遇到了同样的问题。 我使用的是kafka_2.12 jar版本,当我将其降级到kafka_2.11时可以使用。