Kafka - Java - 从崩溃中恢复

时间:2017-05-04 14:26:25

标签: java apache-kafka

这是我的问题,关于卡夫卡:

我有两个与Kafka交换数据的程序(一个是生产,另一个是阅读)。让我们假设客户崩溃了。制作人将继续发送消息,一段时间后,我们将重新启动客户。

使用我们当前的经纪人设置,这是应该发生的事情:

- 如果崩溃发生在不到1天前(因为 offsets.retention.minutes 是1440),将检索偏移量,并处理等待的消息。

- 如果崩溃发生在1天以前,客户的新偏移将最早重置(因为 auto.offset.reset 最早)。问题是:如果某些消息已被处理(1天到7天之间),它们将再次出现,因为Kafka会保存7天的消息( log.retention.hours 为168)。 / p>

解决方案是否就像将 offsets.retention.minutes log.retention.hours 设置为相同的值一样简单(当然,执行转换分钟< = >小时)?或者它会有一些我错过的副作用?一个更简单的解决方案就是删除已经处理过的消息,但似乎Kafka不能这样做。

感谢阅读。

1 个答案:

答案 0 :(得分:0)

我认为你的想法是正确的。

我将从一个有趣的公开问题引用一些句子(你可以找到它here)来解释一下:

关于删除政策:

  

保留是按主题/分区完成的。如果给定主题/分区的最后一个提交的偏移量的更新时间不超过offsets.retention.minutes,则偏移量将被垃圾收集。

偏移保留的默认值为低的原因:

  

对于给定的使用者组,主题,分区,压缩后,最终只会在偏移主题中存储一条消息。我们想要防范的是许多短期消费群体。

你可以看一下这个问题,你不是第一个提出这个问题的人。