我们一直在为生产kafka集群使用apache-kafka版本0.10.0.1。而且,我们在日志中看到了一种模式,即使使用者数量或分区数量没有变化,也可以重新分配分区。由于大多数消费者闲置时都会发生此事件,因此我们排除了消费者缓慢或出现n / w问题的可能性。
我们最终认为,以下必须是触发重新评估的原因:
但是我们还在监视工具中注意到了以下内容,它是一个自定义应用程序。
此应用程序的主要目的是向我们展示kafka主题分区的当前使用者(所有其他消耗此群集的生产应用程序)以及该分区的日志结束偏移量及其使用者偏移量。
为此,我们使用了以下代码:
try(KafkaConsumer<String, String> consumer = createConsumer(consumerGroup)){
TopicPartition topicPartition = new TopicPartition(topic, partition);
comsumer.assign(Collections.singletonList(topicPartition));
return consumer.position(topicPartition);} // catch
在上面的代码中,我们通过查询kafka提供现有的使用者组和分区组。
考虑到上面的实现,如果我们有一个应用程序“ A”,其消费者组名称为“ C”。 “ A”不是管理分区,而是让kafka组协调器代表它进行分区。
如果我们运行上面的代码来获取使用者偏移量,那么我们将在代码中管理分配,但使用的是相同的组名“ C”。组协调员会知道吗?这是否有可能触发分区重新分配?