趙渝強老師 Kafka的體系架構

2022-09-06 02:48:11 字數 2536 閱讀 5452

資料工程中最具挑戰性的部分之一是如何從不同點收集和傳輸大量資料到分布式系統進行處理和分析。需要通過訊息佇列正確地分離大量資料,因為如果一部分資料無法傳送,則可以在系統恢復時傳輸和分析其他資料。有兩種訊息排隊,對於上述目的,它們都是可靠的和非同步的。點對點(point to point)和發布者——訂閱者(publisher-subscriber)。下圖展示了乙個典型的訊息系統,其中:訊息的生產者負責產生訊息;訊息的消費者負責處理訊息。

在點對點或一對一中,有乙個發件人和正在監聽發件人的多個消費者。當乙個消費者從佇列收到訊息時,該特定訊息將從佇列中消失,而其他消費者無法獲得該訊息。

在發布者——訂閱者中,發布者向同時收聽發布者的多個消費者或訂閱者傳送訊息,並且每個訂閱者可以獲得相同的訊息。資料應通過資料管道傳輸,資料管道負責整合來自資料來源的資料。

有乙個發布者傳送訊息。訊息根據主題進行分類,每個主題都有乙個或多個分割槽,並有自己的偏移位址。例如,如果我們為乙個主題分配複製因子= 2,那麼kafka將為每個分割槽建立兩個相同的副本並在群集中找到它。

kafka集群包括**——伺服器或節點,每個**可以位於不同的機器中,並允許訂戶選擇訊息。因此,複製就像備份分割槽一樣,這意味著kafka是持久的,這有助於容錯。

kafka集群不保留其自身生態系統的元資料,因為它是無狀態的。因此,kafka依賴於zookeeper來跟蹤元資料。zookeeper應該首先啟動。實際上,zookeeper是brokers和consumers之間的介面,它的存在是容錯的必要條件。kafka**負責負載平衡,假設該主題有乙個主題和多個分割槽,每個分割槽都有乙個領導者,定期確認其與zookeeper的偏移量。因此,如果乙個節點或**失敗,kafka可以從zookeeper請求的最後乙個偏移位址繼續操作,因此zookeeper在崩潰情況下在kafka恢復中起著至關重要的作用。

配置/root/training/zookeeper-3.4.6/conf/zoo.cfg檔案

datadir=/root/training/zookeeper-3.4.6/tmp

server.

1=hadoop112:2888:3888

在/root/training/zookeeper-3.4.6/tmp目錄下建立乙個myid的空檔案

echo

1 > /root/training/zookeeper-3.4.6/tmp/myid

啟動zookeeper

zkserver.

shstart

檢視zookeeper的狀態

zkserver.

sh status

由於我們部署的是單節點的zookeeper,所以zookeeper的狀態將是standalone。

修改server.conf檔案

broker.

id=0

port=9092

log.dirs=/root/training/kafka_2.11-2.4.0/logs/broker0

zookeeper.connect=localhost:2181

啟動kafka

建立topic

bin/kafka-topics.sh --create --zookeeper bigdata111:2181 --replication-factor 1 --partitions 3 --topic mytopic1

傳送訊息

bin/kafka-console-producer.sh --broker-list bigdata111:9092 --topic mytopic1

接收訊息

訊息消費

bin/kafka-console-consumer.sh --bootstrap-server bigdata111:9092 --topic mytopic1

從開始位置消費

bin/kafka-console-consumer.sh --bootstrap-server bigdata111:9092 --from-beginning --topic topicname

顯示key消費

趙渝強老師 Kafka的持久化

kakfa 依賴檔案系統來儲存和快取訊息。對於硬碟的傳統觀念是硬碟總是很慢,基於檔案系統的架構能否提供優異的效能?實際上硬碟的快慢完全取決於使用方式。同時 kafka 基於 jvm 記憶體有以下缺點 實際上磁碟線性寫入的效能遠遠大於任意位置寫的效能,線性讀寫由作業系統進行了大量優化 read ahe...

趙渝強老師 什麼是Redis Cluster

redis cluster是redis的分布式解決方案,在redis 3.0版本正式推出的,有效解決了redis分布式方面的需求。當遇到單機記憶體 併發 流量等瓶頸時,可以採用cluster架構達到負載均衡的目的。我們日常在對於redis的使用中,經常會遇到一些問題 1 高可用問題,如何保證redi...

趙渝強老師 SQL的字元函式

字元函式,顧名思義,操作的就是字串。通過下圖,我們來了解一下oracle的字元函式。select lower hello world 轉小寫,upper hello world 轉大寫,initcap hello world 首字母大寫 對於英文來說,字元數和位元組數一樣 select length...