我有一个kafka群集设置。大多数时候,消费者无人看管。它读取消息并调用外部API。但是如果外部API关闭(很少发生),我需要在固定时间内重试该消息。如果重试失败,我需要停止消费者并在固定时间后重新开始。
问题是我需要处理来自主题的最后一条读取消息。有没有办法可以在读取消息之前将zookeeper偏移重置为一个?(即通过一条消息减少偏移量)。所以下次我启动消费者时,我可以再次阅读该消息。
这可以通过使用低级别消费者来完成。但有没有办法与高级消费者一起做到这一点?
我正在使用基于Java的消费者客户端。
答案 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提供存储给定的所有偏移的选项 指定经纪人(针对该组)的消费者群体称为 抵消经理。即,该消费者群体中的任何消费者实例 应该将其偏移提交和提取发送到该偏移管理器 (经纪人)