Kafka如何保證訊息不丟之無訊息丟失配置
已提交與有限度
Kafka對已提交的訊息做有限度的持久化保證。
- 已提交訊息:Kafka的若干個Broker成功接收到訊息並寫入日誌檔案後,告訴生產者已成功提交。已提交的定義如下
- 一個Broker成功儲存訊息為已提交
- 所有Broker都成功儲存訊息為已提交
- 有限度的持久化保證:有限度的意思是假如有N個Broker,要想保證持久化,就至少有一個存活。
生產者丟失資料
非同步傳送訊息
當非同步傳送訊息的時候,會立即返回,但是不能認為訊息傳送成功,這個操作代表的意思是傳送後不管。出現丟訊息的原因如下:
- 網路抖動,訊息沒有傳送到Broker端
- 訊息不合格,被Broker拒絕接受
解決方式
Producer 永遠要使用帶有回撥通知的傳送 API,也就是說不要使用 producer.send(msg),而要使用 producer.send(msg, callback)。
當出現訊息失敗的情況,針對性的做相應處理即可
消費者丟失資料
Consumer 端丟失資料主要體現在 Consumer 端要消費的訊息不見了
ConsumerA 當前位移值是9,ConsumerB當前位移值是11
更新offset時機
通過消費訊息、然後再更新位移,這樣能最大限度的保證訊息不丟失,但是有可能帶來訊息重複消費的問題
設定手動提交
Consumer不要開啟自動提交位移,通過應用程式手動提交位移
最佳實踐
- 使用帶有回撥通知的send方法producer.send(msg, callback)。
- 設定 acks = all,代表所有的副本Broker都要收到訊息才算是已提交,最高階別的已提交定義
- 設定retries為一個較大的值。自動重試訊息,避免是吧
- Broker引數unclean.leader.election.enable = false。控制哪些Broker有資格競選分割槽的Leader。
- Broker引數 replication.factor>=3,將訊息儲存多份,通過冗餘來方式丟失
- Broker引數 min.insync.replicas > 1,控制訊息至少要被寫入多個副本才算是已提交。
- replication.factor > min.insync.replicas,兩者相等,那麼只要有一個副本掛機,整個分割槽就無法正常工作了,推薦設定為replication.factor = min.insync.replicas + 1。
- 確保訊息消費完再提交。Consumer端有個引數enable.auto.commit,最好把它設定成 false,並採用手動提交位移的方式。
相關文章
- RabbitMQ-如何保證訊息不丟失MQ
- RabbitMq如何確保訊息不丟失MQ
- 關於MQ的幾件小事(四)如何保證訊息不丟失MQ
- RabbitMQ使用教程(四)如何通過持久化保證訊息99.99%不丟失?MQ持久化
- RabbitMQ防止訊息丟失MQ
- 阿里二面:要保證訊息不丟失,又不重複,訊息佇列怎麼選型?阿里佇列
- RabbitMQ-如何保證訊息在99.99%的情況下不丟失MQ
- TimeLine模型下確保訊息有序不丟模型
- 高併發場景下,如何保證生產者投遞到訊息中介軟體的訊息不丟失?
- RocketMQ訊息丟失解決方案:事務訊息MQ
- 訊息推送平臺有沒有保證資料不丟?
- 如何處理RabbitMQ 訊息堆積和訊息丟失問題MQ
- RocketMq訊息丟失問題解決MQ
- 《RabbitMQ》 | 訊息丟失也就這麼回事MQ
- 伺服器當機會導致Kafka訊息丟失嗎伺服器Kafka
- Elasticsearch如何保證資料不丟失?Elasticsearch
- Kafka 訊息丟失與消費精確一次性Kafka
- RocketMQ的訊息是怎麼丟失的MQ
- 訊息佇列之如何保證訊息的可靠傳輸佇列
- 高併發場景下,如何保證生產者投遞到訊息中介軟體的訊息不丟失?【石杉的架構筆記】架構筆記
- mq要如何處理訊息丟失、重複消費?MQ
- ZMQ釋出-訂閱模式踩坑之——訊息丟失部分MQ模式
- 面試官問:Kafka 會不會丟訊息?怎麼處理的?面試Kafka
- RabbitMQ,RocketMQ,Kafka 事務性,訊息丟失和訊息重複傳送的處理策略MQKafka
- kafka 如何保證不重複消費又不丟失資料?Kafka
- 如何在丟失的Mac上設定自定義鎖屏訊息Mac
- 訊息佇列-如何保證訊息的不被重複消費(如何保證訊息消費的冪等性)佇列
- Spark Streaming使用Kafka保證資料零丟失SparkKafka
- RabbitMQ:訊息丟失 | 訊息重複 | 訊息積壓的原因+解決方案+網上學不到的使用心得MQ
- Redis能保證資料不丟失嗎?Redis
- 面試官:請談談寫入訊息中介軟體的資料,如何保證不丟失?【石杉的架構筆記】面試架構筆記
- Kafka 如何保證訊息消費的全域性順序性Kafka
- MQ不丟訊息,究竟是怎麼實現的?MQ
- 分散式訊息佇列:如何保證訊息的順序性分散式佇列
- 解決RabbitMQ訊息丟失與重複消費問題MQ
- RocketMQ訊息丟失解決方案:同步刷盤+手動提交MQ
- RabbitMQ高階之如何保證訊息可靠性?MQ
- BigDecimal為什麼能保證精度不丟失?Decimal