我是設計系統的新手,對消息隊列和協調服務(zookeeper)有一些疑問。使用消息隊列和協調服務的設計系統
這將是巨大的,如果有人可以澄清這些概念: -
我在我設計的系統MQ的理解: -
我將生產性服務,這將創建消息,並加入到MQ。消費者將使用此消息並執行相應的操作。一旦消費者ACK完成消息處理, MQ會將偏移量移至下一個偏移量。我不希望我的郵件被錯過,所以我必須確保郵件成功使用。此外,我試圖讓這個系統消耗一次消息(嘗試儘可能接近)。
現在我基於這樣的認識以下幾個問題: -
1)如果我想我在同一個DC生產者和消費者要運行多個實例(高可用性),那麼我需要有生產者和消費者都是獨立的Zookeeper服務?我的所有不同的服務(在微服務世界中)是否都需要單獨的zookeeper服務器/實例,或者同一個實例可以解決這個問題?
2)當消費者使用消息時,它會在消費完消息後對其進行確認(完成處理並採取任何所需的操作)。我想了解一個系統每秒鐘會有幾千個請求的速度會如何加快。如果我們讀取更多的消息或不等待ACK直到處理,那麼在消費者失敗的情況下,這些消息將被錯過,因爲它們從未成功處理過。我知道擁有更多的消費者將會使其同時工作,但我不清楚這個概念是如何工作的。有人可以向我解釋什麼是消費和配置組件之間的交互的正確方式,以使其優化以及持久性,高可用性,可靠性以及關閉到一次模型。
編輯:我打算在系統中使用Java,Zookeeper,Kafka,Cassandra。