全部產品
Search
文件中心

ApsaraMQ for Kafka:如何配置用戶端參數?

更新時間:Jul 06, 2024

本文介紹用戶端參數的配置規則,請根據實際業務情境配置適當的值。

用戶端參數列表及說明如下所示:

表 1. 生產者用戶端
參數說明
retries訊息發送失敗時的重試次數。
retry.backoff.ms訊息發送失敗時的稍候再試,建議設定為1000。單位:毫秒。
acks發送訊息的持久化機制。為了提升發送效能, 建議設定為acks=1
  • acks=0:無需服務端的Response,效能較高、丟資料風險較大。
  • acks=1:服務端主節點寫成功即返回Response,效能中等、丟資料風險中等、主節點宕機可能導致資料丟失。
  • acks=all:服務端主節點寫成功且備節點同步成功才返回Response,效能較差、資料較為安全、主節點和備節點都宕機才會導致資料丟失。
batch.size發往每個分區的訊息緩衝量。達到設定的數值時,就會觸發一次網路請求,然後Producer用戶端把訊息批量發往伺服器。如果batch.size設定過小,有可能影響發送效能和穩定性。建議保持預設值16384。單位:位元組。
linger.ms每條訊息在緩衝中的最長時間。若超過這個時間,Producer用戶端就會忽略batch.size的限制,立即把訊息發往伺服器。建議根據業務情境, 將linger.ms設定在100~1000之間。單位:毫秒。
partitioner.class設定分區策略。建議採用粘性分區策略,可提升發送效能。發送用戶端2.4及以上版本,預設採用粘性分區策略模式。
buffer.memory發送的記憶體池大小。如果記憶體池設定過小,則有可能導致申請記憶體耗時過長,從而影響發送效能,甚至導致發送逾時。建議buffer.memory ≧ batch.size * 分區數 * 2。單位:位元組。
表 2. 消費者用戶端參數
參數說明
fetch.min.bytes

消費者從服務端擷取資料的最小位元組數。設定該參數時請盡量評估訊息發送端的訊息量,若設定過大可能會導致消費端延遲增大,過小可能會導致消費端頻繁拉取訊息。單位:位元組。

fetch.max.wait.ms

服務端等待的最大時間。單位:毫秒。

  • 如果使用Local儲存引擎,配置了fetch.min.bytes參數,伺服器會等待足夠的資料才會返回。超過此時間即使沒有足夠資料也會返回。
  • 如果是雲端儲存引擎,一旦有新資料發送進來, 伺服器就會結束等待,不需要等待fetch.min.bytes的值。
max.partion.fetch.bytes

每個分區返回的最大位元組數。單位:位元組。

session.timeout.ms

消費端發送心跳的時間間隔,如果在心跳時間間隔內沒有發送心跳,則服務端會認為消費者死亡,從而觸發Rebalance,Rebalance期間用戶端將會停止消費資料等待Rebalance完成。建議將此參數設定為30000~60000。單位:毫秒。

預設有效值:6000~300000。

max.poll.records

每次Poll擷取的最大訊息數量,若此值設定過大則需要儘快處理商務邏輯,避免處理過慢影響下一次Poll資料,從而導致在session.timeout.ms時間內沒有發送心跳引起Rebalance。建議該值小於<單個線程每秒消費的條數> * <消費線程的個數> * <session.timeout.ms參數中設定的秒數>的值。

重要 在Java Client 0.10.1及其以上版本有單獨的線程發送心跳,小於此版本或者其他語言的用戶端都需考慮處理資料時間和發送心跳的間隔,防止頻繁Rebalance影響正常消費。
max.poll.interval.ms最大的Poll間隔時間,僅在Java Client 0.10.1及其以上版本需配置該參數。如果在間隔時間內消費者沒有發送Poll請求,即使在session.timeout.ms參數設定的時間內發送了心跳。服務端也會認為消費者死亡,從而觸發Rebalance。因此需注意此值需要合理設定,建議該值大於<消費一條訊息花費的時間> * <Poll拉取的資料條數>的值。通常使用預設值即可。單位:毫秒。

預設值:300000。

enable.auto.commit是否採用自動認可位點機制。
  • true:預設採用自動認可機制。
  • false:不採用自動認可機制。

預設值:true。

auto.commit.interval.ms自動認可位點時間間隔。預設值為1000,單位:毫秒。
auto.offset.reset消費位點重設策略。
  • latest:從最大位點開始消費。
  • earliest:從最小位點開始消費。
  • none:不做任何操作,即不重設。
說明
  • 建議設定成latest,而不要設定成earliest,避免因位點非法時從頭開始消費,從而造成大量重複。
  • 如果是您自己管理位點,可以設定為none。