Kafka部署:
目前Kafka的最新的源碼包版本爲2.2.1,二進制版本爲2.12-2.2.1;
一般好多人都採用二進制部署,因爲解壓即用,快捷方便,再此也選擇二進制安裝,官方建議用二進制的2.12版本;
Kafka官方下載地址:http://kafka.apache.org/downloads
Kafka_2.12下載地址:http://mirror.bit.edu.cn/apache/kafka/2.2.1/kafka_2.12-2.2.1.tgz
下載安裝包
解壓安裝包到/usr/local/
更改kafka目錄名
export KAFKA_HOME= /usr/local/kafka
export PATH= \$PATH :\$KAFKA_HOME /bin
EOF
添加Kafaka環境變量
重新加載文件
ZooKeeper部署:
ZooKeeper官方站點:https://zookeeper.apache.org/
Kafka使用ZooKeeper來管理,因此需要安裝ZooKeeper,並且要先啓動ZooKeeper。
但是在Kafka中內置了ZooKeeper配置文件:/usr/local/kafka/config/zookeeper.properties,單機部署我們選擇Kafka所提供的ZK配置文件來使用ZK,但是如果是集羣環境的Kafka,建議使用單獨的ZooKeeper來管理Kafka集羣,以下我們選擇使用Kafka內置的ZooKeeper來管理單節點的Kafka。
注意:
ZooKeeper需要允許Java環境,需要先部署JDK。
JDK下載鏈接:https://www.oracle.com/technetwork/java/javase/archive-139210.html
解壓安裝包到/usr/local/
export JAVA_HOME= /usr/local/jdk1.8.0_161
export JRE_HOME= \$JAVA_HOME /jre
export CLASSPATH= .:\$JAVA_HOME /lib/dt.jar:\$JAVA_HOME /lib/tools.jar:\$JRE_HOME /lib
export PATH= \$JAVA_HOME /bin:\$JRE_HOME /bin:\$PATH
EOF
添加Kafaka環境變量
重新加載文件
驗證查看jdk版本號
修改Zookeeper配置文件與詳解:
tickTime= 2000
initLimit= 10
syncLimit= 5
dataDir= /data/ZK
dataLogDir= /data/zk-logs
clientPort= 2181
maxClientCnxns= 60
autopurge.snapRetainCount= 3
autopurge.purgeInterval= 1
server.1= localhost:2888:3888
Kafka目錄文件介紹:
Kafka根目錄文件介紹:
total 52
drwxr-xr-x 3 root root 4096 May 14 00:18 bin
drwxr-xr-x 2 root root 4096 Jun 24 16:41 config
drwxr-xr-x 2 root root 215 Jun 23 00:56 kafka-logs
drwxr-xr-x 2 root root 4096 Jun 23 00:49 libs
-rw-rw-r-- 1 root root 32216 May 14 00:10 LICENSE
drwxr-xr-x 2 root root 182 Jun 23 00:51 logs
-rw-rw-r-- 1 root root 336 May 14 00:10 NOTICE
drwxr-xr-x 2 root root 44 May 14 00:18 site-docs
Kafka執行程序介紹:
total 132
-rwxrwxr-x 1 root root 945 May 13 16:10 kafka-console-consumer.sh
-rwxrwxr-x 1 root root 944 May 13 16:10 kafka-console-producer.sh
-rwxrwxr-x 1 root root 871 May 13 16:10 kafka-consumer-groups.sh
-rwxrwxr-x 1 root root 863 May 13 16:10 kafka-topics.sh
-rwxrwxr-x 1 root root 1393 May 13 16:10 zookeeper-server-start.sh
-rwxrwxr-x 1 root root 1001 May 13 16:10 zookeeper-server-stop.sh
修改Kafka主配置文件server.properties:
broker.id= 1
listeners= PLAINTEXT://172.17.0.2:9092
num.network.threads= 3
num.io.threads= 8
socket.send.buffer.bytes= 102400
socket.receive.buffer.bytes= 102400
socket.request.max.bytes= 104857600
log.dirs= /data/kafka-logs/
num.partitions= 1
num.recovery.threads.per.data.dir= 1
offsets.topic.replication.factor= 1
transaction.state.log.replication.factor= 1
transaction.state.log.min.isr= 1
log.retention.hours= 168
log.segment.bytes= 1073741824
log.retention.check.interval.ms= 300000
zookeeper.connect= 172.17.0.2:2181
zookeeper.connection.timeout.ms= 6000
group.initial.rebalance.delay.ms= 0
啓動Zookeeper與Kafka:
查看進程以確保zk啓動
LISTEN 0 50 *:2181 *:* users:(( "java" ,pid= 830,fd= 101))
查看進程連接
1858 QuorumPeerMain
2280 Jps
2201 Kafka
下面通過過濾端口號可以看到
ZooKeeper監控本地地址TCP端口2181,可以ZooKeeper看到2181後面對應的還有一個端口號爲43354
Kafka監控本地地址TCP端口9092,可以看到Kafka9092後面也有對應的一個端口號55036
tcp 0 0 172.17.0.2:9092 0.0.0.0:* LISTEN 1041/java
tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 700/java
tcp 0 0 172.17.0.2:2181 172.17.0.2:43354 ESTABLISHED 700/java
tcp 0 0 172.17.0.2:43354 172.17.0.2:2181 ESTABLISHED 1041/java
tcp 0 0 172.17.0.2:9092 172.17.0.2:55036 ESTABLISHED 1041/java
tcp 0 0 172.17.0.2:55036 172.17.0.2:9092 ESTABLISHED 1041/java
查看2181端口的監聽狀態
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 700 root 101u IPv4 23940 0t0 TCP *:eforward ( LISTEN)
java 700 root 103u IPv4 18120 0t0 TCP kafka_node1:eforward-> kafka_node1:43354 ( ESTABLISHED)
java 1041 root 101u IPv4 25680 0t0 TCP kafka_node1:43354-> kafka_node1:eforward ( ESTABLISHED)
查看9092的端口監聽狀態
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1041 root 158u IPv4 24974 0t0 TCP kafka_node1:XmlIpcRegSvc ( LISTEN)
java 1041 root 174u IPv4 30888 0t0 TCP kafka_node1:55036-> kafka_node1:XmlIpcRegSvc ( ESTABLISHED)
java 1041 root 177u IPv4 29475 0t0 TCP kafka_node1:XmlIpcRegSvc-> kafka_node1:55036 ( ESTABLISHED)
管理Kafka:
接下來操作下Kafka,通過kafka-topics.sh新建一個Topic,然後使用kafka-console-producer.sh消息生產腳本來生產消息到Topic中,再由kafka-console-consumer.sh消息消費者消費消息,以及常用的選項介紹。
此處使用的Kafka版本爲kafka_2.12-2.2.1.tgz,但是在Kafka的上一個版本中kafka_2.11-2.1.0.tgz,Kafka的命令配置發生了改變,以下我們把兩個版本的命令都寫出來:
新版本:2.12-2.2.1
老版本:2.11-2.1.0
創建Topic主題:
新版本:
老版本:
選項解釋:
–create:創建新的Topic
–bootstrap-server:指定要哪臺Kafka服務器上創建Topic,主機加端口,指定的主機地址一定要和配置文件中的listeners一致
–zookeeper:指定要哪臺zookeeper服務器上創建Topic,主機加端口,指定的主機地址一定要和配置文件中的listeners一致
–replication-factor:創建Topic中的每個分區(partition)中的複製因子數量,即爲Topic的副本數量,建議和Broker節點數量一致,如果複製因子超出Broker節點將無法創建
–partitions:創建該Topic中的分區(partition)數量
–topic:指定Topic名稱
區別:
–bootstrap-server:新版本爲bootstrap-server,新版本把Topic創建到了Kafka中,也就意味着信息要被存儲到Broker節點的Topic中
–zookeeper:老版本爲zookeeper,老版本是把Topic創建到了zookeeper中,意味着信息要被存儲到ZooKeeper應用的Topic中
總結:
我們的這個2.2.1版本這兩種目前都支持,但是官方建議使用新版本的選項。
查看已創建的Topic:
新版本:
kafka_new_01
kafka_old_01
老版本:
kafka_new_01
kafka_old_01
區別:
使用不同的選項要指定不同的服務和端口
生產消息:
注意:
生產消息在新版本中未發生改變,同樣是向Broker節點發送消息,這也證實了producer生產者無需和ZooKeeper節點產生連接,只需和Broker建立連接即可,如果瞭解更多kafka的架構及工作原理,請看該篇文章的架構圖部分:文檔:Kafka理論概述(一).note
以下向兩個Topic中發送不同的消息,該消息內容爲手動輸入
生產kafka_new_01:
> Hello Kafka_new_01
> I'm the new version
生產kafka_old_01:
# /usr/local/kafka/bin/kafka-console-producer.sh --broker-list 172.17.0.2:9092 --topic kafka_old_01
>Hello Kafka_old_01
>I' m the old version
參數解釋:
--broker-list:指定使用哪臺broker來生產消息
--topic:指定要往哪個Topic中生產消息
消費消息:
消費Kafka_new_01:
kafka_new_01 --from-beginning
Hello Kafka_new_01
I'm the new version
消費Kafka_old_01:
# /usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server 172.17.0.2:9092 --topic
kafka_old_01 --from-beginning
Hello Kafka_old_01
I' m the old version
參數解釋:
--bootstrap-server:指定要在哪臺broker節點消費消息,指明IP和端口。
--topic:指定要在哪個Topic中消費消息。
--from-beginning:獲取所有未被消費的信息
查看Topic詳情:
新版本命令:
Topic:kafka_new_01 PartitionCount:1 ReplicationFactor:1 Configs:segment.bytes= 1073741824
Topic: kafka_new_01 Partition: 0 Leader: 1 Replicas: 1 Isr: 1
老版本命令:
Topic:kafka_new_01 PartitionCount:1 ReplicationFactor:1 Configs:
Topic: kafka_new_01 Partition: 0 Leader: 1 Replicas: 1 Isr: 1
參數解釋:
--Topic:kafka_new_01:topic名稱
--PartitionCount:1:分片數量
--ReplicationFactor:1:Topic副本數量
刪除Topic:
使用--bootstrap-server刪除
使用--zookeeper刪除
Topic kafka_old_01 is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
雖然有提示說"kafka_old_01" 只是標記被刪除,但是沒關係
__consumer_offsets
查看已創建Topic,我們創建的兩個Topic已經被刪除掉了,但是Kafka自動生成了一個叫__consumer_offsets的Topic。