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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.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:同一消费者组中的多个实例侦听同一分区内的主题_Spring Boot_Apache Kafka_Kafka Consumer Api_Spring Kafka - Fatal编程技术网

Spring boot Kafka:同一消费者组中的多个实例侦听同一分区内的主题

Spring boot Kafka:同一消费者组中的多个实例侦听同一分区内的主题,spring-boot,apache-kafka,kafka-consumer-api,spring-kafka,Spring Boot,Apache Kafka,Kafka Consumer Api,Spring Kafka,我有两个kafka consumer实例,配置为同一个consumer组,并在同一主题中侦听分区0。问题是当我向主题发送消息时。消息被两个实例使用,这两个实例不应该发生,因为它们在同一个组中。 我使用SpringBoot配置类来配置它们 以下是配置: @Bean ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory(){ ConcurrentKafkListenerContainerFactory=新Concu

我有两个kafka consumer实例,配置为同一个consumer组,并在同一主题中侦听分区0。问题是当我向主题发送消息时。消息被两个实例使用,这两个实例不应该发生,因为它们在同一个组中。 我使用SpringBoot配置类来配置它们

以下是配置:

@Bean
ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory(){
ConcurrentKafkListenerContainerFactory=新ConcurrentKafkListenerContainerFactory();
setConsumerFactory(consumerFactory());
factory.getContainerProperties().setAckMode(AbstractMessageListenerContainer.AckMode.MANUAL\u立即);
返回工厂;
}
@豆子
公共消费者工厂消费者工厂(){
返回新的DefaultKafkanConsumerFactory(consumerConfigs());
}
@豆子
公共地图使用者配置(){
Map props=newhashmap();
put(ConsumerConfig.BOOTSTRAP\u server\u CONFIG,bootstrapserver);
props.put(ConsumerConfig.GROUP\u ID\u CONFIG,consumerGroupId);
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,“最早”);
put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,“100”);
props.put(ConsumerConfig.SESSION\u TIMEOUT\u MS\u CONFIG,“15000”);
put(ConsumerConfig.KEY\u反序列化程序\u CLASS\u配置,keyDeserializer);
put(ConsumerConfig.VALUE\u反序列化程序\u CLASS\u配置,valueDeserializer);
put(ConsumerConfig.ENABLE\u AUTO\u COMMIT\u CONFIG,false);
返回道具;
}
下面是听众:

@KafkaListener(topicPartitions={@TopicPartition(topic=“${kafka.topic.orders}”,partitions=“0”)})
公共无效消费(消费者记录记录、确认){
log.info(“在分区0的“+orderTopic+”处收到的消息”);
processRecord(记录、确认);
}

卡夫卡不是那样工作的;当您手动分配这样的分区(
@TopicPartition
)时,您明确地告诉Kafka您希望从该分区接收消息-消费者
assign()
将分区分配给自己

换句话说,通过手动分配,您负责分配分区

您需要使用组管理,并让Kafka将主题分配给实例


使用
topics=“…”
卡夫卡将完成作业。如果没有足够的主题,实例将处于空闲状态。您需要至少与实例数量相同的分区才能让所有实例参与。

Kafka不是这样工作的;当您手动分配这样的分区(
@TopicPartition
)时,您明确地告诉Kafka您希望从该分区接收消息-消费者
assign()
将分区分配给自己

换句话说,通过手动分配,您负责分配分区

您需要使用组管理,并让Kafka将主题分配给实例


使用
topics=“…”
卡夫卡将完成作业。如果没有足够的主题,实例将处于空闲状态。要让所有实例参与,您至少需要与实例数量相同的分区。

是的,这是可行的。当我放下其中一个例子时,另一个也加入了。谢谢,我看到你是新来的;看,是的,这起作用了。当我放下其中一个例子时,另一个也加入了。谢谢,我看到你是新来的;看见