【问题标题】:Deleting Kafka messages after consumers' receipt消费者收到后删除Kafka消息
【发布时间】:2020-10-16 00:56:30
【问题描述】:

在我的 kafka java-project 中,我想在所有感兴趣的消费者收到新消息后立即删除消息。经过一番研究,我发现了一些旧的 stackoverflow 问题:hereone morehere。看完所有这些,我有一些问题。

据我所知,我真的应该依靠时间或空间的保留。但是,答案很旧,所以也许有些改变?有没有其他方法可以真正确保在所有当前连接的消费者都阅读完消息后立即删除消息?在这种情况下,我需要检查是否所有消费者都已阅读该消息。我需要一个消费者组吗?

提前谢谢你。

【问题讨论】:

  • 为什么要在消费后删除消息?是为了避免重复消息传递还是其他原因?
  • 你为什么要这样做? Kafka 被设计为分布式提交日志。您想要的行为是发布-订阅系统,如 JMS 服务器、RabbitMQ 或亚马逊 SNS。
  • @GoviS 问题是,我需要消费者真正处理消息。因此,我想在所有消费者实际接收并处理该消息后删除该消息。目前,处理时间和消息大小可能会有很大差异,所以我真的不能对保留时间或大小进行限制。
  • @GreyFairer 上面的答案
  • 我可以让消费者在处理后提交,但这对我有帮助吗?

标签: java apache-kafka kafka-consumer-api


【解决方案1】:

您无需担心邮件何时会被删除或压缩以实现您的目标

就你的消费者而言,如果消费者提交了他们消费的每条消息的偏移量,那么那些处理过的消息,无论它们在主题中停留多长时间,在你的消费者看来都是死的。

注意:

管理用户可以重新设置您的消费者,以从一开始就读取收益,包括您的消费者从中移动的那些消息。但这是手动管理操作。

【讨论】:

  • 可能有趣的补充一下:如果你部署一个新的消费者和一个新的消费者组,你也可以选择从偏移量 0 开始,再次接收旧消息,或者从当前偏移量开始,并且只接收新消息。
猜你喜欢
  • 1970-01-01
  • 2021-06-06
  • 2016-05-15
  • 1970-01-01
  • 2018-09-12
  • 2015-04-19
  • 2020-11-15
  • 2022-08-13
  • 1970-01-01
相关资源
最近更新 更多