2017-09-25 164 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。謝謝! –

相關問題