Kafka入門介紹、安裝部署

1、前言

本章節使用的是Apache Kafka,版本:kafka_2.11-2.1.0.tgz;但是實際工作中要考慮CDH環境,使用的是CDH官網的Kafka,所以這裏先簡單介紹下,如何集成到CDH中,請參考博客:
https://blog.csdn.net/greenplum_xiaofan/article/details/97677328
版本選擇:使用的是CDH版本的Kafka,在CDH官網上叫做CDK。
比如:
kafka_2.11-0.10.2-kafka-2.2.0.jar
kafka_2.11::表示scala-2.11版本
0.10.2: 指在apache上的 kafka版本
2.2.0: 這個纔是CDH官網上的CDK版本
CDK地址:
https://www.cloudera.com/documentation/kafka/latest/topics/kafka_packaging.html#concept_fzg_phl_br
在這裏插入圖片描述
Apache Kafka地址:
http://kafka.apache.org/

SparkStraming2.4.2版本官網推薦:apache kafka版本至少0.10.x及以上。
Kafka 0.8和0.10是個分水嶺,對比如下(來自Spark官網):
在這裏插入圖片描述
可以看出0.10版本,只有Direct DStream,不再支持Receiver DSstream;Offset維護在Kafka中。

2、Kafka基本概念

kafka是一個高吞吐的分佈式消息系統,一般充當消息中間件,一般是跟流式處理掛鉤的,比如SparkStreaming。
Kafka的三個角色:

  • Broker:Kafka集羣中server節點,負責讀寫請求,存儲消息,管理分區,無主從關係,依賴zk協調
  • Producer:生產者,負責生產消息,比如從Flume獲取數據
  • Consumer:消費者,負責消費消息,比如被SparkStreaming、Flink消費

Kafka這三個角色和Flume的三個角色非常類似,但Flume啓動後只有一個進程,而Kafka每個角色都需要啓動,有三個進程。

Kafka其他重要概念:

  • Topic:主題,消息的分類,支持一個topic多個消費者消費
  • Partition:分區,一個Topic由一個或多個分區組;一般情況下多少個Kafka節點就設置多少分區數
  • Replication:副本,一個分區數據複製多少份
  • Consumer Group:消費者組,一個消費組可以包含一個或多個消費者,對於同一個Topic數據消費者組裏面的每個消費者消費部分數據,而且每個消費者消費的數據是不同的。
  • Offset:偏移量,消費一個分區數據時數據所在的下標,從0開始

3、Kafka安裝

我們這裏採用的是單節點安裝,集羣安裝一樣的,舉一反三。

3.1 安裝Zookeeper

Kafka需要依賴Zookeeper,zookeeper-3.4.5-cdh5.7.0.tar.gz下載地址(cdh版的)
http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.7.0.tar.gz

#先瞅一眼文件目錄
[hadoop@vm01 ~]$ ll
total 12
drwxrwxr-x. 12 hadoop hadoop 4096 Aug  9 09:42 app
drwxrwxr-x.  6 hadoop hadoop 4096 Aug  8 16:59 data
drwxrwxr-x.  2 hadoop hadoop   32 Aug  1 13:26 lib
drwxrwxr-x.  3 hadoop hadoop   23 Jul 30 03:18 maven_repo
drwxrwxr-x.  3 hadoop hadoop 4096 Aug  9 07:41 software
drwxrwxr-x.  3 hadoop hadoop   24 Jul 30 03:18 source
#解壓
[hadoop@vm01 software]$ tar -zxvf zookeeper-3.4.5-cdh5.7.0.tar.gz  -C ../app/
[hadoop@vm01 conf]$ cd ../app/zookeeper-3.4.5-cdh5.7.0
[hadoop@vm01 zookeeper-3.4.5-cdh5.7.0]$ mkdir data dataLog

#配置zoo.cfg
[hadoop@vm01 conf]$ cd conf
[hadoop@vm01 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@vm01 conf]$ vi zoo.cfg
...
dataDir=/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/data
dataLogDir=/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/dataLog

server.1=vm01:2888:3888
#如果是集羣就添加節點在下一行,2888是zk之間的通信,3888是zk跟其他應用程序通信
#server.2=vm02:2888:3888
#server.3=vm03:2888:3888
#配置myid文件,上面的server.1 就是myid,不同節點myid是不同的
#zk集羣在剛開始啓動的時候,就是根據myid來選舉的
[hadoop@vm01 data]$ pwd
/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/data

[hadoop@vm01 data]$ echo "1" >myid
#配置環境變量
[hadoop@vm01 conf]$ vi ~/.bash_profile 
export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/
export PATH=$ZOOKEEPER_HOME/bin:$PATH

[hadoop@vm01 conf]$ source ~/.bash_profile 
#啓動zk
[hadoop@vm01 bin]$ ./zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

[hadoop@vm01 bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/bin/../conf/zoo.cfg
Mode: standalone
#因爲是單節點,就是這個模式
#如果是集羣,那麼是一個leader,多個flower。

#查看進程
[hadoop@vm01 bin]$ jps
36505 QuorumPeerMain

3.2 安裝Kafka

#解壓
[hadoop@vm01 software]$ tar -zxvf kafka_2.11-2.1.0.tgz -C ../app/
[hadoop@vm01 kafka_2.11-2.1.0]$ mkdir kafkaLog/

#配置server.properties
[hadoop@vm01 config]$ pwd
/home/hadoop/app/kafka_2.11-2.1.0/config

[hadoop@vm01 config]$ vi server.properties
broker.id=0
host.name=vm01
port=9092
listeners=PLAINTEXT://vm01:9092
log.dirs=/home/hadoop/app/kafka_2.11-2.1.0/kafkaLog
zookeeper.connect=vm01:2181/kafka  #kafka元數據信息存到ZK的/kafka目錄下
#集羣是這樣子 zookeeper.connect=vm01:2181,vm02:2181,vm03:2181/kafka

#配置環境變量
[hadoop@vm01 config]$ vi ~/.bash_profile 
export KAFKA_HOME=/home/hadoop/app/kafka_2.11-2.1.0
export PATH=$KAFKA_HOME/bin:$PATH

[hadoop@vm01 config]$ source ~/.bash_profile 

3.3 Kafka啓動、測試

克隆兩個窗口,一共三個窗口,第一個啓動Kafka-Server,一直開啓,工作中把他放到後臺執行
第二個窗口,先創建Topic,然後模擬Producer生產者;第三個窗口,模擬Consumer消費者。

#第一個窗口 啓動server
[hadoop@vm01 bin]$ pwd
/home/hadoop/app/kafka_2.11-2.1.0/bin
[hadoop@vm01 bin]$ ./kafka-server-start.sh  ../config/server.properties
#第二個窗口 producer
[hadoop@vm01 bin]$ ./kafka-topics.sh \
--create \
--zookeeper vm01:2181/kafka \
--partitions 1 \
--replication-factor 1 \
--topic ruozedatag6

#查看
[hadoop@vm01 bin]$ ./kafka-topics.sh --list --zookeeper vm01:2181/kafka
ruozedatag6

#啓動Producer
[hadoop@vm01 bin]$ ./kafka-console-producer.sh \
> --broker-list vm01:9092 \
> --topic ruozedatag6
>
#第三個窗口 啓動consumer
[hadoop@vm01 bin]$ ./kafka-console-consumer.sh \
> --bootstrap-server vm01:9092 \
> --topic ruozedatag6 \
> --from-beginning  #這個代表重頭開始消費,比如再一次啓動消費端,會重頭開始讀取topic的數據

注意項:

  • 對於消費者,kafka中有兩個設置的地方:對於老的消費者,由–zookeeper參數設置;對於新的消費者,由–bootstrap-server參數設置。
  • 如果使用了–zookeeper參數,那麼consumer的信息將會存放在zk之中。
  • 查看的方法是使用./zookeeper-client,然後 ls /consumers/[group_id]/offsets/[topic]/[broker_id-part_id],這個是查看某個group_id的某個topic的offset。
  • 如果使用了–bootstrap-server參數,那麼consumer的信息將會存放在kafka之中。
#查看進程
[hadoop@vm01 bin]$ jps
38707 ConsoleConsumer
36854 Kafka
36505 QuorumPeerMain
38126 ConsoleProducer

生產端輸入 hadoop
在這裏插入圖片描述
消費端立馬就接受到信息
在這裏插入圖片描述

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