一篇必讀的Kafka文章

https://kafka.apache.org/intro
應(yīng)用場景
異步解構(gòu):在上下游沒有強依賴的業(yè)務(wù)關(guān)系或針對單次請求不需要立刻處理的業(yè)務(wù); 系統(tǒng)緩沖:有利于解決服務(wù)系統(tǒng)的吞吐量不一致的情況,尤其對處理速度較慢的服務(wù)來說起到緩沖作用; 消峰作用:對于短時間偶現(xiàn)的極端流量,對后端的服務(wù)可以啟動保護作用; 數(shù)據(jù)流處理:集成 spark 做實事數(shù)據(jù)流處理。
Kafka 拓撲圖(多副本機制)

Kafka 核心組件
broker
topic
partition
topic 的分區(qū),一個 topic 可以包含多個 partition,topic 消息保存在各個 partition 上;由于一個 topic 能被分到多個分區(qū)上,給 kafka 提供給了并行的處理能力,這也正是 kafka 高吞吐的原因之一。 partition 物理上由多個 segment 文件組成,每個 segment 大小相等,順序讀寫(這也是 kafka 比較快的原因之一,不需要隨機寫)。每個 Segment 數(shù)據(jù)文件以該段中最小的 offset ,文件擴展名為.log。當(dāng)查找 offset 的 Message 的時候,通過二分查找快找到 Message 所處于的 Segment 中。

offset
消息在日志中的位置,可以理解是消息在 partition 上的偏移量,也是代表該消息的唯一序號。 同時也是主從之間的需要同步的信息。

Producer
Consumer
Consumer Group
Zookeeper

服務(wù)治理
數(shù)據(jù)同步
ISR




Kafka 故障恢復(fù)

生產(chǎn)者發(fā)生消息給 leader,這個時候 leader 完成數(shù)據(jù)存儲,突然發(fā)生故障,沒有給 producer 返回 ack; 通過 ZK 選舉,其中一個 follower 成為 leader,這個時候 producer 重新請求新的 leader,并存儲數(shù)據(jù)。
Kafka 為什么這么快
順序?qū)懘疟P
Page Cache

零拷貝
傳統(tǒng)的一次應(yīng)用程請求數(shù)據(jù)的過程

零拷貝的方式

分區(qū)分段
數(shù)據(jù)壓縮
Kafka 安裝
安裝 JDK
yum -y list Java*
yum install java-1.8.0-openjdk-devel.x86_64
Java -version
安裝 Zookeeper
tar -zxvf zookeeper-3.4.9.tar.gz
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
# zookeeper內(nèi)部的基本單位,單位是毫秒,這個表示一個tickTime為2000毫秒,在zookeeper的其他配置中,都是基于tickTime來做換算的
tickTime=2000
# 集群中的follower服務(wù)器(F)與leader服務(wù)器(L)之間 初始連接 時能容忍的最多心跳數(shù)(tickTime的數(shù)量)。
initLimit=10
#syncLimit:集群中的follower服務(wù)器(F)與leader服務(wù)器(L)之間 請求和應(yīng)答 之間能容忍的最多心跳數(shù)(tickTime的數(shù)量)
syncLimit=5
# 數(shù)據(jù)存放文件夾,zookeeper運行過程中有兩個數(shù)據(jù)需要存儲,一個是快照數(shù)據(jù)(持久化數(shù)據(jù))另一個是事務(wù)日志
dataDir=/tmp/zookeeper
## 客戶端訪問端口
clientPort=2181
vim ~/.bash_profile
export ZK=/usr/local/src/apache-zookeeper-3.7.0-bin
export PATH=$PATH:$ZK/bin
export PATH
// 啟動
zkServer.sh start


安裝 Kafka
tar -xzvf kafka_2.12-2.0.0.tgz
export ZK=/usr/local/src/apache-zookeeper-3.7.0-bin
export PATH=$PATH:$ZK/bin
export KAFKA=/usr/local/src/kafka
export PATH=$PATH:$KAFKA/bin
nohup kafka-server-start.sh 自己的配置文件路徑/server.properties &

評論
圖片
表情
