从Kafka主题中删除一条消息

17

我是新手在使用Kafka,我有一个问题。如果我知道主题、偏移量和分区,我能否仅删除主题中的一个消息?如果不能,是否有任何替代方案?

1个回答

24

即使您知道消息所在的分区和偏移量,也无法从Kafka主题中删除单个消息。

请记住,Kafka不是键/值存储,而主题实际上是表示数据流的追加日志。

如果您正在寻找删除单个消息的替代方法,您可以:

  1. 让您的消费者客户端忽略该消息

  2. 启用日志压缩,并发送一条tombstone消息来代替

  3. 编写一个简单的作业(KafkaStreams)来消费数据,过滤掉该消息并将所有消息生成到新主题中。


考虑到我们的事件流上下文,有第四个选项更符合事件溯源范式。与其试图删除错误的消息,你可以考虑将一个新的<ConsumerNameHere>Failed事件追加到主题的末尾。这种方法涉及在消费者内部移动指针。<ConsumerNameHere>Failed事件可以包含对原始未处理事件的引用以及尝试操作的记录。这种技术允许消费者的指针前进,同时保留重试有问题事件的手段 :) - Aaron Newton
附注:上述解决方案只适用于在当前流的末尾想要推进消费者指针并重试的情况,但希望从上下文中可以清楚理解。 - Aaron Newton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接