【问题标题】:Kafka Consumer how to poll automatically if message is not committed如果消息未提交,Kafka Consumer如何自动轮询
【发布时间】:2021-09-09 02:39:53
【问题描述】:

我有一个 Kafka 消费者,其中使用 HTTP POST 调用将消息传递给另一个应用程序。我还使用

手动提交偏移量

确认.acknowledge();

有一些 HTTP 返回错误代码,我们忽略错误并提交偏移量,还有一些错误代码我们不提交偏移量。问题是 kafka 消费者仅在我重新启动消费者时才轮询未提交的消息。如果分区中有未提交的消息,我可以在哪里轮询消息吗?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api spring-kafka


    【解决方案1】:

    请参阅this answer 了解说明。

    要重新传递一条记录,您必须抛出一个异常,并结合 SeekToCurrentErrorHandler,它会重新定位未处理的分区,以便在下一次轮询时再次获取它们。

    或者您可以nack() 确认以达到类似的结果。

    【讨论】:

    • 谢谢@Gary,这有帮助。还可以说您在批处理中有 5 条消息(我正在使用 MANUAL_IMMEDIATE),而第 3 条消息失败了。无论如何要处理消息 4 和 5,并在下一次投票中再次尝试消息 3?
    • 没有。您必须再次从 3 点开始。 Kafka 不确认单个记录,它只是维护一个已提交的偏移量。
    • 不过,2.7 中新的非阻塞重试机制可能正是你所需要的docs.spring.io/spring-kafka/docs/current/reference/html/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 2020-03-08
    • 2016-05-02
    相关资源
    最近更新 更多