數據倉庫 — 07_Kafka的安裝與部署(Kafka命令行操作指令、Kafka集羣羣起腳本、壓力測試、節點數量計算、hadoop_zookeeper_flume_kafka羣起腳本、默認端口總結)


歡迎訪問筆者個人技術博客:http://rukihuang.xyz/
學習視頻來源於尚硅谷,視頻鏈接:尚硅谷大數據項目數據倉庫,電商數倉V1.2新版,Respect!

1 Kafka的安裝與配置

  1. kafka_2.11-0.11.0.2.tgz上傳至102機器/opt/software目錄下,並解壓安裝至/opt/module,重命名爲kafka
tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/
mv kafka_2.11-0.11.0.0/ kafka
  1. /opt/module/kafka創建logs文件夾
mkdir logs
  1. 修改配置文件/opt/module/kafka/config/server.properties
    1. 集羣3個節點的broker.id必須不一樣,hadoop102的爲0,103的爲1,104的爲2
    2. 修改log.dirs=/opt/module/kafka/logs
    3. 放開delete.topic.enable=true,使topic可以被刪除
#broker 的全局唯一編號,不能重複
broker.id=0
#刪除topic 功能使能
delete.topic.enable=true
#處理網絡請求的線程數量
num.network.threads=3
#用來處理磁盤IO 的現成數量
num.io.threads=8
#發送套接字的緩衝區大小
socket.send.buffer.bytes=102400
#接收套接字的緩衝區大小
socket.receive.buffer.bytes=102400
#請求套接字的緩衝區大小
socket.request.max.bytes=104857600
#kafka 運行日誌存放的路徑
log.dirs=/opt/module/kafka/logs
#topic 在當前broker 上的分區個數
num.partitions=1
#用來恢復和清理data 下數據的線程數量
num.recovery.threads.per.data.dir=1
#segment 文件保留的最長時間,超時將被刪除
log.retention.hours=168
#配置連接Zookeeper 集羣地址
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181
  1. 分發至其他機器,/opt/module/kafka/config/server.properties的broker.id必須得改
xsync /opt/module/kafka
  1. 配置環境變量,新增kafka環境變量(另外2個節點的也要手動修改)
vim /etc/profile.d/env.sh
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin
#使配置文件生效
source /etc/profile.d/env.sh
  1. 單節點啓動腳本(羣起的話,在3個節點挨個執行)(/opt/module/kafka)
bin/kafka-server-start.sh config/server.properties &
  1. 單節點停止腳本(羣停的話,在3個節點挨個之心)(同上)
bin/kafka-server-stop.sh stop

2 Kafka命令行操作

  • 均在/opt/module/kafka目錄下執行

2.1 查看當前服務器中的所有topic

bin/kafka-topics.sh --zookeeper hadoop102:2181 --list

2.2 創建topic

#創建topic_start
bin/kafka-topics.sh --zookeeper hadoop102:2181,hadoop103:2181,hadoop104:2181 --create --replication-factor 1 --partitions 1 --topic topic_start
#創建topic_event
bin/kafka-topics.sh --zookeeper hadoop102:2181,hadoop103:2181,hadoop104:2181 --create --replication-factor 1 --partitions 1 --topic topic_event
  • 選項說明:
    • --topic 定義topic 名
    • --replication-factor定義副本數
    • --partitions 定義分區數

2.3 刪除topic

bin/kafka-topics.sh --delete --zookeeper hadoop102:2181,hadoop103:2181,hadoop104:2181 --topic topic_stop
  • 需要server.properties中設置delete.topic.enable=true,否則只是標記刪除或者直接重啓。

2.4 發送消息

bin/kafka-console-producer.sh --broker-list hadoop102:9092 --topic topic_start

2.5 消費消息

bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --from-beginning --topic topic_start
  • --from-beginning:會把該topic中以往所有的數據都讀取出來。根據業務場景選擇是否增加該配置。

2.6 查看某個topic的詳情

bin/kafka-topics.sh --zookeeper hadoop102:2181 --describe --topic topic_start

3 Kafka羣起腳本

  1. ~/bin目錄下創建kf.sh
#!/bin/bash

case $1 in
"start"){
	for i in hadoop102 hadoop103 hadoop104
		do
			echo --------$i 啓動kafka---------
			ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties"
		done
};;
"stop"){
	for i in hadoop102 hadoop103 hadoop104
		do
			echo --------$i 停止kafka---------
			ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh stop"
		done
};;
esac
  1. 增加腳本執行權限
chmod 777 kf.sh
  1. kafka集羣啓動
kf.sh start
  1. kafka集羣停止
kf.sh stop

4 項目經驗——Kafka壓力測試

4.1 Kafka壓測

  • 用Kafka 官方自帶的腳本,對Kafka 進行壓測。Kafka 壓測時,可以查看到哪個地方出現了瓶頸(CPU,內存,網絡IO)。一般都是網絡IO 達到瓶頸。生產和消費的腳本分別爲:
    • kafka-consumer-perf-test.sh
    • kafka-producer-perf-test.sh

4.2 生產者壓測 producer

  • /opt/module/kafka
bin/kafka-producer-perf-test.sh --topic test --record-size 100 --num-records 100000 --throughput -1 --producer-props bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092
  • 說明
    • record-size是一條信息有多大,單位是字節。
    • num-records 是總共發送多少條信息。
    • throughput 是每秒多少條信息,設成-1,表示不限流,可測出生產者最大吞吐量。
  • 結果

在這裏插入圖片描述

4.3 消費者壓測 consumer

  • /opt/module/kafka
bin/kafka-consumer-perf-test.sh --zookeeper hadoop102:2181 --topic test --fetch-size 10000 --messages 10000000 --threads 1
  • 說明
    • --zookeeper 指定zookeeper 的鏈接信息
    • --topic 指定topic 的名稱
    • --fetch-size 指定每次fetch 的數據的大小
    • --messages總共要消費的消息個數
  • 結果

在這裏插入圖片描述

5 項目經驗——Kafka機器數量計算

Kafka 機器數量(經驗公式)=2* (峯值生產速度 * 副本數/100)+1
先拿到峯值生產速度,再根據設定的副本數,就能預估出需要部署Kafka 的數量。
比如我們的峯值生產速度是50M/s。副本數爲2。
Kafka 機器數量=2* (50*2/100)+ 1=3 臺

6 Hadoop、zookeeper、flume、kafka羣起羣停腳本

case $1 in
"start"){
	echo " -------- 啓動集羣-------"
	echo " -------- 啓動hadoop 集羣-------"
	/opt/module/hadoop-2.7.2/sbin/start-dfs.sh
	ssh hadoop103 "/opt/module/hadoop-2.7.2/sbin/start-yarn.sh"
	#啓動Zookeeper 集羣
	zk.sh start
	sleep 4s;
	#啓動Flume 採集集羣
	f1.sh start
	#啓動Kafka 採集集羣
	kf.sh start
	sleep 6s;
	#啓動Flume 消費集羣
	f2.sh start
};;
"stop"){
	echo " -------- 停止集羣-------"
	#停止Flume 消費集羣
	f2.sh stop
	#停止Kafka 採集集羣
	kf.sh stop
	sleep 6s;
	#停止Flume 採集集羣
	f1.sh stop
	#停止Zookeeper 集羣
	zk.sh stop
	echo " -------- 停止hadoop 集羣-------"
	ssh hadoop103 "/opt/module/hadoop-2.7.2/sbin/stop-yarn.sh" 
	/opt/module/hadoop-2.7.2/sbin/stop-dfs.sh
};;
esac
  • 注意點:
    • 其中 kafka依賴zk,zk一掛,kafka就再也關不了了,需要手動Kill,或者加延時,flume之前也要加延時,避免提前消費導致消費不到數據
    • 使用kafka-server-stop腳本無法關閉kafka,解決方式參考https://blog.csdn.net/KingAnne/article/details/101034794

7 hadoop部署相關的默認端口

7.1 系統

  • 808080 :用於tomcat和apache的端口。

  • 22 :ssh的端口

7.2 Web UI

用於訪問和監控Hadoop系統運行狀態

Daemon 缺省端口 配置參數
HDFS Namenode 50070 dfs.http.address
Datanodes 50075 dfs.datanode.http.address
Secondarynamenode 50090 dfs.secondary.http.address
Backup/Checkpoint node* 50105 dfs.backup.http.address
MR Jobracker 50030 mapred.job.tracker.http.address
Tasktrackers 50060 mapred.task.tracker.http.address
HBase HMaster 60010 hbase.master.info.port
HRegionServer 60030 hbase.regionserver.info.port
** hadoop 0.21以後代替secondarynamenode*

7.3 內部端口

Daemon 缺省端口 配置參數 協議 用於
Namenode 9000 fs.default.name IPC: ClientProtocol Filesystem metadata operations.
Datanode 50010 dfs.datanode.address Custom Hadoop Xceiver: DataNodeand DFSClient DFS data transfer
Datanode 50020 dfs.datanode.ipc.address IPC:InterDatanodeProtocol,ClientDatanodeProtocol ClientProtocol Block metadata operations and recovery
Backupnode 50100 dfs.backup.address 同 namenode HDFS Metadata Operations
Jobtracker 9001 mapred.job.tracker IPC:JobSubmissionProtocol,InterTrackerProtocol Job submission, task tracker heartbeats.
Tasktracker 127.0.0.1:0* mapred.task.tracker.report.address IPC:TaskUmbilicalProtocol 和 child job 通信
** 綁定到未用本地端口*

7.4 相關產品端口

產品 服務 缺省端口 參數 範圍 協議 說明
HBase Master 60000 hbase.master.port External TCP IPC
Master 60010 hbase.master.info.port External TCP HTTP
RegionServer 60020 hbase.regionserver.port External TCP IPC
RegionServer 60030 hbase.regionserver.info.port External TCP HTTP
HQuorumPeer 2181 hbase.zookeeper.property.clientPort TCP HBase-managed ZK mode
HQuorumPeer 2888 hbase.zookeeper.peerport TCP HBase-managed ZK mode
HQuorumPeer 3888 hbase.zookeeper.leaderport TCP HBase-managed ZK mode
REST Service 8080 hbase.rest.port External TCP
ThriftServer 9090 Pass -p<port> on CLI External TCP
Avro server 9090 Pass –port <port> on CLI External TCP
Hive Metastore 9083 External TCP
HiveServer 10000 External TCP
Sqoop Metastore 16000 sqoop.metastore.server.port External TCP
ZooKeeper Server 2181 clientPort External TCP Client port
Server 2888 X in server.N=host:X:Y Internal TCP Peer
Server 3888 Y in server.N=host:X:Y Internal TCP Peer
Server 3181 X in server.N=host:X:Y Internal TCP Peer
Server 4181 Y in server.N=host:X:Y Internal TCP Peer
Hue Server 8888 External TCP
Beeswax Server 8002 Internal
Beeswax Metastore 8003 Internal
Oozie Oozie Server 11000 OOZIE_HTTP_PORT in oozie-env.sh External TCP HTTP
Oozie Server 11001 OOZIE_ADMIN_PORT in oozie-env.sh localhost TCP Shutdown port

7.5 YARN(Hadoop 2.0)缺省端口

產品 服務 缺省端口 配置參數 協議
Hadoop YARN ResourceManager 8032 yarn.resourcemanager.address TCP
ResourceManager 8030 yarn.resourcemanager.scheduler.address TCP
ResourceManager 8031 yarn.resourcemanager.resource-tracker.address TCP
ResourceManager 8033 yarn.resourcemanager.admin.address TCP
ResourceManager 8088 yarn.resourcemanager.webapp.address TCP
NodeManager 8040 yarn.nodemanager.localizer.address TCP
NodeManager 8042 yarn.nodemanager.webapp.address TCP
NodeManager 8041 yarn.nodemanager.address TCP
MapReduce JobHistory Server 10020 mapreduce.jobhistory.address TCP
MapReduce JobHistory Server 19888 mapreduce.jobhistory.webapp.address TCP

7.6 第三方產品端口

ganglia用於監控HadoopHbase運行情況。kerberos是一種網絡認證協議,相應軟件由麻省理工開發。

產品 服務 安全 缺省端口 協議 訪問 配置
Ganglia ganglia-gmond 8649 UDP/TCP Internal
ganglia-web 80 TCP External 通過 Apache httpd
Kerberos KRB5 KDC Server Secure 88 UDP*/TCP External [kdcdefaults] 或 [realms]段下的kdc_ports 和 kdc_tcp_ports
KRB5 Admin Server Secure 749 TCP Internal Kdc.conf 文件:[realms]段kadmind_
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章