哪個(gè)網(wǎng)站做演唱會(huì)門票網(wǎng)絡(luò)推廣是做什么工作
1. zookeeper
是的,Zookeeper 和 Kafka 經(jīng)常一起使用,Zookeeper 在 Kafka 中扮演了關(guān)鍵角色。以下是 Zookeeper 和 Kafka 在實(shí)際項(xiàng)目中的結(jié)合使用及其作用的詳細(xì)說明。
項(xiàng)目背景
假設(shè)我們有一個(gè)分布式數(shù)據(jù)處理系統(tǒng),該系統(tǒng)需要高吞吐量的實(shí)時(shí)消息處理能力。Kafka 被選作消息隊(duì)列系統(tǒng),用于接收、存儲(chǔ)和傳輸大量實(shí)時(shí)數(shù)據(jù)。Zookeeper 被用作集群管理工具,以確保 Kafka 集群的高可用性和一致性。
Kafka 與 Zookeeper 的結(jié)合
1. Kafka Broker 管理
Kafka 使用 Zookeeper 來管理 Kafka brokers(代理)。Zookeeper 維護(hù)了所有 broker 的元數(shù)據(jù)和狀態(tài)信息,確保每個(gè) broker 都可以發(fā)現(xiàn)和通信其他 brokers。
- Broker 注冊(cè):當(dāng)一個(gè) Kafka broker 啟動(dòng)時(shí),它會(huì)向 Zookeeper 注冊(cè)自己,這樣其他 brokers 可以知道集群中的所有成員。
- Leader 選舉:Kafka 分區(qū)的 leader 選舉是通過 Zookeeper 來完成的。每個(gè)分區(qū)有一個(gè) leader 和多個(gè) follower,leader 負(fù)責(zé)所有讀寫操作,而 followers 復(fù)制 leader 的數(shù)據(jù)。
2. Topic 和 Partition 管理
Zookeeper 維護(hù) Kafka 集群中所有 topic 和分區(qū)的元數(shù)據(jù),包括分區(qū)的位置、replicas 和 leader 信息。
- Topic 配置:創(chuàng)建一個(gè) topic 時(shí),Kafka 會(huì)將其配置信息(如分區(qū)數(shù)、副本數(shù))存儲(chǔ)在 Zookeeper 中。
- 分區(qū)信息:每個(gè)分區(qū)的 leader 和 followers 信息也存儲(chǔ)在 Zookeeper 中,確保集群的元數(shù)據(jù)一致性。
3. 消費(fèi)者組協(xié)調(diào)
Zookeeper 協(xié)調(diào) Kafka 消費(fèi)者組,確保每個(gè)消費(fèi)者實(shí)例在集群中唯一且不重復(fù)地消費(fèi)消息。
- 消費(fèi)者注冊(cè):消費(fèi)者啟動(dòng)時(shí)會(huì)向 Zookeeper 注冊(cè)自己,并通過 Zookeeper 獲取分配給它的分區(qū)。
- 分區(qū)再均衡:當(dāng)消費(fèi)者實(shí)例加入或離開時(shí),Zookeeper 負(fù)責(zé)觸發(fā)分區(qū)再均衡,確保分區(qū)分配在消費(fèi)者組中保持均衡。
實(shí)際項(xiàng)目示例
項(xiàng)目描述
假設(shè)我們有一個(gè)實(shí)時(shí)日志處理系統(tǒng),該系統(tǒng)收集來自多個(gè)應(yīng)用程序的日志數(shù)據(jù),進(jìn)行實(shí)時(shí)處理和分析。
使用 Kafka 和 Zookeeper
-
數(shù)據(jù)收集和傳輸:
- 應(yīng)用程序?qū)⑷罩緮?shù)據(jù)發(fā)送到 Kafka topic。每個(gè)應(yīng)用程序?qū)?yīng)一個(gè)或多個(gè) Kafka topics。
-
消息隊(duì)列管理:
- Kafka 集群由多個(gè) brokers 組成,Zookeeper 管理這些 brokers 的元數(shù)據(jù)和狀態(tài),確保集群的高可用性。
- Zookeeper 協(xié)助 Kafka 進(jìn)行分區(qū) leader 選舉,確保每個(gè)分區(qū)都有一個(gè) leader 負(fù)責(zé)處理讀寫請(qǐng)求。
-
實(shí)時(shí)處理:
- 一個(gè) Kafka 消費(fèi)者組(如 Spark Streaming、Flink 或自定義的消費(fèi)者應(yīng)用)從 Kafka topics 中消費(fèi)日志數(shù)據(jù)進(jìn)行實(shí)時(shí)處理。
- Zookeeper 協(xié)調(diào)消費(fèi)者組中的消費(fèi)者,確保每個(gè)分區(qū)的數(shù)據(jù)都被唯一的消費(fèi)者處理。
-
故障恢復(fù):
- 如果一個(gè) Kafka broker 崩潰,Zookeeper 協(xié)助進(jìn)行 leader 選舉,將分區(qū)的 leader 轉(zhuǎn)移到其他可用的 brokers。
- 消費(fèi)者實(shí)例崩潰時(shí),Zookeeper 觸發(fā)分區(qū)再均衡,將分區(qū)重新分配給其他消費(fèi)者實(shí)例,確保系統(tǒng)繼續(xù)穩(wěn)定運(yùn)行。
結(jié)論
Zookeeper 在 Kafka 集群中起到了關(guān)鍵的協(xié)調(diào)和管理作用,確保了 Kafka 的高可用性和一致性。在實(shí)際項(xiàng)目中,Kafka 和 Zookeeper 的結(jié)合使用能夠處理大量實(shí)時(shí)數(shù)據(jù),提供可靠的消息傳輸和處理能力。這種架構(gòu)在大數(shù)據(jù)、日志處理、實(shí)時(shí)分析等領(lǐng)域廣泛應(yīng)用,能夠滿足高吞吐量和低延遲的需求。
zookeeper headless
在yaml文件中 clusterIP: None 代表它是headless svc
10.96.0.10 是k8s 集群內(nèi)的 dns 解析
應(yīng)用驗(yàn)證
可以獲得鍵值說明zookeeper正常,這是在集群內(nèi)訪問
下面是安裝客戶端,從外面通過port 訪問zookeeper
zookeeper的存儲(chǔ)可以接nfs
2. kafka
kafka 生產(chǎn)者將數(shù)據(jù)寫入到分區(qū)主題, 這些主題通過可配置的副本存儲(chǔ)到broker集群上。消費(fèi)者消費(fèi)存儲(chǔ)在broker 分區(qū)生成的數(shù)據(jù)
示例項(xiàng)目說明
假設(shè)你有一個(gè)在線零售網(wǎng)站,你希望使用Kafka來處理用戶訂單數(shù)據(jù)。以下是如何使用Broker、Topic和分區(qū)來實(shí)現(xiàn)這一需求的示例:
1. 創(chuàng)建Kafka集群
你創(chuàng)建了一個(gè)Kafka集群,包含3個(gè)Broker(Broker 0, Broker 1, Broker 2)。
2. 創(chuàng)建Topic
你創(chuàng)建了一個(gè)名為orders
的Topic,用于存儲(chǔ)用戶訂單數(shù)據(jù)。為了提高系統(tǒng)的性能和可靠性,你決定將這個(gè)Topic分成3個(gè)分區(qū),并設(shè)置副本因子為2。
kafka-topics.sh --create --topic orders --partitions 3 --replication-factor 2 --zookeeper localhost:2181
3. 分區(qū)和副本分布
Kafka會(huì)自動(dòng)在Broker之間分配分區(qū)和副本。例如:
- 分區(qū) 0 可能分布在Broker 0和Broker 1上,其中Broker 0是Leader,Broker 1是Follower。
- 分區(qū) 1 可能分布在Broker 1和Broker 2上,其中Broker 1是Leader,Broker 2是Follower。
- 分區(qū) 2 可能分布在Broker 2和Broker 0上,其中Broker 2是Leader,Broker 0是Follower。
4. 數(shù)據(jù)生產(chǎn)和消費(fèi)
- 生產(chǎn)者(Producer): 你的訂單服務(wù)會(huì)將每個(gè)訂單消息發(fā)送到
orders
Topic。Kafka根據(jù)某種分區(qū)策略(如訂單ID的哈希值)將消息分配到不同的分區(qū)。 - 消費(fèi)者(Consumer): 你的訂單處理服務(wù)會(huì)從
orders
Topic中消費(fèi)消息。消費(fèi)者可以并行地從不同的分區(qū)讀取數(shù)據(jù),從而提高處理速度。
數(shù)據(jù)流示例
- 用戶A在網(wǎng)站上下單,訂單數(shù)據(jù)被發(fā)送到
orders
Topic,Kafka將其放入分區(qū)0。 - 用戶B在網(wǎng)站上下單,訂單數(shù)據(jù)被發(fā)送到
orders
Topic,Kafka將其放入分區(qū)1。 - 用戶C在網(wǎng)站上下單,訂單數(shù)據(jù)被發(fā)送到
orders
Topic,Kafka將其放入分區(qū)2。
優(yōu)點(diǎn)
- 高可用性和容錯(cuò)性: 如果一個(gè)Broker宕機(jī),Kafka可以自動(dòng)切換到其他Broker上的副本,保證數(shù)據(jù)的可用性。
- 高吞吐量: 多個(gè)分區(qū)使得生產(chǎn)者和消費(fèi)者可以并行工作,提高了系統(tǒng)的處理能力。
- 可擴(kuò)展性: 你可以通過增加分區(qū)數(shù)和Broker數(shù)量來擴(kuò)展Kafka集群的容量和性能。
kafka高可用集群部署
可以使用helm,或者和zookeeper一起部署,還可以自己的yaml
也可以使用storageclass來持久化存儲(chǔ)
在k8s內(nèi)部驗(yàn)證Kafka的使用test,生產(chǎn)環(huán)境不這樣用kafka
創(chuàng)建一個(gè)pod客戶端
進(jìn)入后,如果沒有topic,創(chuàng)建topic,然后生產(chǎn),消費(fèi)
這個(gè)topic名字是test01 topic被分成3個(gè)分區(qū),分區(qū)使Kafka能夠并行處理數(shù)據(jù),因?yàn)椴煌南M(fèi)者可以消費(fèi)不同的分區(qū)。
副本 2個(gè)代表每個(gè)分區(qū)的數(shù)據(jù)會(huì)被復(fù)制到兩個(gè)不同的 Broker上。
副本是分區(qū)的一個(gè)副本,存儲(chǔ)在不同的Broker上。
Kafka使用主副本(Leader)和從副本(Follower)來管理數(shù)據(jù)復(fù)制。
Leader負(fù)責(zé)所有讀寫請(qǐng)求,而Follower被動(dòng)地復(fù)制Leader的數(shù)據(jù)。
如果Leader宕機(jī),Kafka會(huì)自動(dòng)選舉一個(gè)新的Leader,從而保證數(shù)據(jù)的高可用性。Broker 是實(shí)際存儲(chǔ)和管理數(shù)據(jù)的服務(wù)器節(jié)點(diǎn)。
Topic 是消息的分類和邏輯分組。
分區(qū) 是Topic的子集,每個(gè)分區(qū)是一個(gè)獨(dú)立的、有序的消息日志,使Kafka能夠并行處理和分發(fā)消息。
3.rokectmq
分布式消息傳遞,萬億級(jí)別