前言
這次的學習過程來歷有點奇怪。我本來是學習kafka過程中正常的學到了這個acks機制,但是發現很多地方寫的都不太明白。因此決定還是自己來看一下源碼。
具體來說:請看搜索結果(Google引擎)
這個是搜索“Kafka的ack”所得到的結果。
第一條:是直接轉載的其他地方。并且只是說了0 1 -1,至于這個是什么,看完還是懵逼。
第二條:看起來清晰了許多,感覺總結的也很精辟…
第三條是完全復制的第二條。
第四條是黑馬的網站,其中給到了一個舉例…
問題出在了第五條,來自火山引擎的介紹頁:
本覺得是最權威的,結果是不確保真實性的ai答案…而且其中出現了與其他地方描述不一致的:這里說acks是出現在消費者那邊的。
甚至于,如果搜“kafka的ack機制”,那么——
acks機制源碼
其實這個源碼也沒多少,畢竟只是發送機制中的一個小的參數。在kafka、sender部分中。
https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/producer/internals/Sender.java
其中,關于acks
的定義如下:
/* the number of acknowledgements to request from the server */private final short acks;
在代碼的644行部分,是acks == 0的情況。
// this is the acks = 0 case, just complete all requestsfor (ProducerBatch batch : batches.values()) {completeBatch(batch, new ProduceResponse.PartitionResponse(Errors.NONE), correlationId, now, null);}
在918行部分,是acks != 0 的情況,表示期望獲取服務端響應。
ClientRequest clientRequest = client.newClientRequest(nodeId, requestBuilder, now, acks != 0,requestTimeoutMs, callback);
acks機制功能
很顯然,就是網上那樣…
acks機制producer的消息發送確認機制,用于防止消息的丟失。
具體參考此文:https://blog.csdn.net/qq_32445015/article/details/123006365
后記
搜索kafka的ack
和kafka的ack機制
,搜出來的結果都是垃圾。。。
但如果搜索kafka的ack機制源碼
,還是能搜到不少寶貝。
更加深入透徹的理解了——學習要以源碼為準,這句話。
還有就說,發現文章是ai生成的,那就可以直接潤了。看你的ai文,那我何不自己去問gpt呢。