是否可以将 Kafka 配置为不删除未读消息?

Is it possible to configure Kafka to not delete unread messages?

我完全知道 Kafka 是一个日志,充当哑管道。但是在我们的应用程序中,我们有一些 "compliance topics",我们需要确保读取其中的所有消息。

由于 Kafka 在内部处理所有消费者的偏移量(因此可以监控消费者滞后),我想知道是否可以设置 log.retention=25GB,但不要覆盖未读取的消息任何人,而不是抛出生产者异常(就好像我们设置 log.retention=1week 并且 HDD 已满)。

如果无法在 Kafka 级别配置此功能,是否有任何实用的方法可以在 kafka-producer 或 kafka-streams 上实现此逻辑,因此在 "full unread log" 的情况下会失败?

您无法将 Kafka 配置为保留未读消息。但是,您可以增加保留 time/space 并使用新的 "purge data" API.

手动删除数据

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