JDK ZOOKEEPER KAFKA安装
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