Kafka需要使用Zookeeper进行调度,本文描述的主要内容有:

  • 使用Kafka自带的zookeeper进行安装(可参看kafka自带的说明文件)
  • 为Kafka和zookeep配置CentOS下的服务
  • 为Kafka和zookeep配置Firwalld相关的文件

前提

安装环境为CentOS7.x,官网下载最新版的Kafka,解压至/opt/kafka或者/home/中(可以创建一个指向当前版本的软连接)。

  • 方式1:

解压到指定文件夹下

tar -zxf kafka_2.12-2.1.1.tar.gz -C /opt 

创建指向当前版本的软连接

ln -s /opt/kafka_2.12-2.1.1 /opt/kafka
  • 方式2:

解压到指定文件夹下

tar -zxf kafka_2.12-2.1.1.tar.gz -C /home/kafka

创建指向当前版本的软连接

ln -s /home/kafka/kafka_2.12-2.1.1 /home/kafka/run

此处的kafka为创建的普通用户(可以执行sudo,建议加入管理员组wheel)。

为Zookeeper创建服务

系统定义服务脚本位于/usr/lib/systemd/system/目录下,自定义服务脚本位于/etc/systemd/system/目录下。因此在/etc/systemd/system/目录下,新建zookeeper.service文件,内容如下:

  • 方式1:
[Unit]
Description=zookeeper.service
After=network.target

[Service]
User=root
Type=forking
ExecStart=/usr/bin/bash /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
ExecStop=/usr/bin/bash /opt/kafka/bin/zookeeper-server-stop.sh
ExecReload=$ExecStop;$ExecStart
LimitCORE=infinity
LimitNOFILE=10240
LimitNPROC=10240

[Install]
WantedBy=multi-user.target
  • 方式2:
[Unit]
Description=zookeeper.service
After=network.target

[Service]
User=kafka
Group=kafka
Type=forking
ExecStart=/usr/bin/bash /home/kafka/run/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
ExecStop=/usr/bin/bash /home/kafka/run/bin/zookeeper-server-stop.sh
ExecReload=$ExecStop;$ExecStart
LimitCORE=infinity
LimitNOFILE=10240
LimitNPROC=10240

[Install]
WantedBy=multi-user.target

为Kafka创建服务

在/etc/systemd/system/目录下,创建kafka.service文件

  • 方式1:
[Unit]
Description=kafka.service
After=network.target remote-fs.target zookeeper.service

[Service]
User=root
Type=forking
ExecStart=/usr/bin/bash /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
ExecStop=/usr/bin/bash /opt/kafka/bin/kafka-server-stop.sh
ExecReload=$ExecStop;$ExecStart
LimitCORE=infinity
LimitNOFILE=204800
LimitNPROC=204800

[Install]
WantedBy=multi-user.target
  • 方式2:
[Unit]
Description=kafka.service
After=network.target remote-fs.target zookeeper.service

[Service]
User=kafka
Group=kafka
Type=forking
ExecStart=/usr/bin/bash /home/kafka/run/bin/kafka-server-start.sh -daemon /home/kafka/run/config/server.properties
ExecStop=/usr/bin/bash /home/kafka/run/bin/kafka-server-stop.sh
ExecReload=$ExecStop;$ExecStart
LimitCORE=infinity
LimitNOFILE=204800
LimitNPROC=204800

[Install]
WantedBy=multi-user.target

为Zookeeper创建Firewalld的配置文件

系统自带的firewalld管理的服务位于/usr/lib/firewalld/services/目录下,自定义的firewalld管理服务位于/etc/firewalld/services/目录下。因此在/etc/firewalld/services/目录下,新建zookeeper.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<service>
    <short>Zookeeper</short>
		<description>Zookeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. Usually used with Kafka.</description>
		<port protocol="tcp" port="2181"/>
		<port protocol="tcp" port="2888-3888"/>
</service>

为Kafka创建Firewalld的配置文件

在/etc/firewalld/services/目录下,新建kafka.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<service>
    <short>Kafka</short>
		<description>Kafka is a streaming platform.</description>
		<port protocol="tcp" port="9092"/>
</service>

Firewall离线命令——firewall-offline-cmd

即在firewalld服务关闭状态下添加新的防火墙规则。原因:在防火墙启动后才能使用firewall-cmd进行防火墙的操作(如规则的添加),而现在还没有将规则录入,而服务又在运行之中,为了开启防火墙后,且规则没有添加前,不影响现有服务通信,需要使用firewall-offline-cmd进行规则的导入,格式可以参看help或firewall-cmd。