Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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 如何平衡多节点单卡夫卡消费者应用程序的负载?_Spring Boot_Apache Kafka_Load Balancing_Spring Cloud - Fatal编程技术网

Spring boot 如何平衡多节点单卡夫卡消费者应用程序的负载?

Spring boot 如何平衡多节点单卡夫卡消费者应用程序的负载?,spring-boot,apache-kafka,load-balancing,spring-cloud,Spring Boot,Apache Kafka,Load Balancing,Spring Cloud,我有一个spring boot Kafka监听器,它可以听单个主题和消费者列表。现在这个spring启动应用程序现在有3个节点。现在,我需要确保列表消息的数量对所有3个节点的负载均衡。 如何在我的应用程序中实现这一点?在Consumer中,group.id(ConsumerConfig.group\u id\u CONFIG)配置提供负载平衡。发布到主题的每条记录都会传递到每个订阅消费者组中的一个消费者实例 [group.id][1]: 标识此消费者的消费者组的唯一字符串 属于。如果使用者使用

我有一个spring boot Kafka监听器,它可以听单个主题和消费者列表。现在这个spring启动应用程序现在有3个节点。现在,我需要确保列表消息的数量对所有3个节点的负载均衡。
如何在我的应用程序中实现这一点?

在Consumer中,group.id(ConsumerConfig.group\u id\u CONFIG)配置提供负载平衡。发布到主题的每条记录都会传递到每个订阅消费者组中的一个消费者实例

[group.id][1]:

标识此消费者的消费者组的唯一字符串 属于。如果使用者使用 使用subscribe(主题)或 基于卡夫卡的补偿管理策略

import org.apache.kafka.clients.consumer.ConsumerConfig;
导入org.apache.kafka.common.serialization.StringDeserializer;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
导入org.springframework.kafka.core.DefaultKafkaConsumerFactory;
导入org.springframework.kafka.support.serializer.ErrorHandlingDeserializer;
导入org.springframework.kafka.support.serializer.JsonDeserializer;
导入java.util.HashMap;
导入java.util.Map;
@配置
公共类KafkaConsumerConfiguration{
私有映射用户配置(){
final Map props=new HashMap();
put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,“您的代理”);
props.put(ConsumerConfig.GROUP_ID_CONFIG,“消费者组ID”);
返回道具;
}
@豆子
公共消费工厂kafkaListenerConsumerFactory(){
final ErrorHandlingDeserializer ErrorHandlingDeserializer=新的ErrorHandlingDeserializer(新的JsonDeserializer(YourClass.class,false));
返回新的DefaultKafkanConsumerFactory(this.consumerConfigs(),new StringDeserializer(),errorHandlingDeserializer);
}
@豆子
公共ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory(){
最终ConcurrentKafkListenerContainerFactory=新ConcurrentKafkListenerContainerFactory();
setConsumerFactory(this.kafkaListenerConsumerFactory());
返回工厂;
}
}
[1]: https://kafka.apache.org/documentation/#consumerconfigs_group.id

这里的问题是,我想根据正在使用的列表大小消息来分配负载。假设Node1使用大小为100的列表来消费消息,然后下一个kafka消息使用大小为1的列表,并被节点2消费。所以你看这里的差别是巨大的。我想根据卡夫卡消息的大小来平衡这个负载。