Spring Cloud Stream Kafka使用基于时间的自动提交

时间:2017-09-25 21:28:36

标签: spring-cloud-stream spring-cloud-dataflow

我有一个使用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吗?你能提供样例配置吗?上面的本机配置似乎被忽略(在配置块中)。

1 个答案:

答案 0 :(得分:1)

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

从(即将发布的)版本1.3开始,总是在消费者线程上调用侦听器,因为消除了重新平衡威胁(1.3及以上使用0.11客户端)。

您还可以使用AckMode.TIMEAckMode.COUNTAckMode.COUNT_TIME来提高提交间隔的灵活性。您可能会发现COUNT_TIME提供了两全其美的优势。

请记住,失败后重新发送的风险会随着基于时间的(或基于计数的)高级策略而增加。