我有一个使用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吗?你能提供样例配置吗?上面的本机配置似乎被忽略(在配置块中)。
答案 0 :(得分:1)
如果AckMode
为enable.auto.commit
,则会忽略true
。但请记住,除非您使用的是0.10.1.0或更高版本的客户端,否则如果您的消费者很慢,代理将执行重新平衡,因为要支持此模式,我们必须在使用者线程上调用您的侦听器。请参阅KIP-62。
从(即将发布的)版本1.3开始,总是在消费者线程上调用侦听器,因为消除了重新平衡威胁(1.3及以上使用0.11客户端)。
您还可以使用AckMode.TIME
,AckMode.COUNT
或AckMode.COUNT_TIME
来提高提交间隔的灵活性。您可能会发现COUNT_TIME
提供了两全其美的优势。
请记住,失败后重新发送的风险会随着基于时间的(或基于计数的)高级策略而增加。