Kafka的Ack機(jī)制通過配置acks
參數(shù)來設(shè)置。acks
參數(shù)有三個(gè)可選的值:
acks=0
:生產(chǎn)者不會(huì)等待來自服務(wù)器的任何響應(yīng)。消息被立即認(rèn)為已經(jīng)發(fā)送成功,但是這種情況下可能會(huì)丟失消息。acks=1
:生產(chǎn)者將會(huì)等待來自服務(wù)器的確認(rèn)消息。當(dāng)消息被服務(wù)器接收后,生產(chǎn)者會(huì)收到一個(gè)來自服務(wù)器的確認(rèn)消息,但是服務(wù)器并不一定會(huì)將消息寫入磁盤。這種情況下,如果服務(wù)器在消息寫入磁盤之前崩潰,消息將會(huì)丟失。acks=all
:生產(chǎn)者將會(huì)等待來自服務(wù)器的完全確認(rèn)。當(dāng)消息被服務(wù)器接收并寫入磁盤后,生產(chǎn)者會(huì)收到一個(gè)來自服務(wù)器的確認(rèn)消息。這種情況下,消息不會(huì)丟失,但是會(huì)增加延遲。可以在生產(chǎn)者的配置文件中設(shè)置acks
參數(shù)。例如:
properties.put("acks", "all");
在設(shè)置acks
參數(shù)時(shí),需要根據(jù)實(shí)際的需求來選擇合適的配置。如果對(duì)數(shù)據(jù)的可靠性要求較高,可以選擇acks=all
,但是這會(huì)增加延遲。如果對(duì)延遲要求較高,可以選擇acks=0
,但是這可能會(huì)導(dǎo)致消息丟失。