我們在使用producer產生資料時,如何保證所產生的資料已經被kafka收錄。我們在producer中可以通過配置返回值來確定這些。
props.put("request.required.acks", "1");
這個配置大概意思就是producer每產生一條資料到partitions都會有乙個返回值,這個返回值有三種:「-1」,「0」,「1」。
返回值為「0」時,表示producer每生產一條資料不會等broker確認是否已經提交了資料到log。(0.7
版本就是這樣做的,
這個選擇提供了最小的時延但同時風險最大
,因為當server宕機時,資料將會丟失)。
返回值為「1」時,表示producer每生產一條資料會跟leader的replica確認是否收到資料。
這個選擇
延時較小同時確保了server確認接收成功
。返回值為「-1」時,表示producer每生產一條資料會跟leader的所有replica確認是否收到資料。這個選擇延時最大。
然而,這種方式並沒有完全消除丟失訊息的風險,因為同步replicas的數量可能是1
。如果要完全消除丟失訊息風險,還需要如下配置。
min.insync.replicas = -1
當producer設定request.required.acks為-1時,min.insync.replicas指定replicas的最小數目(必須確認每乙個repica的寫資料都是成功的),如果這個數目沒有達到,producer會產生異常。)
我們可以根據實際需要選擇不同的配置。
有返回值和無返回值函式
前面在定義函式時,有些函式使用了return語句,有些函式沒有使用return語句,使用return語句與不使用return語句有什麼區別呢?由前面的章節我們知道,若定義函式時沒有使用return語句,則預設返回乙個none。要返回乙個none,可以只寫乙個return,但要返回具體的數值,就需要在...
返回值優化
通過傳值方式返回要建立新物件時,應注意使用的形式,例如在operator return integer left.l right.l 咋看起來這像是乙個 對乙個建構函式的呼叫 其實並非如此。這是臨時物件語法,它是在說 建立乙個臨時integer物件並返回它 據此我們可能認為如果建立乙個有名字的區域性...
返回值優化
返回值優化,是一種屬於編譯器的技術,它通過轉換源 和物件的建立來加快源 的執行速度。rvo return value optimization。class complex 複數 complex const complex a real a.real imag a.imag complex opera...