天天看點

Zookeeper、Nacos、Dubbo、Kafka四者關系

作者:IT楓鬥者

首先分下了解下:

Zookeeper

Zookeeper 是 Apache Hadoop 的子項目,是一個樹型的目錄服務,支援變更推送,适合作為 Dubbo 服務的注冊中心,工業強度較高。

Zookeeper、Nacos、Dubbo、Kafka四者關系

Nacos

Nacos 是 Alibaba 公司推出的開源工具,用于實作分布式系統的服務發現與配置管理。Nacos 是 Dubbo 生态系統中重要的注冊中心實作。

Zookeeper、Nacos、Dubbo、Kafka四者關系

Dubbo

Dubbo 是阿裡巴巴公司開源的一個Java高性能優秀的服務架構,使得應用可通過高性能的 RPC 實作服務的輸出和輸入功能,可以和 Spring架構無縫內建。

Zookeeper、Nacos、Dubbo、Kafka四者關系

Kafka

Kafka是最初由Linkedin公司開發,是一個分布式、支援分區的(partition)、多副本的(replica),基于Zookeeper協調的分布式消息系統。

它的最大的特性就是可以實時的處理大量資料以滿足各種需求場景:

  • 基于hadoop的批處理系統
  • 低延遲的實時系統
  • storm/Spark流式處理引擎
  • web/nginx日志
  • 通路日志
  • 消息服務等等

用scala語言編寫,Linkedin于2010年貢獻給了Apache基金會并成為頂級開源 項目。

Zookeeper與Nacos

1、配置中心

Nacos和Zookeeper都可以作為配置中心,做一些可以實時變化的配置資料存儲,然後實時更新線上資料。

差別:存儲和資料更新

Nacos:依賴Mysql資料庫做資料存儲,當有資料更新的時候,直接更新資料庫的資料,然後将資料更新的資訊異步廣播給Nacos叢集中所有服務節點資料變更,再由Nacos服務節點更新本地緩存,然後将通知用戶端節點資料變化。

Zookeeper:利用zk的樹型結構做資料存儲,當有資料更新的時候使用過半機制保證各個節點的資料一緻性;然後通過zk的事件機制通知用戶端。

最大的差別就是伺服器存儲位置不同,它們分别采用mysql和zk本身存儲

消息發送,一個有采用過半機制保持一緻性,另外一個異步廣播,通過背景線程重試保證。

2、注冊中心

Nacos:nacos支援兩種方式的注冊中心,持久化和非持久化存儲服務資訊。

Zookeeper、Nacos、Dubbo、Kafka四者關系

Zookeeper:利用zk的樹型結構做資料存儲,服務注冊和消費資訊直接存儲在zk樹形節點上,叢集下同樣采用過半機制保證服務節點間一緻性

Zookeeper與kafka

1、Kafka把它的meta資料都存儲在ZK上,是以說ZK是必要存在的,沒有ZK沒法運作Kafka;在老版本(0.8.1以前)裡面消費段(consumer)也是依賴ZK的,在新版本中移除了用戶端對ZK的依賴,但是broker依然依賴于ZK。

2、kafka是消息隊列,Zookeeper是服務的控制中心;消費者要通路服務,需要知道現在哪些生産者(對于消費者而言,kafka就是生産者)是可用的,就需要zk的排程。

Zookeeper與dubbo

Dubbo建議使用Zookeeper作為服務的注冊中心。

Dubbo是一個架構,用于服務間的排程,服務程式編寫使用dubbo做接口,利用dubbo實作服務與服務之間還有Zookeeper之間的通訊。

Zookeeper的作用:

Zookeeper用來注冊服務和進行負載均衡,哪一個服務由哪一個機器來提供必需讓調用者知道,簡單來說就是ip位址和服務名稱的對應關系。當然也可以 通過寫死的方式把這種對應關系在調用方業務代碼中實作,但是如果提供服務的機器挂掉調用者無法知曉,如果不更改代碼會繼續請求挂掉的機器提供服務。

Zookeeper、Nacos、Dubbo、Kafka四者關系

dubbo:

它是管理中間層的工具,在業務層到資料倉庫間有非常多服務的接入和服務提供者需要排程,dubbo提供一個架構解決這個問題。

注意:

這裡的dubbo隻是一個架構,這個架構中要完成排程必須要有一個分布式的注冊中心,儲存所有服務的中繼資料,你可以用zk,也可以用别的。

  • Zookeeper與nacos除了實作方式不一樣,其他功能都差不多。
  • dubbo就是一個RPC調用架構,它需要分布式注冊中心Zookeeper或nacos。
  • kafka就是依賴Zookeeper來運作的。

繼續閱讀