我正在使用受集团管理的卡夫卡春季消费者。
我的消费者类
中有以下代码public class ConsumerHandler implements Receiver<String, Message>, ConsumerSeekAware {
@Value("${topic}")
protected String topic;
public ConsumerHandler(){}
@KafkaListener(topics = "${topic}")
public Message receive(List<ConsumerRecord<String, Message>> messages, Acknowledgment acknowledgment) {
for (ConsumerRecord<String, Message> message : messages) {
Message msg = message.value();
this.handleMessage(any, message);
}
acknowledgment.acknowledge();
return null;
}
@Override
public void registerSeekCallback(ConsumerSeekCallback callback) {
}
@Override
public void onPartitionsAssigned(Map<TopicPartition, Long> assignments, ConsumerSeekCallback callback) {
for (Entry<TopicPartition, Long> pair : assignments.entrySet()) {
TopicPartition tp = pair.getKey();
callback.seekToEnd(tp.topic(),tp.partition());
}
}
@Override
public void onIdleContainer(Map<TopicPartition, Long> assignments, ConsumerSeekCallback callback) {}
}
当我的消费者正在运行时,此代码非常有用。但是,有时处理的消息数量太多而消息堆叠起来。我已经对我的消费者实现了并发性,有时候消息会随着时间的推移而延迟。
因此,作为一种解决方法,在我弄清楚为什么会出现延迟之前,我会尝试让我的消费者了解最新消息。
我必须重新启动我的应用才能调用分区,以便我的消费者寻求结束并开始处理最新消息。
有没有办法在不必反弹我的申请的情况下寻求结束?
感谢。