第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

ZooKeeper 的應(yīng)用

1. 前言

在分布式應(yīng)用中,我們除了單獨(dú)使用 Zookeeper 來實(shí)現(xiàn)分布式鎖、配置中心等功能外,在我們使用一些優(yōu)秀的框架時,比如高性能的分布式流處理平臺 Apache Kafka,高性能的 Java RPC 框架 Apache Dubbo,它們也不同程度的依賴于 Zookeeper 服務(wù),來實(shí)現(xiàn)一些特定的功能。

在本節(jié)內(nèi)容中,我們就來學(xué)習(xí)在 Kafka 和 Dubbo 中,是如何使用 Zookeeper 的。

2. Zookeeper 在 Kafka 中的應(yīng)用

在學(xué)習(xí) Zookeeper 在 Kafka 中的應(yīng)用之前,我們先來簡單的了解一下 Kafka。

2.1 Kafka 簡介

Apache Kafka 是一個高性能的分布式流處理平臺,它可以做什么呢?

  • Kafka 可以發(fā)布和訂閱消息。
  • Kafka 可以儲存消息。
  • Kafka 可以在消息產(chǎn)生時就進(jìn)行處理。

了解了 Kafka 可以實(shí)現(xiàn)的一些功能,接下來我們需要了解的是 Kafka 系統(tǒng)的組成有哪些:

  • Broker: 消息管理者,Kafka 通常使用集群模式來提供服務(wù),集群中的單個 Kafka 節(jié)點(diǎn)就稱為 Broker;
  • Topic: 消息的主題,用于區(qū)分消息的類型,保存在 Broker 中;
  • Partition: 消息的分區(qū),Topic 下可以有一個或者多個分區(qū);
  • Producer: 消息生產(chǎn)者,Producer 將消息發(fā)布到 Topic 中,由 Broker 把消息存放到 Partition 中;
  • Consumer:消息消費(fèi)者,Consumer 從 Broker 中的 Topic 拉取消息,可以拉取多個 Topic 的消息;
  • Consumer Group: 消費(fèi)者分組,對 Consumer 進(jìn)行分組,方便對多個 Consumer 進(jìn)行消息廣播;
  • Leader: 分區(qū)副本的領(lǐng)導(dǎo)者,當(dāng)前負(fù)責(zé)讀寫操作的 Partition;
  • Follower: Leader 的跟隨者,會同步 Leader 的數(shù)據(jù),Leader 失效后從 Follower 中選舉 Leader ;
  • Offset: Partition 消息的消費(fèi)數(shù)量記錄。

簡單的了解了 Kafka,接下來我們就來介紹 Zookeeper 在 Kafka 中的應(yīng)用。

2.2 Zookeeper 在 Kafka 中的應(yīng)用

  • Topic 配置管理: Topic 的配置會注冊到 Zookeeper 中 的 config 節(jié)點(diǎn)下,根據(jù) config 節(jié)點(diǎn)來動態(tài)更新配置;
  • Broker 管理: 在每個 Broker 啟動時,都會注冊到 Zookeeper 的 brokers 節(jié)點(diǎn)下;
  • Topic 及 Partition 管理: Topic 會注冊到 brokers 節(jié)點(diǎn)下的 topics 節(jié)點(diǎn)下,Partition 會注冊到 Topic 的節(jié)點(diǎn)下;
  • Producer 負(fù)載均衡: Producer 將消息發(fā)布到 Topic 時,會根據(jù) Zookeeper 的 brokers 節(jié)點(diǎn)下的 Broker 來進(jìn)行動態(tài)的負(fù)載均衡;
  • Consumer 負(fù)載均衡: Consumer 從 Topic 拉取消息時,同樣也需要根據(jù) Zookeeper 的 brokers 節(jié)點(diǎn)下的 Broker 來進(jìn)行動態(tài)的負(fù)載均衡;
  • 消費(fèi)管理: 每個 Partition 只能被 Consumer Group 中的一個 Consumer 進(jìn)行消費(fèi),因此需要關(guān)聯(lián) Partition 與 Consumer 之間的關(guān)系,將 Consumer 的 Consumer ID 注冊到相關(guān)聯(lián)的 Partition 節(jié)點(diǎn)的臨時節(jié)點(diǎn)上;
  • Offset 記錄: 在 Consumer 對指定 Partition 進(jìn)行消息消費(fèi)的過程中,需要將 Partition 的消費(fèi)數(shù)量記錄到 Zookeeper 中。

介紹完一部分 Zookeeper 在 Kafka 中的應(yīng)用,接下來我們就來介紹在 Dubbo 中 Zookeeper 的應(yīng)用。

3. Zookeeper 在 Dubbo 中的應(yīng)用

首先我們來簡單的了解一下 Dubbo 是什么,再來介紹 Zookeeper 在 Dubbo 中的應(yīng)用。

3.1 Dubbo 簡介

Apache Dubbo 是一款高性能、輕量級的開源 Java RPC 框架,它提供了三大核心能力:

  • 面向接口的遠(yuǎn)程方法調(diào)用;
  • 智能容錯和負(fù)載均衡;
  • 服務(wù)自動注冊和發(fā)現(xiàn)。

下面是一張來自 Dubbo 官網(wǎng)的結(jié)構(gòu)圖:

Dubbo 架構(gòu)圖

從圖中我們可以看到,Dubbo 的組件一共有 5 部分:

  • Container 容器;
  • Provider 服務(wù)提供者;
  • Consumer 服務(wù)消費(fèi)者;
  • Registry 注冊中心;
  • Monitor 監(jiān)控中心。

我們來講解一下它們之間的調(diào)用關(guān)系:

  1. 從 Container 中啟動服務(wù)提供者 Provider;
  2. Provider 服務(wù)提供者把自己注冊到 Registry 注冊中心;
  3. Consumer 服務(wù)消費(fèi)者從 Registry 注冊中心訂閱服務(wù);
  4. Registry 注冊中心發(fā)送 Provider 的服務(wù)地址給 Consumer 服務(wù)消費(fèi)者;
  5. Consumer 服務(wù)消費(fèi)者遠(yuǎn)程調(diào)用 Provider 服務(wù)提供者的服務(wù);
  6. Consumer 和 Provider 的調(diào)用情況定時發(fā)送到 Monitor 監(jiān)控中心。

簡單的介紹了 Dubbo,接下來我們就來介紹 Zookeeper 在 Dubbo 中的應(yīng)用。

3.2 Zookeeper 在 Dubbo 中的應(yīng)用

在 Dubbo 官方網(wǎng)站中的注冊中心參考手冊中, Dubbo 官方推薦 Zookeeper 作為注冊中心。下面是一張來自 Dubbo 官網(wǎng)的 Zookeeper 節(jié)點(diǎn)結(jié)構(gòu)圖:

我們來分析一下節(jié)點(diǎn)的結(jié)構(gòu),根據(jù) Zookeeper 的樹狀結(jié)構(gòu),Dubbo 把節(jié)點(diǎn)分為 4 層:

  1. 第一層為 Root 節(jié)點(diǎn),固定為 dubbo;
  2. 第二層為服務(wù)節(jié)點(diǎn),我們可以根據(jù)不同的服務(wù)來注冊不同的服務(wù)節(jié)點(diǎn),同時 Monitor 會監(jiān)聽服務(wù)節(jié)點(diǎn);
  3. 第三層為服務(wù)的類型,分別為服務(wù)提供者和服務(wù)消費(fèi)者,固定為 providers 和 consumers ;
  4. 第四層為服務(wù)提供者和服務(wù)消費(fèi)者的 URL,如果是 Provider 就會注冊到 providers 節(jié)點(diǎn)下的臨時節(jié)點(diǎn)。如果是 Consumer 就注冊到 consumers 節(jié)點(diǎn)下的臨時節(jié)點(diǎn),并且對同一服務(wù)下的 providers 開啟監(jiān)聽。

我們來總結(jié)一下 Zookeeper 作為注冊中心的原理:服務(wù)提供者把 URL 注冊到 providers 下的臨時節(jié)點(diǎn),服務(wù)消費(fèi)者從 providers 獲取 URL 列表,并對 providers 開啟子節(jié)點(diǎn)事件的監(jiān)聽。根據(jù) Zookeeper 臨時節(jié)點(diǎn)的特性,服務(wù)提供者只要與 Zookeeper 斷開連接,Zookeeper 服務(wù)就會把該臨時節(jié)點(diǎn)移除,此時服務(wù)消費(fèi)者就會收到 providers 的子節(jié)點(diǎn)移除事件,然后更新自己的服務(wù)提供者的 URL 列表。

4. 總結(jié)

在本節(jié)內(nèi)容中,我們學(xué)習(xí)了在 Kafka 和 Dubbo 中 Zookeeper 的應(yīng)用,其實(shí) Zookeeper 的應(yīng)用就是根據(jù)它的樹狀結(jié)構(gòu),節(jié)點(diǎn)的特性以及節(jié)點(diǎn)的監(jiān)聽機(jī)制,同學(xué)們在使用 Zookeeper 時可以利用好這些點(diǎn)。以下是本節(jié)內(nèi)容總結(jié):

  1. Zookeeper 在 Kafka 中的應(yīng)用。
  2. Zookeeper 在 Dubbo 中的應(yīng)用。