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

ZooKeeper 的應(yīng)用

1. 前言

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

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

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

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

2.1 Kafka 簡(jiǎn)介

Apache Kafka 是一個(gè)高性能的分布式流處理平臺(tái),它可以做什么呢?

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

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

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

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

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

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

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

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

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

3.1 Dubbo 簡(jiǎn)介

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

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

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

Dubbo 架構(gòu)圖

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

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

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

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

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

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

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

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

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

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

4. 總結(jié)

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

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