Spring 具有基于时间的自动提交的 Cloud Stream Kafka 消费者

Spring Cloud Stream Kafka consumer with time based auto commit

我有一个使用 Kafka 活页夹的 Spring Cloud Stream 应用程序。它似乎是根据 AckMode=BATCH 自动提交偏移量(必须在调试模式下找到它,因为它没有出现在文档中)。这会导致代理在提交频率方面产生大量开销。

我想切换到使用本机 Kafka 自动提交,例如:

enable.auto.commit: true
auto.commit.interval.ms: 5000

或者切换到使用 5000 ms ackTime 的 TIME 配置,如此处所述:

https://docs.spring.io/spring-kafka/reference/htmlsingle/#committing-offsets

这可以使用 spring-cloud-stream-binder-kafka 吗?你能提供一个示例配置吗?上面的本机配置似乎被忽略了(在配置块中)。

如果 enable.auto.committrue,则忽略 AckMode。但是请记住,除非您使用的是 0.10.1.0 或更高版本的客户端,否则如果您的消费者速度较慢,代理将执行重新平衡,因为为了支持此模式,我们必须在消费者线程上调用您的侦听器。参见 KIP-62

自(即将发布的)版本 1.3 起,始终在消费者线程上调用侦听器,因为消除了再平衡威胁(1.3 及更高版本使用 0.11 客户端)。

您还可以使用 AckMode.TIMEAckMode.COUNTAckMode.COUNT_TIME 以在提交间隔上获得更大的灵活性。您可能会发现 COUNT_TIME 提供了两全其美的方法。

请记住,基于时间(或基于高计数)的确认策略会增加失败后重新交付的风险。