我正在使用Java版本的Kafka客户端版本0.10.0.0。在我的情况下,自动提交被关闭,我们使用KafKaClient.poll(timout)api阅读。我们处理所有消息,如果一切顺利,我们会显式调用commitSync()。但是在无法处理消息的情况下,我们希望能够从上次提交中重新读取。看看API我没有发现任何明显的东西。有人能指出我在正确的方向吗?感谢。
答案 0 :(得分:3)
使用seek
method。具体来说,由于您自动提交偏移量,因此您知道上次提交的偏移量(或者您可以 - 只需将其保存在变量中)。如果事情失败并且您希望备份调用seek
传递最后提交的偏移量。
您也可以致电committed
method向Kafka询问上次保存的偏移量是多少,但您可以自己保存它也很容易。
推迟偏移提交可能是一个更好的主意,直到你知道事情有效。这样会更安全,因为如果一台机器崩溃就没问题了:如果你总是从上一次提交的偏移中消费,你仍然可以保证每条消息至少会被看到一次。如果您在知道自己是否已经处理之前提交,即使是手动搜索也无法做出保证;如果机器在提交偏移量之后但在您发现事情没有成功之前崩溃了怎么办。