- fetch.min.bytes
該屬性指定了消費者’從服務器獲取記錄的最小字節數。 broker 在收到消費者的數據請求時, 如果可用的數據量小於fetch.min.bytes 指定的大小,那么它會等到有足夠的可用數據時才把它返回給消費者。
作用:可以降低消費者和 broker 的工作負載,因為它們在主題不是很活躍的時候(或者一天里的低谷時段)就不需要來來回回地處理消息。
場景設置:
1> 數據量小,但消費者的 CPU 使用率卻很高,那么就需要把該屬性的值設得比默認值大。
2> 消費者的數量比較多,把該屬性的值設置得大一點可以降低 broker 的工作負載。 - fetch.max.wait.ms
通過 fetch.min.bytes 告訴 Kafka,等到有足夠的數據時才把它返回給消費者。而 feth. Max.舊i.t.l'lS 則用於指定 broker 的等待時間,默認是 500ms,如果沒有足夠的數據流入 Kafka,消費者獲取最小數據量的要求就得不到滿足,最終導致 500ms 的延遲。
作用:如果要降低 潛在的延遲(為了滿足 SLA),可以把該參數值設置得小一些。如果 fetch.max.wait.ms 被設 為 lOOms,並且 fetch.max.wait.ms 被設為 lMB,那么 Kafka 在收到消費者的請求后,要么返 回 IMB 數據,要么在 lOOms 后返回所有可用的數據,就看哪個條件先得到滿足。 - max.partition.fetch. bytes
該屬性指定了服務器從每個分區里返回給消費者的最大字節數。它的默認值是 lMB, 也 就是說, KafkaConsumer.poll() 方住從每個分區里返回的記錄最多不超過max.partition.fetch. bytes 指定的字節。
優化:如果一個主題有 20 個分區和 5 個消費者,那么每個消費者需要 至少 4MB 的可用內存來接收記錄。在為消費者分配內存時,可以給它們多分配一些,因為如果群組里有消費者發生崩憤,剩下的消費者需要處理更多的分區。
注意: 1、max.partition.fetch.bytes 的值必須比 broker 能夠接收的最大消息的字節數(通過 max.message.size 屬性配置)大, 否則消費者可能無法讀取這些消息,導致消費者一直掛起重試。
2、另一個需要考慮的因素是消費者處理數據的時間。 1肖費者需要頻繁調用 poll() 方陸 來避免會話過期和發生分區再均衡,如果單次調用 poll() 返回的數據太多,消費者需要更 多的時間來處理,可能無怯及時進行下一個輪詢來避免會話過期。如果出現這種情況, 可以把max.partition.fetch.bytes 值改小,或者延長會i舌過期時間。 - session.timeout.ms
該屬性指定了消費者在被認為死亡之前可以與服務器斷開連接的時間,默認是 3s。如果消費者沒有在 session.timeout.ms 指定的時間內發送心跳給群組協調器,就被認為已經死亡,協調器就會觸發再均衡,把它的分區分配給群組里的其他消費者。
heartbeat.interval.ms 指定了 poll() 方住向協調器發送心跳的頻率。
session.timeout.ms 則指定了消費者可以多久不發送心跳。一般與上者參數同時設置。
heartbeat.interval.ms 必須比session.timeout.ms 小, 一 般是 session.timeout.ms 的三分之一。如果 session.timeout.ms 是 3s ,那么 heartbeat.interval.ms 應該是 ls。 把 session.timeout.ms 值設得比默認值小,可以更快地檢測和恢 復崩憤的節點,不過長時間的輪詢或垃圾收集可能導致非預期的再均衡。把該屬性的值設 置得大一些,可以減少意外的再均衡,不過檢測節點崩憤-需要更長的時間。 - auto.offset.reset
該屬性指定了消費者在讀取一個沒有偏移量的分區或者偏移量無效的情況下(因消費者長 時間失效,包含偏移量的記錄已經過時井被刪除)該作何處理。它的默認值是 latest, 意 思是說,在偏移量無效的情況下,消費者將從最新的記錄開始讀取數據(在消費者啟動之 后生成的記錄)。另一個值是 ea「li.est,意思是說,在偏移量無效的情況下,消費者將從 起始位置讀取分區的記錄。
6 . enable.auto.commit
該屬性指定了消費者是否自動提交偏移 量,默認值是 true。
應用:為了盡量避免出現重復數據和數據丟失,可以把它設為 false,由自己控制何時提交偏移量。
如果把它設為true,還可以通過配置 auto.commit.interval.ms 屬性來控制提交的頻率。