kafka 乙個最基本的架構認識:由多個 broker 組成,每個 broker 是乙個節點;你建立乙個 topic,這個 topic 可以劃分為多個 partition,每個 partition 可以存在於不同的 broker 上,每個 partition 就放一部分資料。
如果用rabbitmq來理解的話,可以將broker理解為rabbitmq的每個節點,而每個topic就是乙個queue,乙個queue可以劃分成多個分片,每個分片就是partition。
這就是天然的分布式訊息佇列,就是說乙個 topic 的資料,是分散放在多個機器上的,每個機器就放一部分資料。
kafka 0.8 以前,是沒有高可用機制的,任何乙個 broker 宕機了,那個 broker 上的 partition 就廢了,沒法寫也沒法讀,沒有什麼高可用性可言。
kafka 0.8 以後,提供了 ha 機制,就是 replica(複製品) 副本機制。每個 partition 的資料都會同步到其它機器上,形成自己的多個 replica 副本。所有 replica 會選舉乙個 leader 出來,那麼生產和消費都跟這個 leader 打交道,然後其他 replica 就是 follower。寫的時候,leader 會負責把資料同步到所有 follower 上去,讀的時候就直接讀 leader 上的資料即可。
為什麼只能讀寫leader呢?
要是你可以隨意讀寫每個follower,那麼就要關心資料一致性的問題,系統複雜度太高,很容易出問題。kafka 會均勻地將乙個 partition 的所有 replica 分布在不同的機器上,這樣才可以提高容錯性。如果某個 broker 宕機了,那個 broker上面的 partition 在其他機器上都有副本。如果這個宕機的 broker 上面有某個 partition 的 leader,那麼此時會從 follower 中重新選舉乙個新的 leader 出來,繼續讀寫那個新的 leader ,這就有所謂的高可用性了。
如何保證redis高併發及高可用
1 面試題 如何保證redis的高併發和高可用?redis的主從複製原理能介紹一下麼?redis的哨兵原理能介紹一下麼?2 考點分析 其實問這個問題,主要是考考你,redis單機能承載多高併發?如果單機扛不住如何擴容抗更多的併發?redis會不會掛?既然redis會掛那怎麼保證redis是高可用的?...
如何保證訊息佇列的高可用
1 面試題 如何保證訊息佇列的高可用啊?2 面試官心理分析 如果有人問到你mq的知識,高可用是必問的,因為mq的缺點,我剛才已經說過了,有好多,導致系統可用性降低,等等。所以只要你用了mq,接下來問的一些要點肯定就是圍繞著mq的那些缺點怎麼來解決了。要是你傻乎乎的就乾用了乙個mq,各種問題從來沒考慮...
HDFS如何保證高可用性
1 實現方式 namenode冗餘備份 2 具體過程 多個節點作為namenode,其中乙個處於active狀態,其它處於standby狀態。目前的實現有乙個條件,需要借助類似nfs這樣的分布式共享儲存系統,而且節點要能夠訪問這一系統。在active的namespace上的每個改變,需要同步到處於s...