使用者在重新启动之前无法从新创建的分区中轮询

时间:2018-11-21 15:24:28

标签: java apache-kafka kafka-consumer-api

我有一个实现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);

1 个答案:

答案 0 :(得分:3)

使用者在刷新其群集元数据时将仅看到新分区。默认情况下,这仅每5分钟发生一次(请参见Consumer configurations中的metadata.max.age.ms)。

一旦检测到新分区,就应该正确分配它们,并且使用者应该开始接收消息。