前言

注意:Kafka是v2.8之前的版本,从v2.8版本开始不再需要借助ZooKeeper

kafka v2.8开始弃用ZooKeeper

kafka v3.0开始弃用Java 8Scala 2.12

该文章用的Kakfa版本是v3.x+版本。如果想参考v2.8x+之前的版本,点击【Kafka在Linux下载安装及部署

kafka的安装及部署

官网下载 kafka.tgz 包

我这里安装的版本:kafka_2.13-3.5.1.tgz

Kafka官网下载地址:Apache Kafka官网

上传服务器

将下载好的kafka_2.13-3.5.1.tgz包丢到服务器上任意一个你能找到的地方

创建文件夹

/usr/local路径下创建一个文件夹kafka

1
mkdir /usr/local/kafka

解压

解压压缩包到/usr/local/kafka目录下

1
tar -zxvf kafka_2.13-3.5.1.tgz -C /usr/local/kafka

新建kafka-logs

/usr/local/kafka/kafka_2.13-3.5.1新建一个文件夹kafka-logs

1
mkdir /usr/local/kafka/kafka_logs

修改kafka的配置文件

在kafka主目录下 bin/configbin/config/kraft文件夹中找到server.properties并进行修改

进入kafka根目录下

1
cd /usr/local/kafka/kafka_2.13-3.5.1

1
vim config/kraft/server.properties

重点关注这几个参数

1
2
3
4
5
node.id=1
controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093
log.dirs=/usr/local/kafka/kafka_logs
listeners=PLAINTEXT://0.0.0.0:9092 # Kafka 实际监听地址,不能写 localhost 或 127.0.0.1
advertised.listeners=PLAINTEXT://192.168.1.100:9092 # 返回给客户端的访问地址,不能写 localhost 或 127.0.0.1

注意:如果集群有多个节点,则controller.quorum.voters需要配置多个,单个的话则需要配置一个,例如:
单个节点:controller.quorum.voters=1@node1:9093
多个节点:controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093

多个节点需要逐步启动,
假设有ABC三个节点,则需每个节点的controller.quorum.voters分别为 A、A+B、A+B+C

例如:

  • 节点1:controller.quorum.voters=1@node1:9093
  • 节点2:controller.quorum.voters=1@node1:9093,2@node2:9093
  • 节点3:controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093

    多节点注意事项
    所有 Broker 节点的:controller.quorum.voters必须保持一致。例如:controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093
    否则可能导致:

    • Controller 选举异常
    • Broker 无法加入集群
    • Metadata quorum 错误

生成唯一的ID标志(使用官方提供的kafka-storage tool生成)

1
./bin/kafka-storage.sh random-uuid

u_mveSvMRlKds-tE6QnZOA

执行节点(集群的话,则需要每个节点都执行)

1
./bin/kafka-storage.sh format -t u_mveSvMRlKds-tE6QnZOA -c ./config/kraft/server.properties

查看下配置文件

1
cat /usr/local/kafka/kraft_logs/meta.properties

node.id=1
version=1
cluster.id=u_mveSvMRlKds-tE6QnZOA

启动节点服务

1
./bin/kafka-server-start.sh ./config/kraft/server.properties &

创建一个topic

1
./bin/kafka-topics.sh --create --topic foo --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092

描述topic,查看topic的详细信息

1
./bin/kafka-topics.sh --list --bootstrap-server localhost:9092

使用 systemd 管理 Kafka

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Apache Kafka
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/kafka/kafka_2.13-3.5.1/bin/kafka-server-start.sh /usr/local/kafka/kafka_2.13-3.5.1/config/kraft/server.properties
ExecStop=/usr/local/kafka/kafka_2.13-3.5.1/bin/kafka-server-stop.sh
Restart=always

[Install]
WantedBy=multi-user.target
1
2
3
systemctl daemon-reload
systemctl enable kafka
systemctl start kafka

Kafka 常用命令

删除 topic

1
2
3
4
./bin/kafka-topics.sh \
--delete \
--topic foo \
--bootstrap-server localhost:9092

查看消费者组

1
2
3
./bin/kafka-consumer-groups.sh \
--list \
--bootstrap-server localhost:9092

查看消费积压

1
2
3
4
./bin/kafka-consumer-groups.sh \
--describe \
--group test-group \
--bootstrap-server localhost:9092