1

Mirroring正在Kafka集羣之間複製數據,而Replication用於複製Kafka集羣中的節點。Apache Kafka:鏡像與複製

Replication是否有任何具體的用途,如果Mirroring已經設置?

回答

3

它們用於不同的用例。我們試着澄清一下。

documentation描述,

在卡夫卡添加複製的目的是更有力的耐用性和更高的可用性。我們希望保證任何成功發佈的消息都不會丟失,甚至在服務器出現故障時也可以使用。這種故障可能由機器錯誤,程序錯誤或更常見的軟件升級引起。我們有以下高層目標:

在集羣內可能有網絡分區(單個服務器出現故障等等),因此我們希望在節點之間提供複製。給定三個節點和一個羣集的設置,如果server1失敗,則Kafka可以選擇兩個副本。同一集羣意味着相同的響應時間(好吧,它也取決於如何配置這些服務器,當然,但在正常情況下,它們應該沒有太大差別)。另一方面,例如,當您要遷移數據中心或有多個數據中心(例如,美國的AWS和愛爾蘭的AWS)時,鏡像似乎非常有價值。當然,這只是幾個用例。因此,您在此所做的工作是讓屬於同一數據中心的應用程序以更快,更好的方式訪問數據 - 在某些情況下數據的局部性就是一切。

如果每個集羣中有一個節點,如果發生故障,可能會有更高的響應時間,比如說,從位於愛爾蘭的AWS到美國的AWS。

您可能會聲稱爲了實現數據局部性(從羣集中的kafka中讀取羣集中的服務),仍然需要將數據從一個羣集複製到另一個羣集。這是毫無疑問的,但是通過鏡像可以獲得的優勢可能比通過位於另一個數據中心的Kafka直接讀取(通過SSH隧道?)所獲得的優勢更高,例如,單個連接關閉,客戶端連接/會話時間更長(取決於數據中心的位置),立法(一些數據可以在一個國家收集,而另一些數據則不應該)。

複製是提高可用性的基礎。您不應該在數據位置很重要的上下文中使用鏡像來處理高可用性。與此同時,您不應該只在需要跨數據中心複製數據的情況下使用複製(我甚至不知道您是否可以在沒有鏡像/ ssh隧道的情況下)。