1. 程式人生 > 其它 >kafka學習之Exactly Once

kafka學習之Exactly Once

將伺服器的ACK在設定為-1,可以保證producer到server之間的資料不丟失 即at least once 。

將伺服器的ACK級別設定為0,可以保證生產者每條訊息只會被髮送一次 即at most once。

at least once 可以保證資料不丟失 但是不能保證資料不重複,相對的 at most once 可以保證資料不重複 但是不能保證資料不丟失

對於一些非常重要的資訊 下游資料消費者要求資料既不重複也不丟失 Exactly Once

冪等性:就是指producer無論向server傳送多少次重複的資料,server端只會持久化一條,冪等性結合at least once就構成了exactly once

要啟用冪等性,只需要將 Producer 的引數中 enable.idompotence 設定為 true 即可。Kafka的冪等性實現其實就是將原來下游需要做的去重放在了資料上游。開啟冪等性的 Producer 在初始化的時候會被分配一個 PID,發往同一 Partition 的訊息會附帶 Sequence Number。而Broker 端會對<PID, Partition, SeqNumber>做快取,當具有相同主鍵的訊息提交時,Broker 只會持久化一條。但是 PID 重啟就會變化,同時不同的 Partition 也具有不同主鍵,所以冪等性無法保證跨分割槽跨會話的 Exactly Once