如何配置客戶端參數?
更新時間 2024-08-12 08:35:00
最近更新時間: 2024-08-12 08:35:00
分享文章
本節介紹分布式消息服務Kafka客戶端參數配置
根據實際業務場景,客戶端參數配置適當的值,客戶端參數列表及說明如下所示:
表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。建議該值小于<單個線程每秒消費的條數> * <消費線程的個數> *的值。重要 在Java Client 0.10.1及其以上版本有單獨的線程發送心跳,小于此版本或者其他語言的客戶端都需考慮處理數據時間和發送心跳的間隔,防止頻繁Rebalance影響正常消費。 |
| max.poll.interval.ms | 最大的Poll間隔時間,僅在Java Client 0.10.1及其以上版本需配置該參數。如果在間隔時間內消費者沒有發送Poll請求,即使在session.timeout.ms參數設置的時間內發送了心跳。服務端也會認為消費者死亡,從而觸發Rebalance。因此需注意此值需要合理設置,建議該值大于<消費一條消息花費的時間> *的值。通常使用默認值即可。單位:毫秒。默認值:300000。 |
| enable.auto.commit | 是否采用自動提交位點機制。true:默認采用自動提交機制。false:不采用自動提交機制。默認值:true。 |
| auto.commit.interval.ms | 自動提交位點時間間隔。默認值為1000,單位:毫秒。 |
| auto.offset.reset | 消費位點重置策略。latest:從最大位點開始消費。earliest:從最小位點開始消費。none:不做任何操作,即不重置。說明建議設置成latest,而不要設置成earliest,避免因位點非法時從頭開始消費,從而造成大量重復。如果是您自己管理位點,可以設置為none。 |