JDK17下載安裝
mkdir -p /usr/local/develop
cd /usr/local/develop
將下載的包上傳服務器指定路徑
解壓文件
tar -zxvf jdk-17.0.14_linux-x64_bin.tar.gz -C /usr/local/develop/
修改文件夾名
mv /usr/local/develop/jdk-17.0.14 /usr/local/develop/java17
配置環境變量
vim /etc/profile
?
export JAVA_HOME=/usr/local/develop/17
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
保存之后讓環境變量生效
source /etc/profile
KAFKA下載安裝
kafka.apache.org
將下載的包放到/usr/local/develop路徑下
解壓
tar -xvf kafka_2.13-3.9.0.tgz -C /usr/local/develop/
Kafka 的版本命名方式 kafka_2.13-3.9.0
可以拆分成兩部分:
2.13
:指的是 Scala 版本3.9.0
:指的是 Kafka 的版本號
cd kafka_2.13-3.9.0
命令區別
在解壓JDK和KAFKA時候
JDK用了tar -zxvf? 而KAFKA用了 tar -xvf的原因
Kafka啟動方式
kafka基于Scala開發,需要Java8+環境
有兩種啟動方式
1種是基于zookeeper? 另外一種是基于KRaft(用于取代Zookeeper)
基于ZOOKEEPER啟動
(zookeeper也是java開發的)
進去kafka的bin目錄
cd /usr/local/develop/kafka_2.13-3.9.0/bin
先啟動zookeeper 并指定Zookeeper的配置文件? 即使不指定應該也是用的這個配置文件
nohup ./zookeeper-server-start.sh ../config/zookeeper.properties > /usr/local/develop/zookeeper.log 2>&1 &
啟動kafka
nohup ./kafka-server-start.sh ../config/server.properties > /usr/local/develop/zookeeper.log 2>&1 &
關閉kafka
./kafka-server-stop.sh
關閉zookeeper
./zookeeper-server-stop.sh
可以通過
netstat -nlpt ? 查看使用的端口
基于KRaft啟動(無需zookeeper)
cd /usr/local/develop/kafka_2.13-3.9.0/bin
生成 Cluster UUID(集群ID)
./kafka-storage.sh random-uuid? ? ? ? ? ? ? 可以多次執行? 每次生成的UUID不同
格式化存儲?format -t? 后面是集群ID 然后指定配置
./kafka-storage.sh format -t zvalKa2rSxmM_NUp6hOxxQ -c ../config/kraft/server.properties &
啟動 Kafka
nohup ./kafka-server-start.sh ../config/kraft/server.properties > /usr/local/develop/zookeeper.log 2>&1 &
關閉
./kafka-server-stop.sh
?
解釋:事實上UUID可以隨意? ?但是當第一次啟動之后 在/tmp/kraft-combined-logs 中已經將zvalKa2rSxmM_NUp6hOxxQ集群ID寫入? ?可以
rm -rf?/tmp/kraft-combined-logs? ?這樣的話? 集群ID是123也可以啟動
./kafka-storage.sh format -t 123 -c ../config/kraft/server.properties &
使用獨立zookerper
kafka自帶了zookerper
zookeeper下載安裝
都一樣? 隨便點擊下載? ?或者用wget下載
cd /usr/local/develop
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.3/apache-zookeeper-3.9.3-bin.tar.gz
解壓
tar -zxvf apache-zookeeper-3.9.3-bin.tar.gz -C /usr/local/develop/
cd apache-zookeeper-3.9.3-bin
配置zookeeper
cd /usr/local/develop/apache-zookeeper-3.9.3-bin/conf
cp zoo_sample.cfg zoo.cfg
啟動zookeeper
./zkServer.sh start? ? ? ? ? ? ? ? ? ? 默認就會用zoo.cfg的配置
./zkServer.sh stop? ? ?關閉zookeeper
netstat -nlpt? ? ? ? ? ?查看使用的端口和pid
zookeeper會啟用一個8080端口? 為避免端口沖突? ?修改下配置
?ZooKeeper的8080端口主要用于管理界面和REST API服務?。ZooKeeper的默認管理端口是8080,通過這個端口可以訪問ZooKeeper的管理界面和REST API,從而進行配置管理、監控和調試等操作?
kill之后重啟zookeeper? ? 或者在zookeeper的bin目錄下執行? ?./zkServer.sh stop
?ZooKeeper的8080端口主要用于管理界面和REST API服務?。ZooKeeper的默認管理端口是8080,通過這個端口可以訪問ZooKeeper的管理界面和REST API,從而進行配置管理、監控和調試等操作?
不了解之前? 安全組還是關閉的好
用獨立zookeeper啟動kafka
先啟動zookeeper
nohup/usr/local/develop/apache-zookeeper-3.9.3-bin/bin/zkServer.sh start
啟動kafka
nohup /usr/local/develop/kafka_2.13-3.9.0/bin/kafka-server-start.sh /usr/local/develop/kafka_2.13-3.9.0/config/server.properties > /usr/local/develop/zookeeper.log 2>&1? ? ? ?后面加&? 不加是前臺啟動
關閉kafka
/usr/local/develop/kafka_2.13-3.9.0/bin/kafka-server-start.sh
關閉zookeeper
ps -ef|grep?zoo
或者
netstat -nlpt
然后kill?
通過Docker安裝kafka
1.安裝docker
查看是否安裝過docker
yum list installed|grep docker
卸載docker
sudo yum remove docker \
? ? ? ? ? ? ? ? ? docker-client \
? ? ? ? ? ? ? ? ? docker-client-latest \
? ? ? ? ? ? ? ? ? docker-common \
? ? ? ? ? ? ? ? ? docker-latest \
? ? ? ? ? ? ? ? ? docker-latest-logrotate \
? ? ? ? ? ? ? ? ? docker-logrotate \
? ? ? ? ? ? ? ? ? docker-engine
安裝最新版本docker
設置docker的下載鏡像? 這個適合國外,國內可能有點慢
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
?
國內用這個
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
上面兩個命令-->向 /etc/yum.repos.d/
目錄中新增一個 .repo
配置文件,讓 yum
能夠從指定的 Docker 倉庫下載軟件包。? ??docker-ce.repo作用是指定去哪里下載鏡像? 鏡像源配置文件
/etc/yum.repos.d
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
設置docker開機自啟
sudo systemctl enable docker
配置docker鏡像加速器
vim /etc/docker/daemon.json
{
? "registry-mirrors": [
? ? "https://dockerproxy.com",
? ? "https://mirror.baidubce.com",
? ? "https://docker.m.daocloud.io",
? ? "https://docker.nju.edu.cn",
? ? "https://docker.mirrors.sjtug.sjtu.edu.cn"
? ]
}
?
加載配置
sudo systemctl daemon-reload
如果無法啟動 配置vim /etc/docker/daemon.json的時候格式有誤
sudo systemctl restart docker
systemctl status docker? ?查看docker狀態
systemctl stop docker? ?停止docker
也可以使用
service docker start? ?啟動
service docker stop? ?停止
service docker restart? 重啟
2.docker安裝kafka
docker search kafka
可以查看kafka文檔
也可以上docker查看
我這里就按kafka官方推薦的
拉取鏡像也可以直接run? 沒有就會自動下載
docker pull apache/kafka-native:3.9.0
先要啟動zookeeper?
docker run -d --name dckafka -p 9092:9092 apache/kafka:3.9.0
Docker配置Kafka
以上方式啟動kafka的話,用于本地測試,外部無法連接
https://hub.docker.com/r/apache/kafka
Docker容器的kafka三種配置方式,
1.就是默認配置 (因沒有配置,外部無法連接,只有本地測試可用)
2.文件輸入:提供一個本地kafka屬性配置文件,替換docker容器中kafka的默認配置
3.環境變量:通過-e 變量? 在啟動時候覆蓋默認配置中的對應屬性值
在kafka的docker容器內部?/etc/kafka/docker? 下有個server.properties
需要將這個文件放到宿主機
mkdir -p /usr/local/develop/docker/kafka/data
創建Topic
這里暫時用傳統方式啟動zookeeper和kafka? ? 用kafka自帶的zookeeper
進去kafka的bin目錄
cd /usr/local/develop/kafka_2.13-3.9.0/bin
先啟動zookeeper
nohup ./zookeeper-server-start.sh ../config/zookeeper.properties > /usr/local/develop/zookeeper.log 2>&1 &
啟動kafka
nohup ./kafka-server-start.sh ../config/server.properties > /usr/local/develop/zookeeper.log 2>&1 &
# 1. 創建主題??--bootstrap-server localhost:9092指要連接的kafka服務器
./kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
./kafka-topics.sh --create --topic quickstart-events2 --partitions 2 --bootstrap-server localhost:9092? ? 指定分區數量
修改分區數量(分區數量只能加 不能減 (刪了重新創建))
./kafka-topics.sh --alter --topic quickstart-events2 --partitions 5 --bootstrap-server localhost:9092
# 2. 列出所有主題
./kafka-topics.sh --list --bootstrap-server localhost:9092
# 3. 顯示主題詳細信息
./kafka-topics.sh --describe --topic quickstart-events2 --bootstrap-server localhost:9092
# 4. 刪除主題
./kafka-topics.sh --delete --topic quickstart-events --bootstrap-server localhost:9092
Kafka和EMQX的區別
生產者消費者通信(發送接收)
示例:
創建Topic
./kafka-topics.sh --create --topic topic-0 --bootstrap-server localhost:9092
生產者發送消息
./kafka-console-producer.sh --topic topic-0 --bootstrap-server localhost:9092? 回車后建立生產者的連接通道,消息就會被發送到 Kafka topic-0
主題中。
消費者讀消息(拉取)??--from-beginning 消費拉取該topic所有歷史消息 (因此每次啟動都可以重復消費)
./kafka-console-consumer.sh --topic topic-0 --from-beginning --bootstrap-server localhost:9092
沒有--from-beginning 只會消費(拉取)新消息?消費者啟動之后生產者發送的消息
./kafka-console-consumer.sh --topic topic-0 --bootstrap-server localhost:9092
?