删除从Springboot项目中的抓取中收到的内存卡夫卡记录

时间:2020-05-10 04:55:34

标签: spring-boot apache-kafka kafka-consumer-api spring-kafka

我有一个要求,如果我可以删除由于我有max-poll-records而获取的内存中kafka消息:10.因此,方案是:如果我的程序遇到任何错误,则一一处理记录,我不需要处理存储在内存中的任何其他剩余记录。 例如:当我的最大轮询间隔为10时,我一次获取10条记录。我成功处理了5条记录(手动提交),但是在第6条记录期间遇到错误,现在我必须从内存中删除所有剩余的5条记录。下面是我的监听器代码:

    @KafkaListener(topics = "#{'${kafka.consumer.allTopicList}'.split(',')}", groupId = Constant.GROUP_ID)
public void consumeAllTopics(@Header(KafkaHeaders.RECEIVED_TOPIC) String topic, String message, Acknowledgment acknowledgment) {
    switch (topic) {
        case Constant.toipc1:
            if (!StringUtils.isEmpty(message)) {
                try {
                      //processing logic
                      acknowledgment.acknowledge();
                    }catch(Exception e){e.printStackTrace();}
                }

我想通过代码删除记录。请帮助我了解是否有可能,如果可以的话,我该如何实现。

1 个答案:

答案 0 :(得分:0)

您不清楚“删除”是什么意思。如果您的意思是“忽略”或“跳过”,则需要引发异常并配置自定义错误处理程序。

请参见the documentation

如果ErrorHandler实现了RemainingRecordsErrorHandler,则错误处理程序将提供失败的记录以及以前的poll()检索到的所有未处理的记录。处理程序退出后,这些记录不会传递给侦听器。

没有标准的错误处理程序可以“跳过”剩余的记录;这是一个不寻常的要求。

大多数人会使用SeekToCurrentErrorHandler(现在是即将发布的2.5版本中的默认设置)。