我從http://engineering.linkedin.com/kafka/intra-cluster-replication-apache-kafkaKafKa如何保證一致性和可用性?
瞭解到我們的目標是支持一個單一的數據中心,其中,網絡分區是罕見
在分佈式系統中的卡夫卡羣集複製,我覺得「分區」是基本,所以我不知道當只有服務器節點失敗時,Kafka保證沒有分區的可用性。或者我錯過了一些東西
我從http://engineering.linkedin.com/kafka/intra-cluster-replication-apache-kafkaKafKa如何保證一致性和可用性?
瞭解到我們的目標是支持一個單一的數據中心,其中,網絡分區是罕見
在分佈式系統中的卡夫卡羣集複製,我覺得「分區」是基本,所以我不知道當只有服務器節點失敗時,Kafka保證沒有分區的可用性。或者我錯過了一些東西
我想你可能會混淆「分區」與網絡分區的分裂感。
卡夫卡確實提供分片和複製。卡夫卡爲每個主題的每個分區選擇一位獨特的領導者。所有針對主題分區的寫入均通過領導。這與您引用的文檔相關,表明Kafka青睞的可用性超過了分區容差。
網絡分區的含義是服務器之間的通信中斷。網絡通信故障在局域網中比在廣域網中更爲罕見,所以卡夫卡的架構旨在提供一致性,除非發生網絡分區。在網絡分區的情況下,Kafka的副本可能會彼此分離,分區兩側的節點都可能接受寫入。這可能發生的原因是因爲當發生網絡分區時,分區每邊的節點可能會將分區另一端的節點視爲失敗,而事實上它們之間的鏈接只會失敗。這意味着網絡分區的每一側可以爲某些主題分區選擇新的領導者,因此意味着網絡分區的每一側都可以接受針對某些主題分區的寫入。一旦網絡分區恢復(網絡已修復),分區一側的寫入操作可能會覆蓋分區另一側的寫入操作。
感謝您的回覆,kuujo,我從你的回答總結,例如,有兩個網絡端(side a,b),當話題x在兩個網絡端做出三個分區時(p1在a端, p2,p3在b)中,p1是本主題的領導者。所以當a側和b側之間的網絡斷開時,p2,p3必須選擇b側的領導者作爲話題,而p1仍然是話題a側的領導者。因此,這個話題發生了兩次寫入,並且不能保證一致性。是對的嗎? – regrecall