kafka學習小結(springboot2+kafka組成叢集模式3同步非同步模式)
阿新 • • 發佈:2018-11-22
接著上一篇補充
官網上關於這一塊迷迷糊糊的看不懂,自己總結了下其中的差異:
我們一般沒做特殊處理的就是同步模式,生產者傳送訊息,然後交給消費者,這裡面我們也可以對訊息的結果進行處理,防止訊息丟失
kafkademo中,修改REST介面如下:
ListenableFuture返回物件自帶callback方法;我們可以根據成功或者失敗進行下一步操作,不過這裡主要講的不是這個
在同步訊息推送有可能存在的問題,如果你只用一個kafka或者部署在一臺機子上時,當網路波動時,就會出現大量的資訊丟失情況造成阻塞狀態,考慮到這種情況,建議採用非同步推送方式
具體實現:
第一步:@EnableAsync//開啟非同步模式 ,將此註解配置到config裡
第二步:方法上加@Async
為了保證我們對於同步的缺陷進一步完善,我們可以進行異常丟擲,在配置yml配置如下:
kafka:
bootstrap-servers: 服務地址
producer:
group-id: newgroup
buffer-memory: 40960
buffer-memory控制生產者可用的快取總量,如果訊息傳送速度比其傳輸到伺服器的快,將會耗盡這個快取空間。當快取空間耗盡,其他傳送呼叫將被阻塞,阻塞時間的閾值通過max.block.ms設定, 之後它將丟擲一個TimeoutException
測試下,我們啟動demo傳送訊息,關閉demo1,demo2,模擬異常
傳送成功;
開啟demo1,demo2,發現:
同步,非同步模式下都行,想模擬測試沒有好的辦法,哎
繼續整理髮現
kafka傳送訊息居然還可以指定分割槽,時間,學習到了。。
至於非同步推送的缺陷,暫時還處於學習瞭解,希望大佬解惑!