使用组管理运行kafka spring时寻求分区结束?

时间:2018-05-23 22:43:53

标签: apache-kafka spring-kafka

我正在使用受集团管理的卡夫卡春季消费者。

我的消费者类

中有以下代码
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) {}
}

当我的消费者正在运行时,此代码非常有用。但是,有时处理的消息数量太多而消息堆叠起来。我已经对我的消费者实现了并发性,有时候消息会随着时间的推移而延迟。

因此,作为一种解决方法,在我弄清楚为什么会出现延迟之前,我会尝试让我的消费者了解最新消息。

我必须重新启动我的应用才能调用分区,以便我的消费者寻求结束并开始处理最新消息。

有没有办法在不必反弹我的申请的情况下寻求结束?

感谢。

0 个答案:

没有答案