我有一个实现Spring Boot
的{{1}}项目。应用程序使用Kafka
在特定producer
中的topic
上产生一条消息。 partition
上的partitions
在运行时动态生成。添加新的topic
之后,对于给定的partition
已经运行的consumer
不会看到此topic
,但是会看到较旧的partition
。但是,当我重新启动consumer
时,the consumer
开始看到新的partition
并从中成功启动polling
。
我的问题是:我可以在不重新启动使用者的情况下完成这项工作吗?我似乎在官方文档中的任何地方都找不到。
分区创建:
Map<String,NewPartitions> increaseTopicPartitions = new HashMap<String,NewPartitions>();
increaseTopicPartitions.put("nodesTopic", NewPartitions.increaseTo(totalPartitions + 1));
BaseProcessor.adminClient.createPartitions(increaseTopicPartitions);
打印分区数:
int totalPartitions = cluster.partitionCountForTopic(topic);
答案 0 :(得分:3)
使用者在刷新其群集元数据时将仅看到新分区。默认情况下,这仅每5分钟发生一次(请参见Consumer configurations中的metadata.max.age.ms
)。
一旦检测到新分区,就应该正确分配它们,并且使用者应该开始接收消息。