首页 Ubuntu下安装Kafka集群
文章
取消

Ubuntu下安装Kafka集群

笔者有3台虚拟机机器,分别为 master、node1、node2,它们可以通过主机名互联互通,在这三台机器上部署 Kafka 集群。

配置 Java 环境

由于 Kafka 依赖 Java8+ 环境所以需要先配置好 Java 环境。

我们使用 openjdk

1
2
3
4
5
6
7
8
9
10
root@master:/home/uphie# jdk
Command 'jdk' not found, did you mean:
  command 'juk' from deb juk (4:21.12.3-0ubuntu1)
  command 'jdb' from deb openjdk-11-jdk-headless (11.0.18+10-0ubuntu1~22.04)
  command 'jdb' from deb openjdk-17-jdk-headless (17.0.6+10-0ubuntu1~22.04)
  command 'jdb' from deb openjdk-18-jdk-headless (18.0.2+9-2~22.04)
  command 'jdb' from deb openjdk-19-jdk-headless (19.0.2+7-0ubuntu3~22.04)
  command 'jdb' from deb openjdk-8-jdk-headless (8u362-ga-0ubuntu1~22.04)
  command 'jd' from deb jdim (0.7.0-1)
Try: apt install <deb name>

在 master 上选用 openjdk-19-jdk-headless 安装:

1
root@master:/home/uphie# apt install -y openjdk-19-jdk-headless

配置环境变量:

1
2
root@master:/home/uphie# echo "JAVA_HOME=$(readlink -f /usr/bin/java | sed "``s:bin/java::``")" | tee -a /etc/profile
JAVA_HOME=/usr/lib/jvm/java-19-openjdk-amd64/

前面修改了 文件,使之生效:

1
root@master:/home/uphie# source /etc/profile

检查下环境变量:

1
2
root@master:/home/uphie# echo $JAVA_HOME
/usr/lib/jvm/java-19-openjdk-amd64/

按同样方法配置节点机器 node1 和 node2。

下载 Kafka

从官网 https://kafka.apache.org/downloads 选择 Kafka 版本并下载,笔者选择的是编译过的 3.4.0。

1
root@master:/home/uphie# wget https://downloads.apache.org/kafka/3.4.0/kafka_2.13-3.4.0.tgz

将下载的安装包复制到另外两个节点:

1
2
3
4
5
6
7
root@master:/home/uphie# scp kafka_2.13-3.4.0.tgz uphie@node1:/home/uphie/
uphie@node1's password:
kafka_2.13-3.4.0.tgz                                                                                                                              100%  101MB  72.7MB/s   00:01
root@master:/home/uphie#
root@master:/home/uphie# scp kafka_2.13-3.4.0.tgz uphie@node2:/home/uphie/
uphie@node2's password:
kafka_2.13-3.4.0.tgz                                                                                                                              100%  101MB  68.8MB/s   00:01

解压:

1
root@master:/home/uphie# tar -zxf kafka_2.13-3.4.0.tgz

移到 /opt 目录下:

1
root@master:/home/uphie# mv /home/uphie/kafka_2.13-3.4.0 /opt/

给 kafka 目录添加软链接,方便以后升级(升级时只需修改软链接的指向即可):

1
root@master:/home/uphie# ln -s /opt/kafka_2.13-3.4.0 /opt/kafka

配置和启动服务

3.4.0 版本可以选择 zookeeper 或 kraft 启动集群,笔者选择较新的 kraft 方式。

修改 kraft 配置文件:

1
root@master:/home/uphie# vim /opt/kafka/config/kraft/server.properties

修改以下配置,读者也可根据自己需要修改其他配置:

1
2
3
4
5
6
7
8
9
10
11
12
# The node id associated with this instance's roles
# 节点 ID,每个节点的 ID 需不同
node.id=100

# The connect string for the controller quorum
# 节点选举用的连接方式
controller.quorum.voters=100@master:9093,101@node1:9093,102@node2:9093

# Listener name, hostname and port the broker will advertise to clients.
# If not set, it uses the value for "listeners".
# 对外代理地址,每个节点的对外代理地址不同
advertised.listeners=PLAINTEXT://master:9092

注:建议修改 log.dirs 的默认目录,如 log.dirs=/var/kraft-combined-logs,具体原因参见 https://uphie.studio/posts/Kafka%E9%87%8D%E5%90%AF%E5%A4%B1%E8%B4%A5/

生成一个 cluster ID:

1
2
root@master:/home/uphie# /opt/kafka/bin/kafka-storage.sh random-uuid
blibId1XQpSU_RS4_FEkow

将 cluster ID 更新到 kraft 配置文件中:

1
2
root@master:/home/uphie# /opt/kafka/bin/kafka-storage.sh format -t blibId1XQpSU_RS4_FEkow -c /opt/kafka/config/kraft/server.properties
Formatting /tmp/kraft-combined-logs with metadata.version 3.4-IV0.

添加一个 Kafka 服务单元,方便管理:

1
root@master:/home/uphie# vim /etc/systemd/system/kafka.service

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Apache Kafka Server
Documentation=http://kafka.apache.org/documentation.html
 
[Service]
Type=simple
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
 
[Install]
WantedBy=multi-user.target

启动验证下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root@master:/home/uphie# systemctl start kafka
root@master:/home/uphie# systemctl status kafka
● kafka.service - Apache Kafka Server
     Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2023-03-19 09:47:43 CST; 7s ago
       Docs: http://kafka.apache.org/documentation.html
   Main PID: 157894 (java)
      Tasks: 71 (limit: 2225)
     Memory: 316.2M
        CPU: 6.603s
     CGroup: /system.slice/kafka.service
             └─157894 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:Initiatin>

Mar 19 09:47:48 master kafka-server-start.sh[157894]: [2023-03-19 09:47:48,537] INFO [Transaction M>
Mar 19 09:47:48 master kafka-server-start.sh[157894]: [2023-03-19 09:47:48,600] INFO [ExpirationRea>
Mar 19 09:47:48 master kafka-server-start.sh[157894]: [2023-03-19 09:47:48,765] INFO [/config/chang>
Mar 19 09:47:48 master kafka-server-start.sh[157894]: [2023-03-19 09:47:48,784] INFO [SocketServer >
Mar 19 09:47:48 master kafka-server-start.sh[157894]: [2023-03-19 09:47:48,806] INFO Kafka version:>
Mar 19 09:47:48 master kafka-server-start.sh[157894]: [2023-03-19 09:47:48,807] INFO Kafka commitId>
Mar 19 09:47:48 master kafka-server-start.sh[157894]: [2023-03-19 09:47:48,807] INFO Kafka startTim>
Mar 19 09:47:48 master kafka-server-start.sh[157894]: [2023-03-19 09:47:48,809] INFO [KafkaServer i>
Mar 19 09:47:48 master kafka-server-start.sh[157894]: [2023-03-19 09:47:48,934] INFO [BrokerToContr>
Mar 19 09:47:48 master kafka-server-start.sh[157894]: [2023-03-19 09:47:48,984] INFO [BrokerToContr>

按同样方法操作其他节点,笔者 master 节点的 node id为100,node1节点的为 101,node2节点的为102。

验证

在 master 节点创建一个测试 topic:

1
2
root@master:/home/uphie# /opt/kafka/bin/kafka-topics.sh --create --replication-factor 1 --partitions 1 --topic testtopic --bootstrap-server localhost:9092
Created topic testtopic.

在 node1节点查看测试 topic:

1
2
root@node1:/home/uphie# /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
testtopic

在 node2 节点查看测试 topic:

1
2
root@node2:/home/uphie# /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
testtopic

自此 Kafka 集群安装部署完成。

使用 Web UI(可选)

这个步骤可选,读者可以根据自己需要选择是否要启动一个 Web UI 页面来管理 Kafka。

笔者选择 docker 容器启动(参考 https://github.com/provectus/kafka-ui )。

1
2
3
4
5
6
$ docker pull provectuslabs/kafka-ui:master
$ docker run --name kafka_ui \
      -p 8080:8080 \
      -e KAFKA_CLUSTERS_0_NAME=vm_kafka \
      -e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=master:9092,node1:9092,node2:9092 \
      -d provectuslabs/kafka-ui:master

稍等一会儿,让后在浏览器中打开 http://localhost:8080 查看。

本文由作者按照 CC BY 4.0 进行授权