将kafka偏移量减少一个消息大小

时间:2015-11-12 05:32:29

标签: java apache-kafka apache-zookeeper kafka-consumer-api

我有一个kafka群集设置。大多数时候,消费者无人看管。它读取消息并调用外部API。但是如果外部API关闭(很少发生),我需要在固定时间内重试该消息。如果重试失败,我需要停止消费者并在固定时间后重新开始。

问题是我需要处理来自主题的最后一条读取消息。有没有办法可以在读取消息之前将zookeeper偏移重置为一个?(即通过一条消息减少偏移量)。所以下次我启动消费者时,我可以再次阅读该消息。

这可以通过使用低级别消费者来完成。但有没有办法与高级消费者一起做到这一点?

我正在使用基于Java的消费者客户端。

1 个答案:

答案 0 :(得分:2)

您需要向zookeeper提交偏移量。 看看下一个消费者配置: http://kafka.apache.org/documentation.html#consumerconfigs

  

auto.commit.enable :如果为true,则定期向ZooKeeper提交   消费者已经提取的消息的偏移量。这承诺了   当进程失败时,将使用偏移量作为其位置   新的消费者将开始。

     

auto.commit.interval.ms :频率   毫无疑问,消费者抵消致力于动物园管理员。

如果您想在每条消息之后提交偏移量:

auto.commit.enable=false

成功操作后提交偏移量:

consumer.commitOffsets(true)

不建议在每条消息之后执行此操作,或者提交间隔较小,因为它会增加zookeeper的读/写负载。

您还可以查看新的偏移量管理(偏移量存储在代理商而不是zookeper中):

http://kafka.apache.org/documentation.html

  

Kafka提供存储给定的所有偏移的选项   指定经纪人(针对该组)的消费者群体称为   抵消经理。即,该消费者群体中的任何消费者实例   应该将其偏移提交和提取发送到该偏移管理器   (经纪人)