我有一个要求,如果我可以删除由于我有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();}
}
我想通过代码删除记录。请帮助我了解是否有可能,如果可以的话,我该如何实现。
答案 0 :(得分:0)
您不清楚“删除”是什么意思。如果您的意思是“忽略”或“跳过”,则需要引发异常并配置自定义错误处理程序。
如果
ErrorHandler
实现了RemainingRecordsErrorHandler
,则错误处理程序将提供失败的记录以及以前的poll()检索到的所有未处理的记录。处理程序退出后,这些记录不会传递给侦听器。
没有标准的错误处理程序可以“跳过”剩余的记录;这是一个不寻常的要求。
大多数人会使用SeekToCurrentErrorHandler
(现在是即将发布的2.5版本中的默认设置)。