Kafka 消费者需要很长的轮询持续时间

Rol*_*our 6 java apache-kafka kafka-consumer-api

使用具有以下配置的 Kafka/Java:

props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, this.bootstrapServers);
props.put(ConsumerConfig.GROUP_ID_CONFIG, this.groupId);
props.put(ConsumerConfig.CLIENT_ID_CONFIG, UUID.randomUUID().toString());
props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, this.maxPollRecords);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, keyDeserializerClass.getName());
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, valueDeserializerClass.getName());
props.put(ConsumerConfig.ISOLATION_LEVEL_CONFIG, IsolationLevel.READ_COMMITTED.toString().toLowerCase(Locale.ROOT));
Run Code Online (Sandbox Code Playgroud)

我有一个简单的轮询循环,如:

consumer.poll(Duration.ofMillis(200));
Run Code Online (Sandbox Code Playgroud)

我注意到一些奇怪的行为。持续时间为 0 时,它不返回任何结果。在本地,持续时间为 200 毫秒,我得到了一些结果,但在另一个生产环境中,它从不返回结果,至少需要 1 秒。

在我的理解中, poll 方法会等到它找到至少一个结果。持续时间为 0 时,至少应该返回已经到达的结果,而不应该总是不返回任何结果。

解释是什么?

JR *_*bkr 0

主要问题是您可能没有存储poll().

ConsumerRecords records = consumer.poll(10000);

您需要将结果存储poll在 中ConsumerRecords您可以在此处找到示例代码片段