kafka的介紹
kafka 是分布式發布-訂閱訊息系統,即,kafka是一種分布式的訊息佇列工具。
kafka特點
a.高吞吐量
kafka每秒可以生產約25萬訊息(50mb),每秒可以處理55萬訊息(110mb)
b.持久化資料儲存
可進行持久化操作。將訊息持久化到磁碟,按順序讀寫。據測試按順序磁碟讀寫比隨機記憶體寫還要快。
c.分布式系統易於擴充套件
所有的producer、broker和consumer都會有多個,均為分布式。無需停機就可以新增機器。
d.客戶端狀態維護
訊息被處理的狀態是在consumer端維護,而不是由server端維護。減輕伺服器端的壓力,為客戶端會話管理提供了更好的靈活性。
描述架構之前我還想再鋪墊一下使用的步驟。
訊息寫入到kafka是需要通過生產者端的,生產者端可以是flume可以是nginx也可以是我們自己呼叫kafkaapi手寫生產者,消費者也是如此。
但是無論是什麼生產者**,都需要在kafka中建立對應的topic(主題)指定patition(分割槽:分割槽的存在是為了提高併發能力,分割槽數的多少由消費者多少來定義,最好結合sparkrdd數或者,如果需求是將同乙個客戶端的資料存入乙個檔案,就可以將分割槽與檔案一一對應,存入hdfs或被spark消費或闖入其他機器。曾經面試被問過)
如果有不理解的自己可以嘗試畫圖並動手操作一下。
有了以上介紹以後就直接進入kafka架構:
看架構圖還是需要明白乙個概念就是kafka中的leader與follower
在kafka集群中每個分割槽有若干副本,這些副本分布式的存放在不停伺服器上,其中有乙個稱為leader,leader負責讀寫操作,其他的副本就只是同步,選舉leader跟zookepeer不一樣,有乙個isr區域,可以想象成為奴隸場(畢竟幹活的都是他),只要isr區域中有機器活著,leader就會從中產生,另外kafka 0.8.*使用的是選擇第乙個活過來的replica,雖然可能會丟失資料。
訊息生產者,發布訊息到 kafka 集群的終端或服務。
2.broker:
kafka 集群中包含的伺服器。broker (經紀人,消費**服務)
3.topic:
每條發布到 kafka 集群的訊息屬於的類別,即 kafka 是面向 topic 的。
4.partition:
partition 是物理上的概念,每個 topic 包含乙個或多個 partition。kafka 分配的單位是 partition。
5.consumer:
從 kafka 集群中消費訊息的終端或服務。
6.consumer group:
high-level consumer api 中,每個 consumer 都屬於乙個 consumer group,每條訊息只能被 consumer group 中的乙個 consumer 消費,但可以被多個 consumer group 消費。
即組間資料是共享的,組內資料是競爭的。
7.replica:
partition 的副本,保障 partition 的高可用。
8.leader:
replica 中的乙個角色, producer 和 consumer 只跟 leader 互動。
9.follower:
replica 中的乙個角色,從 leader 中複製資料。
10.controller:
kafka 集群中的其中乙個伺服器,用來進行 leader election 以及 各種 failover。
11.zookeeper:
kafka 通過 zookeeper 來儲存集群的 meta 資訊。
訊息流程:
1:producer 先從 zookeeper 的 「/brokers/…/state」 節點找到該 partition 的 leader
2:producer 將訊息傳送給該 leader
3:leader 將訊息寫入本地 log
4:followers 從 leader pull 訊息,寫入本地 log 後 leader 傳送 ack
5:leader 收到所有 isr 中的 replica 的 ack 後,增加 hw(high watermark,最後 commit 的 offset) 並向 producer 傳送 ack。
isr指的是:比如有三個副本 ,編號是① ② ③ ,其中② 是leader ① ③是follower。假設在資料同步過程中,①跟上leader,但是③出現故障或沒有及時同步,則① ②是乙個isr,而③不是isr成員。後期在leader選舉時,會用到isr機制。會優先從isr中選擇leader
安裝kafka
export kafka_home=
/opt/kafka
export path=$path:$kafka_home/bin
環境變數生效:
source /etc/profile
修改kafka配置檔案(在kakfa安裝目錄下的config目錄下)
vim server.properties
#broker 的編號,如果集群中有多個broker,則每個broker 的編號要設定的不同
broker.id=
0#對外提供的服務入口位址
listeners=plaintext:
//localhost:
9092
# 存放訊息的日誌檔案
log.dirs=
/tmp/kafka-logs/
# kafka所需要的zookeeper集群位址
zookeeper.connect=localhost:
2181
/kafka
4: 啟動kafka(在kakfa安裝目錄下)
控制台模式:
bin/kafka-server-start.sh config/server.properties
後台執行模式:
bin/kafka-server-start.sh -daemon config/server.properties
kafka建立&檢視topic,生產&消費指定topic訊息
Git 簡介及簡單操作
一 git是什麼 git 是乙個開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的專案。git 是 linus torvalds 為了幫助管理 linux 核心開發而開發的乙個開放原始碼的版本控制軟體。git 與常用的版本控制工具 cvs,subversion 等不同,它採用了分布式版本庫的...
KAFKA簡單操作
1.建立乙個topic,3個分割槽和兩個副本 redis node1 kafka 2.12 2.2.0 bin kafka topics.sh create zookeeper node1 2181 replication factor 2 partitions 3 topic test 2.檢視t...
Rust 安裝及簡單操作
官方文件有安裝說明 終端執行 curl proto https tlsv1.2 ssf sh顯示如下,按1回車 default host triple x86 64 unknown linux gnu default toolchain stable default profile default ...