Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Kafka无法处理所有消息-Java Spring引导_Spring Boot_Apache Kafka_Kafka Consumer Api_Spring Kafka - Fatal编程技术网

Spring boot Kafka无法处理所有消息-Java Spring引导

Spring boot Kafka无法处理所有消息-Java Spring引导,spring-boot,apache-kafka,kafka-consumer-api,spring-kafka,Spring Boot,Apache Kafka,Kafka Consumer Api,Spring Kafka,我有一个spring引导应用程序(SpringVersion2.2.2.RELEASE),其中我配置了Kafka消费程序,它处理来自Kafka的数据,并服务于多个web套接字。kafka订阅成功,但消费者并未处理来自选定kafka主题的所有消息。很少有消息被延迟,也很少有消息被遗漏。但生产商正在发送数据,这是完全有保证的。下面我分享了我使用过的配置属性 @Bean public ConsumerFactory<String, String> consumerFactory() {

我有一个spring引导应用程序(SpringVersion2.2.2.RELEASE),其中我配置了Kafka消费程序,它处理来自Kafka的数据,并服务于多个web套接字。kafka订阅成功,但消费者并未处理来自选定kafka主题的所有消息。很少有消息被延迟,也很少有消息被遗漏。但生产商正在发送数据,这是完全有保证的。下面我分享了我使用过的配置属性

@Bean
public ConsumerFactory<String, String> consumerFactory() {
    final String BOOTSTRAP_SERVERS = kafkaBootstrapServer;
    Map<String, Object> props = new HashMap<>();
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS);
    props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
    props.put(ConsumerConfig.GROUP_ID_CONFIG, consumerGroupId);
    return new DefaultKafkaConsumerFactory<>(props);
}
@Bean
公共消费者工厂消费者工厂(){
最终字符串BOOTSTRAP_SERVERS=kafkaBootstrapServer;
Map props=newhashmap();
put(ConsumerConfig.BOOTSTRAP\u SERVERS\u CONFIG,BOOTSTRAP\u SERVERS);
put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,“false”);
put(ConsumerConfig.KEY\u反序列化程序\u类\u配置,StringDeserializer.CLASS);
put(ConsumerConfig.VALUE\u反序列化程序\u类\u配置,StringDeserializer.CLASS);
props.put(ConsumerConfig.GROUP\u ID\u CONFIG,consumerGroupId);
返回新的默认卡夫卡消费工厂(道具);
}

是否缺少任何配置

对于新消费者(从未提交组.id的偏移量),您必须将
自动偏移量重置
设置为
最早
,以避免丢失主题中的任何现有记录(默认值为
最新
)。

我不需要现有消息,但我需要从启动应用程序的那一刻起发送的所有消息。在这种情况下,设置“自动偏移量”会重置为“最早帮助”吗?如果消费者
组.id
已经有一个提交的偏移量,则不会有任何区别。它仅适用于
使用者
第一次启动时(直到它提交至少一个偏移量为止)。消费者不会“错过”记录的其他原因。好的,我正在对消息进行一些处理,每个消息的处理大约需要4-5秒。在这种情况下,在我的处理完成之前,下一条消息是否会等待处理?或者它会在另一个线程上?在使用消息后将此处理移动到单独的线程中是一个好主意吗?假设您使用的是spring kafka,这取决于您的并发设置和主题中的分区数量。同一分区内的所有消息将在同一线程上处理。您必须在
max.poll.interval.ms
内处理
max.poll.records
以避免重新平衡。您如何知道数据正在到达主题?您是否在UI中查看它?