单机部署
操作系统:CentOS Linux release 7.6.1810 (Core)
操作系统安装包:CentOS-7-x86_64-Minimal-1810.iso
JDK 版本:1.8
JDK 安装包:jdk-8u261-linux-x64.rpm
Kafka 版本:3.0.0
Kafka 安装包:kafka_2.13-3.0.0.tgz
docker 部署
docker 版本:1.13.1
python 版本:3.6.8
pip 版本:21.3.1
docker-compose 版本:1.29.2
集群部署
Zookeeper 版本:3.6.3
Zookeeper 安装包:apache-zookeeper-3.6.3.tar.gz
客户端
官网
操作系统:Windows 10(还支持其他的操作系统,详情查看官网)
客户端:kafkatool 2.2
问题:不支持 offset 放在 kafka consumer_offsets 的 customer 操作。不过可以做一些远程操作 创建/删除 topic ,查看集群状态,用起来还是比较方便的。
Kafka 官方网站
安装手册(无法网络访问,示例可通过网络访问)
kafka 下载地址
下载地址
# 安装 jdk
rpm -ivh jdk-8u261-linux-x64.rpm
# 查看版本
java -version
# 解压
tar -xzf kafka_2.13-3.0.0.tgz
# 进入目录
cd kafka_2.13-3.0.0
# 创建日志目录
mkdir logs
cd /root/kafka_2.13-3.0.0/config
vi server.properties
# 集群中每台服务器要设置为唯一不相同的整数(示例为单机不需要修改)
broker.id=0
# 日志目录,也用于 Kafka 存储数据。(可以不更改,如更改 清空数据 需要清空对应的目录)
log.dirs=/root/kafka_2.13-3.0.0/logs
# zookeeper 集群配置(示例为单机不需要修改)
zookeeper.connect=192.168.1.1:2181
# 修改 IP 地址
listeners=PLAINTEXT://192.168.1.1:9092
cd /root/kafka_2.13-3.0.0/
# start zookeeper
nohup bin/zookeeper-server-start.sh config/zookeeper.properties >./logs/stdoutzookeeper.log 2>&1 &
# 稍等一下 待 zookeeper 启动,再启动 kafka
# 检查 zookeeper 是否正常启动
jps
ss -ntl|grep 2181
# start kafka
nohup bin/kafka-server-start.sh config/server.properties >./logs/stdoutkafka.log 2>&1 &
# 查看服务是否启动
jps
ss -ntl|grep 9092
# 其他查看服务的命令
ps -ef|grep zookeeper
ps -ef|grep kafka
# 查看端口开放情况
firewall-cmd --zone=public --list-ports
# 开放端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
说明:可服务器本地测试,也可通过网络测试。
# create a topic
bin/kafka-topics.sh --create --partitions 1 --replication-factor 1 --topic quickstart-events --bootstrap-server 192.168.1.1:9092
# display usage information
bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server 192.168.1.1:9092
# WRITE SOME EVENTS INTO THE TOPIC (You can stop the producer client with Ctrl-C at any time.)
bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server 192.168.1.1:9092
This is my first event
This is my second event
# READ THE EVENTS
bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server 192.168.1.1:9092
# 停止服务
cd /root/kafka_2.13-3.0.0/
bin/kafka-server-stop.sh
bin/zookeeper-server-stop.sh
# delete any data of your local Kafka environment including any events you have created along the way
rm -rf /tmp/kafka-logs /tmp/zookeeper
# or
rm -rf /root/kafka_2.13-3.0.0/logs/* /tmp/zookeeper
docker 部署 Kafka(网络不通,只能服务器内通过 docker 使用)
docker 部署 Kafka - Scenario 3: Kafka in Docker Compose(网络问题处理方法)
docker-compose 官方文档
# 安装
yum -y install docker
# 启动
systemctl start docker
# 查看版本
docker version
# 安装 python
yum install python3 -y
# 查看版本
python3 -V
pip3 -V
# 更新 pip
python3 -m pip install --upgrade pip
# 安装 docker-compose
pip3 install docker-compose
# 查看 docker-compose 版本
docker-compose -version
# 新建文件夹
mkdir dockerComposeKafka
cd dockerComposeKafka
# 编辑文件
vi docker-compose.yml
文件 docker-compose.yml(网络不通)
---
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:6.2.0
container_name: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
broker:
image: confluentinc/cp-kafka:6.2.0
container_name: broker
ports:
# To learn about configuring Kafka for access across networks see
# https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/
- "9092:9092"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
docker-compose.yml (可以通过网络访问)
---
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:6.2.0
container_name: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
broker:
image: confluentinc/cp-kafka:6.2.0
container_name: broker
ports:
# To learn about configuring Kafka for access across networks see
# https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/
- "9092:9092"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.1.1:9092,PLAINTEXT_INTERNAL://broker:29092
LISTENERS: PLAINTEXT://192.168.1.1:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
# 查看端口开放情况
firewall-cmd --zone=public --list-ports
# 开放端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
# 第一次需要下载镜像,需要的时间比较久
docker-compose up -d
# 查看日志
docker logs -f broker
# Create a topic
docker exec broker \
kafka-topics --bootstrap-server broker:9092 \
--create \
--topic quickstart
# display usage information
docker exec broker \
kafka-topics --bootstrap-server broker:9092 \
--describe \
--topic quickstart
# Write messages to the topic
docker exec --interactive --tty broker \
kafka-console-producer --bootstrap-server broker:9092 \
--topic quickstart
# Type in some lines of text. Each line is a new message.
this is my first kafka message
hello world!
this is my third kafka message. I’m on a roll :-D
# Ctrl-D to return to your command prompt.
# Read messages from the topic
docker exec --interactive --tty broker \
kafka-console-consumer --bootstrap-server broker:9092 \
--topic quickstart \
--from-beginning
# Stop the Kafka broker
docker-compose down
# 强制停止并删除容器(异常情况)
docker rm -f broker zookeeper
说明:集群中只要有半数以上节点存活,集群就能正常服务。因此,集群最少需要 3 台服务器。(2台服务器组成的集群,其中1台宕机,集群则会宕机了。3台服务器组成的集群,其中1台宕机,集群仍可正常服务。)
说明:没有做集群优化,仅安装部署。
首先确定 Kafka 对应的 Zookeeper 的版本。/root/kafka_2.13-3.0.0/libs 中可以看到 zookeeper-3.6.3.jar 文件。说明 Kafka 3.0.0 对应的 Zookeeper 版本为 3.6.3 。
说明:只存储集群信息,不存储offset,offset 放在 kafka consumer_offsets。(官方推荐)
Zookeeper 官网
Zookeeper 下载
安装步骤可参考之前的文章。
需要注意:Zookeeper 集群安装步骤,除 myid 中写入的数字不同,其他操作 3台服务器相同即可。
安装 jdk
JDK 下载地址
# 安装 jdk
rpm -ivh jdk-8u261-linux-x64.rpm
# 查看版本
java -version
上传文件&解压
mkdir /opt/module
# 解压
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /opt/module/
修改配置
cd /opt/module/apache-zookeeper-3.6.3-bin
mkdir zkData
# 配置服务器编号(唯一标识)
cd zkData
touch myid
vi myid
# 写入唯一标识(数字)
# 配置
cd /opt/module/apache-zookeeper-3.6.3-bin/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
zoo.cfg 中需要修改的内容
dataDir=/opt/module/apache-zookeeper-3.6.3-bin/zkData
# server.A=B:C:D
# A 是一个数字,表示这个是第几号服务器
# B 是这个服务器的 IP 地址
# C 是这个服务器与集群中的 Leader 服务器交换信息的端口
# D 是万一服务器集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通讯的接口
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888
开放端口
# 查看端口开放情况
firewall-cmd --zone=public --list-ports
# 开放端口
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
启动服务
cd /opt/module/apache-zookeeper-3.6.3-bin/
bin/zkServer.sh start
# 查看是否启动
jps
ss -ntl|grep 2181
# 查看状态(Mode: leader 或 Mode: follower)
bin/zkServer.sh status
# 启动客户端
bin/zkCli.sh
# 查看目录下的文件
ls /
# 退出客户端
quit
# 停止服务
bin/zkServer.sh stop
需要注意:Kafka 集群安装步骤,除 broker.id 、listeners 不同,其他操作 3台服务器相同即可。
# 解压
tar -xzf kafka_2.13-3.0.0.tgz
# 进入目录
cd kafka_2.13-3.0.0
# 创建日志目录
mkdir logs
cd /root/kafka_2.13-3.0.0/config
vi server.properties
server.properties 中需要修改的内容
# 集群中每台服务器要设置为唯一不相同的整数
broker.id=0
# 日志目录,也用于 Kafka 存储数据。(可以不更改,如更改 清空数据 需要清空对应的目录)
log.dirs=/root/kafka_2.13-3.0.0/logs
# 配置 IP 地址
listeners=PLAINTEXT://192.168.1.1:9092
# zookeeper 集群配置
zookeeper.connect=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181
开放端口
# 查看端口开放情况
firewall-cmd --zone=public --list-ports
# 开放端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
cd /root/kafka_2.13-3.0.0/
# start kafka
nohup bin/kafka-server-start.sh config/server.properties >./logs/stdoutkafka.log 2>&1 &
# 查看服务是否启动
jps -l
ss -ntl|grep 9092
# 其他查看服务的命令
ps -ef|grep kafka
通过 客户端 kafkatool 或者相关监控软件,可以看到 3 台服务器形成了一个 Kafka 集群。
# 停止服务
cd /root/kafka_2.13-3.0.0/
bin/kafka-server-stop.sh
# delete any data of your local Kafka environment including any events you have created along the way
rm -rf /tmp/kafka-logs
# or
rm -rf /root/kafka_2.13-3.0.0/logs/*
单机本地部署、Docker 部署(不需要网络访问),按照官网的方式即可。
通过 Docker 部署并需要网络访问的过程中,稍微曲折一点,参考文档稍微少一点。
集群部署需要掌握 Zookeeper 的集群部署方式。