consumer使用規范
1、consumer的owner線程需確保不會異常退出,避免客戶端無法發起消費請求,阻塞消費。
2、確保處理完消息后再做消息commit,避免業務消息處理失敗,無法重新拉取處理失敗的消息。
3、consumer不能頻繁加入和退出group,頻繁加入和退出,會導致consumer頻繁做rebalance,阻塞消費。
4、consumer數量不能超過topic分區數,否則會有consumer拉取不到消息。
5、consumer需周期poll,維持和server的心跳,避免心跳超時,導致consumer頻繁加入和退出,阻塞消費。
6、consumer拉取的消息本地緩存應有大小限制,避免OOM(Out of Memory)。
7、consumer session設置為30秒,session.timeout.ms=30000。
8、Kafka不能保證消費重復的消息,業務側需保證消息處理的冪等性。
9、消費線程退出要調用consumer的close方法,避免同一個組的其他消費者阻塞sesstion.timeout.ms的時間。
producer使用規范
1、同步復制客戶端需要配合使用:acks=all
2、配置發送失敗重試:retries=3
3、發送優化:linger.ms=0
4、生產端的JVM內存要足夠,避免內存不足導致發送阻塞
topic使用規范
配置要求:推薦3副本,同步復制,最小同步副本數為2,且同步副本數不能等于topic副本數,否則宕機1個副本會導致無法生產消息。
創建方式:支持選擇是否開啟kafka自動創建Topic的開關。選擇開啟后,表示生產或消費一個未創建的Topic時,會自動創建一個包含3個分區和3個副本的Topic。
單topic最大分區數建議為100。
topic副本數為3(當前版本限制,不可調整)。
其他建議
連接數限制:3000
消息大小:不能超過10MB
使用sasl_ssl協議訪問Kafka:確保DNS具有反向解析能力,或者在hosts文件配置kafka所有節點ip和主機名映射,避免Kafka client做反向解析,阻塞連接建立。
磁盤容量申請超過業務量 * 副本數的2倍,即保留磁盤空閑50%左右。
業務進程JVM內存使用確保無頻繁FGC,否則會阻塞消息的生產和消費。