【发布时间】:2019-08-28 16:39:51
【问题描述】:
我需要暂停 Kafka 消费者从主题中消费消息,直到消息到达它的等待时间。为此,我在 Kafka 中使用了暂停/恢复方法。但是当我恢复时,暂停前消耗的第一条消息将不会再次收到。但是,自从我手动确认后,主题的偏移量仍然没有更新(滞后是一个)。
@StreamListener(ChannelName.MESSAGE_INPUT_RETRY_CHANNEL)
public void onMessageRetryReceive(org.springframework.messaging.Message<Message> message, @Header(KafkaHeaders.CONSUMER)KafkaConsumer<?,?> consumer){
long waitTime = //Calculate the wait time of the message
Acknowledgment acknowledgment = message.getHeaders().get(KafkaHeaders.ACKNOWLEDGMENT, Acknowledgment.class);
if(waitTime > 0){
consumer.pause(Collections.singleton(new TopicPartition("message-retry-topic",0)));
}else{
messageProducer.sendMessage(message.getPayload());
acknowledgment.acknowledge();
}
}
@Bean
public ApplicationListener<ListenerContainerIdleEvent> idleListener() {
return event -> {
boolean isReady = //Logi to check if ready to resume
if(isReady){
event.getConsumer().resume(event.getConsumer().paused());
}
};
}
这与KafkaConsumer resume partition cannot continue to receive uncommitted messages 中提到的问题有关。但我不确定 seeks 方法如何有助于检索第一条消费消息。我正在使用弹簧云流。我需要一些建议
【问题讨论】:
标签: apache-kafka spring-cloud-stream