Java 基于Spring Boot的Kafka消费者确认策略

Java 基于Spring Boot的Kafka消费者确认策略,java,apache-kafka,kafka-consumer-api,spring-kafka,Java,Apache Kafka,Kafka Consumer Api,Spring Kafka,我们有一个基于Sprring Boot的Kaffka消费者,我们为其创建了如下工厂:- @Bean public ConsumerFactory<String, Customer> customerConsumerFactory() { Map<String, Object> config = new HashMap<>(); config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CO

我们有一个基于Sprring Boot的Kaffka消费者,我们为其创建了如下工厂:-

@Bean
    public ConsumerFactory<String, Customer> customerConsumerFactory() {
        Map<String, Object> config = new HashMap<>();

        config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "bootstrapServers");
        config.put(ConsumerConfig.GROUP_ID_CONFIG, "${kafka.customer.consumer.group}");
        config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);

        config.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
        config.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, "5000");
        config.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG, "5000");
        config.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG,"25000");
        config.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG,String.valueOf(Integer.MAX_VALUE));
        config.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, "2");

        return new DefaultKafkaConsumerFactory<>(config, new StringDeserializer(),
                new JsonDeserializer<>(PaymentsHubResponse.class));
    }

    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, Customer> customerConsumerKafkaListenerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, Customer> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(customerConsumerFactory());
        return factory;
    }

问题1.)此语句是否
acknowledge.acknowledge()同时向Kafka代理发送对这两条消息的确认,或者该方法本身会被执行2次,每个传入消息执行一次

问题2.)如果在处理这些消息的过程中出现问题怎么办?这些信息会永远丢失吗

问题3.)是否有某种方法可以在每个消息级别上发送有条件的确认

问题4)比如说,我从不承认这个消息?那么,这个消息会有多少次从代理那里传来

问题5.)这两个消费者配置属性
MAX\u POLL\u RECORDS\u DOC
MAX\u POLL\u RECORDS\u CONFIG
之间有什么区别

答案将受到高度赞赏

- 谢谢 再见

  • 如果容器确认模式为
    MANUAL
    (两个偏移量都在处理后提交)或
    MANUAL\u IMMEDIATE
    每个偏移量都立即提交(同步或异步取决于
    commitSync
    属性),则您将仅获得
    确认

  • 取决于版本;对于旧版本,错误只是记录在案。对于最新版本,默认的错误处理程序是
    SeekToCurrentErrorHandler
    。默认情况下,将在没有延迟的情况下尝试交付10次,然后记录。您可以将恢复程序配置为在重试次数用尽后调用(例如
    DeadLetterPublishingRecoverer

  • 否;卡夫卡仅维护偏移量;不确认离散记录

  • 除非抛出异常(请参阅2),否则不会重新交付。请参阅有关错误处理的参考手册

  • 一个(_DOC)是属性文档的文本,另一个(_CONFIG)是属性名称

  •   @KafkaListener(topics = "${kafka.consumer.topic}", groupId = "${kafka.consumer.group}", containerFactory="customerConsumerKafkaListenerFactory")
    public void consumeResponseEventFromPH(Customer customerObject, Acknowledgment ack) {
       acknowledgment.acknowledge();
       // Business Logic.
    }