我試圖設計一個物聯網系統,它將許多物聯網設備發送不同類型的傳感器數據到前端負載均衡服務器,然後將消息發送到攝取系統(目前認爲Google Cloud PubSub)。然後有消費者使用消息並將它們寫入不同的數據庫和表。每個傳感器數據類型都有自己的數據庫。攝入系統應該在哪裏出現?
扇出發生在哪裏?
之前發佈訂閱系統:如果前端做扇出,那麼它必須被縮放足夠大,有足夠的處理能力來看待每封郵件的內容找出將其發送結束這話題。然後,我將爲每個消息和每個主題的消費者分別設置一個主題。
AFTER pubsub系統:如果我只有一個主題,即前端只是將所有消息推送到任何類型的消息中,那麼需要縮放該主題的消費者以便能夠消費和處理每個消息以確定哪個數據庫寫信給。這也意味着這一個消費者代碼需要訪問所有的數據庫。
INSIDE pubsub系統:讓pubsub做扇出,以便即使發佈者只發布到一個主題,該主題也有多個訂閱(每個數據類型一個訂閱),並且每個消費者從他們自己的訂閱刪除所有消息,這些消息是它們要使用的數據類型。看起來卡夫卡可能是更好的用途。
#3非常適合卡夫卡。有一個Kafka連接器或Google PubSub,所以你甚至可以同時使用PubSub消息並將其發送到Kafka主題(或反之),而無需任何編碼。請參閱https://github.com/GoogleCloudPlatform/pubsub/blob/master/kafka-connector/README.md –