2017-02-06 105 views
0

我必須在兩個具有相同主題和配置的不同數據中心(DC)中設置兩個kafka羣集。原因在於兩個數據中心之間的連接性很差,我們無法創建全球數據中心。在同步中保留兩個kafka羣集的最佳方法

我們正在讓製作人和消費者發佈並標註每個區議會的主題。

問題是我需要保持兩個羣集同步。 可以這樣說:所有消息都寫入第一個DC應該最終被複制到第二個,並且在其他地方。

我正在評估kafka MirrorMaker工具,它通過消耗第一條消息並將消息傳遞給第二條消息來創建鏡像。但是也需要將數據從第二個複製到第一個,因爲寫入數據在兩個羣集中都是允許的。

我不認爲卡夫卡MirrorMaker工具適合我們的情況。 是否有任何建議?

在此先感謝。

+0

請參閱https://www.confluent.io/blog/enterprise-streaming-multi-datacenter-replication-apache-kafka/這可能是一個幫助。 – amethystic

+0

感謝@amethystic您的建議,但它不是真的我們的情況。 我的情況是,我們有一個應用程序在兩個不同的DC中運行,並由兩個Kafka集羣支持。兩者都在活動模式(不是主從模式)意味着如果一個DC中的實例消耗的消息將被複制到另一個DC,但不會被同一實例類型處理。你有什麼想法嗎?我遇到問題,我們如何識別在一個區域內發生的信息,而不會在另一個區域內處理。 – Joey

回答

2

根據您的具體要求,您可以將MirrorMaker用於您的用例。

一種選擇是隻有兩個單獨的主題,我們稱它們爲羣集1上的topic1和羣集2上的topic2。所有生成的線程寫入「本地」主題,然後使用mirrormaker將此主題複製到遠程簇。

對於您的消費者,您只需訂閱任何與您最接近的羣集的兩個主題,這樣您將獲得寫在任一羣集上的所有記錄。 我已經創建了一個例證是希望幫助:

enter image description here

或者,你可以在兩個羣集創建聚集主題和使用MirrorMaker數據複製到這個話題,這將讓你有一個主題中的所有數據供消費。 這樣您就可以在同一個羣集上覆制數據,但您可以通過降低輸入主題上的保留設置來處理此問題。 再次,希望下面的圖片有助於解釋我的想法: enter image description here 爲了實現此目的,您需要配置MirrorMaker以將主題複製到具有不同名稱的主題中,這不是標準的事情如果你想進一步調查這個選項,我已經寫了一個小的blog post如何做到這一點。

+0

謝謝@sönke-liebau您的闡述性解釋。它在兩個DC之間複製時遇到了問題。 但是,我們正在部署在多個地區的應用程序。我怎麼能知道一個由DC1中的實例處理的消息在DC2中將不會被處理爲相同的實例類型,假設所有的服務都是無狀態的。 非常感謝您的幫助。 – Joey

+0

Hi @Van,爲了確保我正確理解你,你想要做的是處理所有消息(保留上面的示例 - 「Sales_All」主題)在兩個DC中分佈,同時確保沒有消息被處理兩次? –

+0

是的,這是我的意圖 – Joey

相關問題