Kafka入門簡介

1. Kafka概述

Kafka® is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-tolerant, wicked fast, and runs in production in thousands of companies.

這是Kafka官網裏的一段介紹,從這段話,我們可以知道,kafka在構建實時數據管道和streaming應用中被常使用,它可以橫向擴展,容錯,快速地運行在數以千計的公司產品上。

它可以像消息系統一樣讀寫數據流,並且可以在實時業務的場景中寫可靠的流處理應用,並且能安全地存儲數據流到分佈式、多副本、容錯的集羣中。所以通俗點理解,可以說Kafka就是一個消息中間件。

Kafka場景比喻

接下來我大概比喻下Kafka的使用場景

消息中間件:生產者和消費者

媽媽:生產者
你:消費者
饅頭:數據流、消息
正常情況下: 生產一個 消費一個
其他情況:

  • 1)一直生產,你吃到某一個饅頭時,你卡主(機器故障), 饅頭就丟失了
  • 2)一直生產,做饅頭速度快,你吃來不及,饅頭也就丟失了

爲了防止其他生產情況的出現,我們可以拿個碗/籃子,饅頭做好以後先放到籃子裏,你要吃的時候去籃子裏面取出來吃,而這籃子/框就可以爲:Kafka。
當籃子滿了,饅頭就裝不下了,咋辦? 多準備幾個籃子 === Kafka的擴容

2. Kafka的架構和核心概念

在這裏插入圖片描述
這是張Kafka官網上截的圖,大概可以把Kafka的主要結構分爲以下幾點:

  • producer:生產者,就是生產饅頭(老媽)
  • consumer:消費者,就是吃饅頭的(你)
  • broker:籃子
  • topic:主題,給饅頭帶一個標籤,topic a的饅頭是給你吃的,topic b的饅頭是給你弟弟吃

另外,我們在看下官網上的這段解釋:

First a few concepts:

Kafka is run as a cluster on one or more servers.
The Kafka cluster stores streams of records in categories called topics.
Each record consists of a key, a value, and a timestamp.
可以看出來:

  • 1.Kafka可以作爲集羣運行在一臺或者多個服務器上面;
  • 2.Kafka集羣可以分類地存儲記錄流,以打標籤的方式,就是採用topics,每個broker可以打個topic,這樣能保證消費者可以根據topic選擇性消費;
  • 3.每個記錄由Key、Value、timestamp構成。

3. Kafka的快速使用

Kafka使用到了zookeeper,所以首先你得安裝zookeeper再安裝kafka。

3.1 安裝zookeeper

下載ZK,安裝

# 解壓
tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz 
# 配置zk環境變量
vi ~/.bash_profile 
#在.bash_profile 文件中加入以下內容
export ZK_HOME=/opt/apache-zookeeper-3.5.6
export PATH=$ZK_HOME/bin:$PATH

#配置生效
source ~/.bash_profile 

#修改zk配置文件
cd conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
# zoo.cfg文件中修改zk數據目錄
dataDir=/opt/tmp/zk

# 新建數據目錄
mkdir -p /opt/tmp/zk

# 啓動zk
cd /bin
./zkServer.sh start

# 連接zk
 ./zkCli.sh 

可能遇到的坑

  • 啓動時報錯:找不到或無法加載主類 org.apache.zookeeper.server.quorum.QuorumPeerMain,缺少jar包,下載帶名稱bin的安裝包。

3.2 單節點的broker部署

下載kafka,選擇對應的版本,這裏選擇0.9.0.0的kafka_2.11-0.9.0.0.tgz ,下載後解壓

# 解壓
tar -zxvf kafka_2.11-0.9.0.0.tgz 
#配置環境變量
vi ~/.bash_profile
export KAFKA_HOME=/opt/kafka_2.11-0.9.0.0
export PATH=$KAFKA_HOME/bin:$PATH
source ~/.bash_profile 

首先我們需要修改$KAFKA_HOME/config/server.properties這個配置文件,主要以下幾處需要修改:

broker.id=0,每個broker的ID需要唯一
listeners:監聽的端口(此處筆者設置的是默認端口9092)
host.name:當前機器
log.dirs:存儲日誌的文件夾

num.partitions:分區的數量
zookeeper.connect:zookeeper的地址(默認爲localhost:2181)

這幾處根據你自身需要進行配置,然後啓動步驟如下:

  • 1)開啓zookeeper,此處需要注意的是zookeeper的conf目錄下的zoo.cfg配置文件,主要修改的也是日誌存儲目錄那塊。

  • 2)啓動Kafka,命令爲:kafka-server-start.sh $KAFKA_HOME/config/server.properties

  • 3)創建topic,需要指定zookeeper,命令爲:kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic hello_topic。 注意指定zookeeper,後面幾個屬性可以根據你實際情況進行定義。另外查看所有topic的命令爲:kafka-topics.sh --list --zookeeper localhost:2181

  • 4)發送消息,需要指定broker,命令爲:kafka-console-producer.sh --broker-list localhost:9092 --topic hello_topic

  • 5)消費消息,需要指定zookeeper,命令爲:kafka-console-consumer.sh --zookeeper localhost:2181 --topic hello_topic --from-beginning。意思就是指定zookeeper上的topic進行消費,from-beginning的設置,可以查看之前的消息。

3.3 單節點多broker部署

主要是增加多個server.properties文件,一個配置文件就相當於一個broker,就設置三個broker,複製3個server.properties:

#進入目錄
cd $KAFKA_HOME/config
#拷貝
server-1.properties
	log.dirs=/opt/tmp/kafka-logs-1
	listeners=PLAINTEXT://:9093
	broker.id=1
 
server-2.properties
	log.dirs=/opt/tmp/kafka-logs-2
	listeners=PLAINTEXT://:9094
	broker.id=2
 
server-3.properties
	log.dirs=/opt/tmp/kafka-logs-3
	listeners=PLAINTEXT://:9095

然後依次開啓,命令如下:

kafka-server-start.sh -daemon $KAFKA_HOME/config/server-1.properties &
kafka-server-start.sh -daemon $KAFKA_HOME/config/server-2.properties &
kafka-server-start.sh -daemon $KAFKA_HOME/config/server-3.properties &

創建topic

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
 
kafka-console-producer.sh --broker-list localhost:9093,localhost:9094,localhost:9095 --topic my-replicated-topic
kafka-console-consumer.sh --zookeeper localhost:2181 --topic my-replicated-topic

4. Kafka容錯性測試

查看一下my-replicated-topic這個topic的相關信息

kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章