成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

知其然而知其所以然,為什么Kafka在2.8版本中會“拋棄”Zookeeper

開發(fā) 架構(gòu) Kafka
相信大家最近一定關(guān)注到一款重量級消息中間件Kafka發(fā)布了2.8版本,并且正式移除了對Zookeeper的依賴,背后的設(shè)計哲學(xué)是什么呢?僅僅只是減少了一個外部依賴嗎?

[[394844]]

相信大家最近一定關(guān)注到一款重量級消息中間件Kafka發(fā)布了2.8版本,并且正式移除了對Zookeeper的依賴,背后的設(shè)計哲學(xué)是什么呢?僅僅只是減少了一個外部依賴嗎?

答案顯然不會這么簡單,容我慢慢道來。

在解答為什么之前,我覺得非常有必要先來闡述一下Zookeeper的經(jīng)典使用場景。

1、Zookeeper的經(jīng)典使用場景

zookeeper是伴隨著大數(shù)據(jù)、分布式領(lǐng)域的興起。大數(shù)據(jù)中的一個非常重要的議題是如何使用眾多廉價的機(jī)器來實現(xiàn)可靠存儲。

所謂廉價的機(jī)器就是發(fā)生故障的概率非常大,但單臺的成本也非常低,分布式領(lǐng)域希望使用多臺機(jī)器組成一個集群,將數(shù)據(jù)存儲在多臺機(jī)器上(副本),為了方便實現(xiàn)數(shù)據(jù)一致性,通常需要從一個復(fù)制組中挑選一臺主節(jié)點用戶處理數(shù)據(jù)的讀寫,其他節(jié)點從主節(jié)點拷貝數(shù)據(jù),當(dāng)主節(jié)點宕機(jī),需要自動進(jìn)行重新選舉,實現(xiàn)高可用。

上述場景中有一個非常重要的功能Leader選舉,如何選舉出一個主節(jié)點、并支持主節(jié)點宕機(jī)后自動觸發(fā)重新選舉,實現(xiàn)主從自動切換,實現(xiàn)高可用。

使用Zookeeper提供的臨時順序節(jié)點與事件監(jiān)聽機(jī)制,能非常輕松的實現(xiàn)Leader選舉。

上面的t1,t2可以理解為一個組織中的多個成員,能提供相同的服務(wù),但為了實現(xiàn)冷備效果(即同一時間只有一個成員對外提供服務(wù),我們稱之為Leader,當(dāng)Leader宕機(jī)或停止服務(wù)后,該組織中的其他成名重新競爭Leader,然后繼續(xù)對外提供服務(wù))。

正如上圖所示,Zookeeper是以集群部署的,能有效避免單點故障,并且集群內(nèi)部提供了對數(shù)據(jù)的強(qiáng)一致性。

當(dāng)成員需要競爭Leader時,借助Zookeeper的實現(xiàn)套路是向zookeeper中的一個數(shù)據(jù)節(jié)點(示例中為/app/order-service/leader)節(jié)點創(chuàng)建兩個子節(jié)點,并且是順序的臨時節(jié)點。

客戶端判斷創(chuàng)建的節(jié)點的序號是否為/app/order-service/leader中序號最小的節(jié)點,如果是則成為Leader,對外提供服務(wù);

如果序號不是最小的,則向自己前置的注冊節(jié)點刪除事件,一旦Leader代表的進(jìn)程宕機(jī),它與Zookeeper的會話失效后,與之關(guān)聯(lián)的臨時節(jié)點會被刪除,一旦Leader創(chuàng)建的節(jié)點被刪除,其后繼節(jié)點會得到通知,從而再次觸發(fā)選主,選舉出新的Leader,繼續(xù)對外提供服務(wù),保質(zhì)服務(wù)的高可用性。

回顧上述場景,借助Zookeeper能非常輕松的實現(xiàn)選主,為應(yīng)用提高可用帶來簡便性,主要是利用了Zookeeper的幾個特性:

  • 臨時節(jié)點

臨時節(jié)點是與會話關(guān)聯(lián)的,一點創(chuàng)建該臨時節(jié)點的會話結(jié)束,與之會被自動刪除,無需應(yīng)用方人工刪除。

  • 順序節(jié)點
  • 事件機(jī)制

借助與事件機(jī)制,Zookeeper能及時通知存活的其他應(yīng)用節(jié)點,重新觸發(fā)選舉,使得實現(xiàn)自動主從切換變的非常簡單。

2、Kafka對Zookeeper的迫切需求

Kafka中存在眾多的Leader選舉,熟悉Kafka的朋友應(yīng)該知道,一個主題可以擁有多個分區(qū)(數(shù)據(jù)分片),每一個數(shù)據(jù)分片可以配置多個副本,如何保證一個分區(qū)的數(shù)據(jù)在多個副本之間的一致性成為一個迫切的需求。

Kafka的實現(xiàn)套路就是一個分區(qū)的多個副本,從中選舉出一個Leader用來承擔(dān)客戶端的讀寫請求,從節(jié)點從主節(jié)點處拷貝內(nèi)容,Leader節(jié)點根據(jù)數(shù)據(jù)在副本中成功寫入情況,進(jìn)行抉擇來確定是否寫入成功。

Kafka中topic的分區(qū)分布示意圖:

故此處需要進(jìn)行Leader選舉,而基于Zookeeper能輕松實現(xiàn),從此一拍即合,開啟了一段“蜜月之旅”。

3、Zookeeper的致命弱點

Zookeeper是集群部署,只要集群中超過半數(shù)節(jié)點存活,即可提供服務(wù),例如一個由3個節(jié)點的Zookeeper,允許1個Zookeeper節(jié)點宕機(jī),集群仍然能提供服務(wù);一個由5個節(jié)點的Zookeeper,允許2個節(jié)點宕機(jī)。

但Zookeeper的設(shè)計是CP模型,即要保證數(shù)據(jù)的強(qiáng)一致性,必然在可用性方面做出犧牲。

Zookeeper集群中也存在所謂的Leader節(jié)點和從節(jié)點,Leader節(jié)點負(fù)責(zé)寫,Leader與從節(jié)點可用接受讀請求,但在Zookeeper內(nèi)部節(jié)點在選舉時整個Zookeeper無法對外提供服務(wù)。當(dāng)然正常情況下選舉會非常快,但在異常情況下就不好說了,例如Zookeeper節(jié)點發(fā)生full Gc,此時造成的影響將是毀滅性的。

Zookeeper節(jié)點如果頻繁發(fā)生Full Gc,此時與客戶端的會話將超時,由于此時無法響應(yīng)客戶端的心跳請求(Stop World),從而與會話相關(guān)聯(lián)的臨時節(jié)點將被刪除,注意,此時是所有的臨時節(jié)點會被刪除,Zookeeper依賴的事件通知機(jī)制將失效,整個集群的選舉服務(wù)將失效。

站在高可用性的角度,Kafka集群的可用性不僅取決于自身,還受到了外部組件的制約,從長久來看,顯然都不是一個優(yōu)雅的方案。

隨著分布式領(lǐng)域相關(guān)技術(shù)的不斷完善,去中心化的思想逐步興起,去Zookeeper的呼聲也越來越高,在這個進(jìn)程中涌現(xiàn)了一個非常優(yōu)秀的算法:Raft協(xié)議。

Raft協(xié)議的兩個重要組成部分:Leader選舉、日志復(fù)制,而日志復(fù)制為多個副本提供數(shù)據(jù)強(qiáng)一致性提供了強(qiáng)一致性,并且一個顯著的特點是Raft節(jié)點是去中心化的架構(gòu),不依賴外部的組件,而是作為一個協(xié)議簇嵌入到應(yīng)用中的,即與應(yīng)用本身是融合為一體的。

再以Kafka Topic的分布圖舉例,引用Raft協(xié)議的示例圖如下:

關(guān)于Raft協(xié)議,本文并不打算深入進(jìn)行探討,但為選主提供了另外一種可行方案,而且還無需依賴第三方組件,何樂而不為呢?故最終Kafka在2.8版本中正式廢棄了Zookeeper,擁抱Raft。

責(zé)任編輯:武曉燕 來源: 中間件興趣圈
相關(guān)推薦

2020-10-27 12:00:59

SQLite數(shù)據(jù)庫軟件架構(gòu)

2022-05-22 10:02:32

CREATESQL 查詢SQL DDL

2022-07-05 09:03:05

Flink SQLTopN

2022-06-10 09:01:04

OverFlinkSQL

2018-08-27 06:30:49

InnoDBMySQLMyISAM

2022-06-06 09:27:23

FlinkSQLGroup

2022-05-18 09:02:28

Flink SQLSQL字符串

2022-06-29 09:01:38

FlinkSQL時間屬性

2022-05-15 09:57:59

Flink SQL時間語義

2022-05-27 09:02:58

SQLHive語義

2021-11-28 11:36:08

SQL Flink Join

2024-10-17 16:41:57

KafkaZooKeeper

2022-08-10 10:05:29

FlinkSQL

2021-11-27 09:03:26

flink join數(shù)倉

2022-05-12 09:02:47

Flink SQL數(shù)據(jù)類型

2022-06-18 09:26:00

Flink SQLJoin 操作

2021-12-17 07:54:16

Flink SQLTable DataStream

2021-12-09 06:59:24

FlinkSQL 開發(fā)

2021-12-13 07:57:47

Flink SQL Flink Hive Udf

2021-09-12 07:01:07

Flink SQL ETL datastream
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美日本在线观看 | www亚洲精品| 最近中文字幕第一页 | 日本午夜免费福利视频 | 中文字幕久久久 | 欧美精品三区 | 精品一区二区在线视频 | 日韩久久精品视频 | 91亚洲国产精品 | 精品欧美一区二区三区久久久 | 中文字幕人成乱码在线观看 | 粉嫩一区二区三区性色av | h在线免费观看 | 台湾a级理论片在线观看 | 一区二区三区四区在线 | 欧美在线看片 | 日韩免费一区二区 | 日韩欧美专区 | 中文字幕一区二区三 | 亚洲视频中文字幕 | 国产精品久久久久久久久久三级 | 久久久精品一区二区三区 | 超碰日本 | 国产成人精品一区二区三区在线 | 黄色91在线 | 全免费a级毛片免费看视频免 | 国产高清久久久 | 国产精品日韩欧美一区二区三区 | 午夜av电影| 国产精品九九九 | 国产一级久久久久 | 日韩欧美国产综合 | 日韩免费在线观看视频 | 成人精品在线观看 | 欧美日韩成人 | 青青草一区 | 亚州精品天堂中文字幕 | 在线一区视频 | 久久亚洲一区二区三区四区 | 久久福利电影 | 91久久精品一区二区二区 |