流处理后从kafka主题中删除邮件

时间:2017-08-14 11:07:45

标签: apache-kafka apache-kafka-streams

kafka流处理在我们的系统中实现,用于事务处理。解决方案如下实现,

Kafka生产者向kafka主题发布事件,流处理器处理输入事件并执行聚合操作。在流处理之后,该事件将被发布到另一个主题。由于第一个主题中没有实现消费者,我如何从第一个主题中删除已处理的消息。

3 个答案:

答案 0 :(得分:2)

考虑到您的流处理链是第一个主题的使用者。如果由于某种原因需要重新处理原始数据(例如,如果您意识到流处理逻辑中存在错误),您可能希望即使在处理完第一个主题后也可以使用原始消息。

因此,您不需要删除邮件,您必须针对您的需求设置该主题的保留政策。权衡取舍通常是数据可用的时间量与所需的存储量之比。

答案 1 :(得分:2)

无法手动从kafka中删除邮件(无需黑客攻击磁盘上的数据,AFAIK)。您只有3个选项:

  • 使用基于时间的保留政策(例如,让kafka自动删除超过1小时的所有邮件)

  • 使用基于存储的保留策略(让kafka保持主题大小为某个预定义值)

  • 使用主题压缩策略 - 让kafka保留您密钥的最新版本。所有旧版本的密钥都将被删除(压缩)。

正如Luciano Afranllie已经描述的那样 - 您不需要手动删除邮件。您可以处理消息并让kafka根据您的策略管理主题。

答案 2 :(得分:0)

有一个Kafka改进提案(KIP)为这个用例添加了这个功能。

https://cwiki.apache.org/confluence/display/KAFKA/KIP-107%3A+Add+purgeDataBefore%28%29+API+in+AdminClient

目前所有要删除邮件的Scala代码都在0.11 Kafka中并且已经过测试工作

https://github.com/apache/kafka/pull/2476

但是,Java AdminClient API和文档中添加此功能尚未完成。