关于kafka消费者Acknowledgment的nack(int index, long sleep)问题

bobo910530 2021-04-06 03:14:27
使用springboot整合kafka时,消费者使用@KafkaListener监听批量消息,然后手动提交偏移。然后我现在有一个需求 :就是消费者触发特定逻辑后需要kafka暂停拉取90秒。可以用nack去暂停kafka吗?有大神用过吗?备注:我用过KafkaListenerEndpointRegistry可以调用start()和stop()去手动的启动和停止kafka消费。但是我不想手动干预,并且我发现KafkaListenerEndpointRegistry里面start()容易触发再均衡,kafka起来很慢。 我就想让kafak暂停一段时间,然后自动再去拉取。代码简单的实例如下:

@KafkaListener(topics = KafkaConstants.TOPIC_NAME, containerFactory = "batchFactory")
public void batchPullMessage(List<ConsumerRecord<String, String>> records, Acknowledgment ack) {
try {
log.info("kafka拉取的消息数量: {}", records.size());
final CountDownLatch latch = new CountDownLatch(records.size());//初始化计数器
for (ConsumerRecord<String, String> record : records) {
log.error("消息偏移量:{}", record.offset());
demoService.test(record.value(), latch);//异步消费
}
latch.await();//等待当前所有子线程执行完毕
if ("业务代码逻辑触发需要kafka暂停拉取90秒") {
ack.nack(records.size() - 1, 90 * 1000);
} else {
ack.acknowledge();//提交kafka的offset
}
} catch (Exception e) {
log.error("kafka消费者异常", e);
}
}
...全文
2251 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧