2017-05-04 99 views
0

恢复这里是我的问题,卡夫卡:卡夫卡 - 爪哇 - 从crashs

我有两个方案交换与卡夫卡的数据(一个是生产,另一个正在读)。假设客户崩溃。制作人将继续发送信息,过了一段时间后,我们将重新启动客户。

以我们现在的经纪人设置,这里是什么是应该发生的:

- 如果事故发生不到1天前(如offsets.retention.minutes为1440),偏移被检索,等待的消息将被处理。

- 如果碰撞发生的时间超过1天,客户的新偏移将最早重置(如auto.offset.reset最早)。问题是:如果一些消息已经被处理(在1天和7天之间),它们将会再次,因为Kafka保存7天的消息(log.retention.hours是168)。

是对溶液那样简单既offsets.retention.minuteslog.retention.hours设定为相同的值(当然,执行转换分钟< =>小时)?或者它会产生一些我错过的副作用?一个更简单的解决方案就是删除已经处理的消息,但似乎卡夫卡不能这样做。

感谢您的阅读。

回答

0

我认为你的思路是正确的。

我会从一个有趣的开放式问题,引用一些句子(你可以找到它here)给一些有关此光:

关于删除策略:

保留每完成话题/分区。如果给定主题/分区的上次提交偏移未更新的时间超过offsetset.retention.minutes,则偏移量将被垃圾收集。

之所以胶印保留默认值是低:

对于给定的消费群体,主题,分区,压实后,会出​​现存储了的偏移主题中最终只有一个消息。我们想要保护的是很多短命的消费者群体。

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