Java 使用消费者的Spring Kafka轮询

Java 使用消费者的Spring Kafka轮询,java,apache-kafka,spring-kafka,Java,Apache Kafka,Spring Kafka,我正在使用consumer.poll(Duration d)获取记录。在Kafka主题中,我只有10条记录用于测试,分布在6个分区中。我已经禁用了自动提交,也没有手动提交(同样仅用于测试目的)。当执行轮询时,它不会从所有分区获取数据。我需要在循环中运行民意测验以获取所有数据。我没有从默认值中重写max.poll.size或max.fetch.bytes等参数。原因可能是什么?请注意,对于给定的主题和组id,我只有这个使用者,因此我希望所有分区都分配给这个使用者 private Consumer&

我正在使用consumer.poll(Duration d)获取记录。在Kafka主题中,我只有10条记录用于测试,分布在6个分区中。我已经禁用了自动提交,也没有手动提交(同样仅用于测试目的)。当执行轮询时,它不会从所有分区获取数据。我需要在循环中运行民意测验以获取所有数据。我没有从默认值中重写max.poll.size或max.fetch.bytes等参数。原因可能是什么?请注意,对于给定的主题和组id,我只有这个使用者,因此我希望所有分区都分配给这个使用者

private Consumer<String, Object> createConsumer() {
    ConsumerFactory<String, Object> consumerFactory = deadLetterConsumerFactory();
    Consumer<String, Object> consumer = consumerFactory.createConsumer();
    consumer.subscribe(Collections.singletonList(kafkaConfigProperties.getDeadLetterTopic()));
    return consumer;
}

try {
       consumer = createConsumer();
       ConsumerRecords<String, Object> records = consumer.poll(Duration.ofMillis(5000));
       processMessages (records , .,....);
} catch (Exception e) {
       ....
} finally {
     if (consumer != null) {
          consumer.unsubscribe();
          consumer.close();
      }
}
private Consumer createConsumer(){
ConsumerFactory ConsumerFactory=deadLetterConsumerFactory();
Consumer=consumerFactory.createConsumer();
consumer.subscribe(Collections.singletonList(kafkanconfigproperties.getDeadLetterTopic());
退货消费者;
}
试一试{
consumer=createConsumer();
ConsumerRecords记录=consumer.poll(持续时间5000百万);
processMessages(记录,…);
}捕获(例外e){
....
}最后{
if(消费者!=null){
消费者。取消订阅();
consumer.close();
}
}
编辑 详情如下

ConsumerFactory<String, Object> deadLetterConsumerFactory() {
    Properties properties = new Properties();
    properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, server);
    properties.put(SCHEMA_REGISTRY_URL, url);
    properties.put(ProducerConfig.CLIENT_ID_CONFIG,
           "myid" + "-" + CONSUMER_CLIENT_ID_SEQUENCE.getAndIncrement());
    properties.put(SSL_ENDPOINT_IDFN_ALGM,  alg);
    properties.put(SaslConfigs.SASL_MECHANISM, saslmech);
    properties.put(REQUEST_TIMEOUT,  timeout);       
    properties.put(SaslConfigs.SASL_JAAS_CONFIG, config);
    properties.put(SECURITY_PROTOCOL,  protocol);
     properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
    properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
    properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");
    consumerProperties.put(ConsumerConfig.GROUP_ID_CONFIG, "groupid");
    consumerProperties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
    consumerProperties.forEach((key, value) -> {
        map.put((String) key, value);
    });
    return new DefaultKafkaConsumerFactory<>(map);
}
ConsumerFactory死信ConsumerFactory(){
属性=新属性();
put(ProducerConfig.BOOTSTRAP\u SERVERS\u CONFIG,server);
properties.put(SCHEMA\u REGISTRY\u URL,URL);
properties.put(ProducerConfig.CLIENT\u ID\u CONFIG,
“myid”+“-”+消费者\客户端\ ID \序列。getAndIncrement());
properties.put(SSL_ENDPOINT_IDFN_ALGM,alg);
properties.put(SaslConfigs.SASL_机制,saslmech);
put(请求超时,超时);
properties.put(saslconfig.SASL\u JAAS\u CONFIG,CONFIG);
properties.put(安全协议,协议);
properties.put(ConsumerConfig.KEY\u反序列化程序\u类\u配置,StringDeserializer.CLASS);
put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,“最早”);
put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,“false”);
consumerProperties.put(ConsumerConfig.GROUP_ID_CONFIG,“groupid”);
consumerProperties.put(ConsumerConfig.VALUE\u反序列化程序\u类\u配置,StringDeserializer.CLASS);
consumerProperties.forEach((键,值)->{
map.put((字符串)键,值);
});
返回新的默认卡夫卡消费工厂(map);
}

@KafkaListener
怎么了?请描述消费者组,以证明您的客户机已将所有分区分配给itI,此时不需要Kafka侦听器。我使用消费者作为REST服务呼叫的一部分连接到Kafka。这个死信主题不会有太多的信息,也不会有持续的信息流。所以我对连接-断开模式很好。好的。请把我剩下的地址写下来comment@cricket_007,请参阅我的编辑您是否熟悉
kafka消费群体
命令?这就是我想要的,但是谢谢你的编辑