kafka的ack機制:在kafka傳送資料的時候,每次傳送訊息都會有乙個確認反饋機制,確保訊息正常的能夠被收到,其中狀態有0,1,-1。
producer.type=syncrequest.required.acks=1
producer.type=asyncrequest.required.acks=1
queue.buffering.max.ms=5000
queue.buffering.max.messages=10000
queue.enqueue.timeout.ms = -1
batch.num.messages=200
結論:producer有丟資料的可能,但是可以通過配置保證訊息的不丟失。
通過offset commit 來保證資料的不丟失,kafka自己記錄了每次消費的offset數值,下次繼續消費的時候,會接著上次的offset進行消費。
而offset的資訊在kafka0.8版本之前儲存在zookeeper中,在0.8版本之後儲存到topic中,即使消費者在執行過程中掛掉了,再次啟動的時候會找到offset的值,找到之前消費訊息的位置,接著消費,由於offset的資訊寫入的時候並不是每條訊息消費完成後都寫入的,所以這種情況有可能會造成重複消費,但是不會丟失訊息。
唯一例外的情況是,我們在程式中給原本做不同功能的兩個consumer組設定kafkaspoutconfig.bulider.setgroupid的時候設定成了一樣的groupid,這種情況會導致這兩個組共享同乙份資料,就會產生組a消費partition1,partition2中的訊息,組b消費partition3的訊息,這樣每個組消費的訊息都會丟失,都是不完整的。 為了保證每個組都獨享乙份訊息資料,groupid一定不要重複才行。
每個broker中的partition我們一般都會設定有replication(副本)的個數,生產者寫入的時候首先根據分發策略(有partition按partition,有key按key,都沒有輪詢)寫入到leader中,follower(副本)再跟leader同步資料,這樣有了備份,也可以保證訊息資料的不丟失。
kafka如何保證訊息不丟失
a 消費端弄丟了資料 關閉自動提交offset,在自己處理完畢之後手動提交offset,這樣就不會丟失資料。b kafka弄丟了資料 一般要求設定4個引數來保證訊息不丟失 給topic設定replication.factor引數 這個值必須大於1,表示要求每個partition必須至少有2個副本。在...
如何保證kafka訊息不丟失
這裡的kafka值得是broker,broker訊息丟失的邊界需要對齊一下 1 已經提交的訊息 2 有限度的持久化 如果訊息沒提交成功,並不是broke丟失了訊息 有限度的持久化 broker可用 producer.send object msg 這個傳送訊息的方式是非同步的 fire and fo...
kafka保證訊息不丟失
一 消費端保證訊息不丟失 消費端從broker取到訊息以後,先處理業務邏輯,然後再手動提交,這樣就可以避免消費端訊息丟失。二 生產端訊息不丟失 首先是設定每個訊息分割槽的副本,一本是幾個broker就配置幾個分割槽,然後設定如下,保證生產這生產的訊息傳送到broker時,不但leader確認收到訊息...