Java 在Spring boot kafka上添加分区需要一些时间才能生效
我正在修改Kafka主题,为其添加分区(从3个分区增加到4个分区)。 在consumer上,我已经有4个并发,使用Java 在Spring boot kafka上添加分区需要一些时间才能生效,java,spring-boot,spring-kafka,Java,Spring Boot,Spring Kafka,我正在修改Kafka主题,为其添加分区(从3个分区增加到4个分区)。 在consumer上,我已经有4个并发,使用@KafkaListener @KafkaListener(topics = "t_multi_partitions", concurrency = "4") 制作人每隔几秒钟发送一次消息,但通常每个消息的发送时间不超过5秒 有趣的是,当我改变分区时 kafka-topics.sh--引导服务器localhost:9092--alter--主题t\u多分区--分区4 它不会直接生效
@KafkaListener
@KafkaListener(topics = "t_multi_partitions", concurrency = "4")
制作人每隔几秒钟发送一次消息,但通常每个消息的发送时间不超过5秒
有趣的是,当我改变分区时
kafka-topics.sh--引导服务器localhost:9092--alter--主题t\u多分区--分区4
它不会直接生效。生产者开始向第四个分区发送消息大约需要5分钟,重新平衡第四个消费者也需要5分钟才能生效 这正常吗?我使用的是SpringBoot2.1 我如何调整这5分钟的时间(更长或更短) 消费者代码(简化)
@KafkaListener(topics=“t\u多分区”,concurrency=“4”)
public void listen(消费者记录消息)引发InterruptedException{
log.info(“Key:{},Partition:{},Message:{}”,Message.Key(),Message.Partition(),Message.value());
}
这是由Apache Kafka控制的,而不是由Spring Kafka控制的。这种行为是正常的
您可以通过调整元数据.max.age.ms来修改刷新率。这是生产者和消费者配置。生产者和消费者配置不需要具有相同的配置值
引用阿帕奇·卡夫卡的话
强制刷新的时间段(毫秒)
元数据,即使我们没有看到任何分区领导权的变化
主动发现任何新的代理或分区
示例中的Spring Kafka运行四个@KafkaListener
线程。主题和分区根据partition.assignment.strategy
定义的分配者策略委派给每个@KafkaListener
<代码>范围赋值器是默认策略。这是一个消费者配置
引用ApacheKafka文档
客户端使用的分区分配策略的类名
将用于在使用者实例之间分配分区所有权
使用组管理时
基于@kkflf指南,生产商配置
@配置
公共级卡夫卡康菲{
@自动连线
私人卡夫卡财产卡夫卡财产;
@豆子
公共卡夫卡模板卡夫卡模板(){
返回新的卡夫卡模板(producerFactory());
}
@豆子
公共地图产品配置(){
var props=kafkaProperties.buildProducerProperties();
props.put(ProducerConfig.METADATA\u MAX\u AGE\u CONFIG,“600000”);
返回道具;
}
@豆子
公共生产工厂生产工厂(){
返回新的DefaultKafkaProducerFactory(producerConfigs());
}
}
@KafkaListener(topics = "t_multi_partitions", concurrency = "4")
public void listen(ConsumerRecord<String, String> message) throws InterruptedException {
log.info("Key : {}, Partition : {}, Message : {}", message.key(), message.partition(), message.value());
}