1. 程式人生 > >kafka學習小結(springboot2+kafka組成叢集模式3同步非同步模式)

kafka學習小結(springboot2+kafka組成叢集模式3同步非同步模式)

接著上一篇補充

官網上關於這一塊迷迷糊糊的看不懂,自己總結了下其中的差異:

    我們一般沒做特殊處理的就是同步模式,生產者傳送訊息,然後交給消費者,這裡面我們也可以對訊息的結果進行處理,防止訊息丟失

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傳送訊息居然還可以指定分割槽,時間,學習到了。。

至於非同步推送的缺陷,暫時還處於學習瞭解,希望大佬解惑!