2017-09-25 77 views
1

我有一个使用Kafka活页夹的Spring Cloud Stream应用程序。它似乎是基于AckMode=BATCH自动提交补偿(必须在调试模式下找到它,因为它没有出现记录)。这会给代理提交频率带来很大的开销。Spring Cloud Stream Kafka consumer with time based auto commit

我想无论是切换到使用本地卡夫卡自动提交,如:

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

或切换到使用时配置与5000毫秒ackTime如下记载:

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

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

回答

1

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

由于(即将发布的)版本1.3,监听器总是在消费者线程上调用,因为重新平衡威胁已被消除(1.3和更高版本使用0.11客户端)。

您还可以使用AckMode.TIME,AckMode.COUNTAckMode.COUNT_TIME为提交间隔提供更大的灵活性。你可能会发现COUNT_TIME提供了两全其美。

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

+0

这是在0.10.2.1客户端。如何在Spring Cloud Dataflow应用程序上设置AckMode.COUNT_TIME? –

+1

啊,对不起,我没有完全阅读这个问题。容器Ackmodes当前未配置在Kafka活页夹中。他们将在2.0。使用,例如... consumer.configuration.enable.auto.offset设置任意消费者卡夫卡道具。 –

+0

还必须升级spring-cloud-stream-kafka-binder 1.1.2 - > 1.2.1才能获得配置。 1.1.2被硬编码为enable.auto.commit = false。谢谢! –

相关问题