文章目錄
歡迎訪問筆者個人技術博客:http://rukihuang.xyz/
學習視頻來源於尚硅谷,視頻鏈接:尚硅谷大數據項目數據倉庫,電商數倉V1.2新版,Respect!
1 Kafka的安裝與配置
- 將
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
- 在
/opt/module/kafka
創建logs
文件夾
mkdir logs
- 修改配置文件
/opt/module/kafka/config/server.properties
- 集羣3個節點的broker.id必須不一樣,hadoop102的爲0,103的爲1,104的爲2
- 修改
log.dirs=/opt/module/kafka/logs
- 放開
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
- 分發至其他機器,
/opt/module/kafka/config/server.properties
的broker.id必須得改
xsync /opt/module/kafka
- 配置環境變量,新增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
- 單節點啓動腳本(羣起的話,在3個節點挨個執行)(
/opt/module/kafka
)
bin/kafka-server-start.sh config/server.properties &
- 單節點停止腳本(羣停的話,在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羣起腳本
- 在
~/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
- 增加腳本執行權限
chmod 777 kf.sh
- kafka集羣啓動
kf.sh start
- 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 系統
-
8080,80 :用於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用於監控Hadoop和Hbase運行情況。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_ |