
一、安装JDK
bash
mkdir -p /home/winner/software
cd /home/winner/software/
tar -zxvf jdk-8u333-linux-x64.tar.gz
tar -zxvf kafka_2.11-2.0.0.tgz
ln -s jdk1.8.0_333 jdk
ln -s kafka_2.11-2.0.0 kafka
配置环境变量
cs
vim /etc/profile
export JAVA_HOME=/home/winner/software/jdk
export JRE_HOME=/home/winner/software/jdk/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CLASSPATH=::$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile

二、配置Kafka
修改进程可以使用的最大内存映射区域数。
#编辑配置文件 /etc/sysctl.conf (永久生效)
vm.max_map_count=262144
编辑完文件后命令行执行 sysctl -p 立即永久生效
#命令行执行
sysctl -w vm.max_map_count=262144 (当前会话生效)
Kafka的配置文件位于config目录下,主要涉及以下几个文件:
- server.properties:Kafka broker的配置文件。
- zookeeper.properties:Zookeeper的配置文件。
2.1 配置Zookeeper
Kafka依赖于Zookeeper进行元数据管理。在单机环境下,Zookeeper可以作为Kafka的一部分运行。编辑zookeeper.properties文件,确保以下配置项正确:
dataDir=/home/winner/software/kafka/zookeeper
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
配置 kafka环境变量
vim /etc/profile
export KAFKA_HOME=/home/winner/software/kafka/
export PATH=$PATH:$KAFKA_HOME/bin
-- 配置生效
source /etc/profile
2.2配置Kafka Broker
编辑server.properties文件,配置Kafka broker的基本参数:
broker.id=1
#broker对外提供的服务入口地址。
listeners=PLAINTEXT://0.0.0.0:9092
#代理将向生产者和消费者发布的主机名和端口
advertised.listeners=PLAINTEXT://192.168.2.223:9092
#使用的认证协议
security.inter.broker.protocol=PLAINTEXT
#SASL机制
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
#完成身份验证的类
#authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
#如果没有找到ACL(访问控制列表)配置,则允许任何操作。
allow.everyone.if.no.acl.found=false
#需要开启设置超级管理员,设置visitor用户为超级管理员
#super.users=User:winner
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/home/winner/software/kafka/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
2.3 启动Zookeeper与Kafka
在单机环境下,Zookeeper和Kafka可以分别启动。首先启动Zookeeper:
zookeeper-server-start.sh -daemon config/zookeeper.properties
然后启动Kafka broker:
kafka-server-start.sh -daemon config/server.properties
如果一切正常,你将看到Kafka broker成功启动的日志信息。
成功连接。
2.4 配置密码
在Kafka broker的配置目录中添加一个JAAS文件kafka_server_jaas.conf
[root@winner install]# cat /home/winner/software/kafka/config/kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin123"
user_admin="admin123"
user_test="test123";
};
此配置定义了两个用户(admin和test)。KafkaServer中的username、password配置的用户和密码,是用来broker和broker连接认证。在本例中,admin是代理broker间通信的用户。user_userName 配置为连接到broker的所有用户定义密码,broker使用这些验证所有客户端连接,包括来自其他broker的连接。
在server.properties中配置SASL端口和SASL机制,如下:
-
**security.inter.broker.protocol:**用于broker之间通信的安全协议。有效值为:PLAINTEXT、SSL、SASL_PLAINTEXT、SASL_SSL
-
sasl.mechanism.inter.broker.protocol: 用于broker间通信的SASL机制,默认值为GSSAPI
-
**sasl.enabled.mechanisms:**Kafka服务器中启用的SASL机制列表。该列表可以包含安全提供程序可用的任何机制。默认情况下仅启用GSSAPI。
broker.id=1
listeners=SASL_PLAINTEXT://0.0.0.0:9092
#advertised.listeners=PLAINTEXT://192.168.2.223:9092
advertised.listeners=SASL_PLAINTEXT://192.168.2.223:9092
#使用的认证协议
security.inter.broker.protocol=SASL_PLAINTEXT
#SASL机制
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
#完成身份验证的类
#authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
#如果没有找到ACL(访问控制列表)配置,则允许任何操作。
allow.everyone.if.no.acl.found=false
#需要开启设置超级管理员,设置visitor用户为超级管理员
#super.users=User:winner
num.network.threads=8
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/home/winner/software/kafka/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
修改kafka启动脚本
vim bin/kafka-server-start.sh,在文件最上面添加变量
export KAFKA_OPTS="-Djava.security.auth.login.config=/home/winner/software/kafka/config/kafka_server_jaas.conf"
启动生产者
kafka-console-producer.sh --broker-list 192.168.2.223:9092 --topic aio --producer-property security.protocol=SASL_PLAINTEXT --producer-property sasl.mechanism=PLAIN

启动消费者
kafka-console-consumer.sh --bootstrap-server 192.168.2.223:9092 --topic aio --from-beginning --consumer-property security.protocol=SASL_PLAINTEXT --consumer-property sasl.mechanism=PLAIN
查看创建的 topic

三、服务注册
3.1Zookeeper 开机自启服务
cs
vim /etc/systemd/system/zookeeper.service
[Unit]
Description=Zookeeper Service
After=network.target
[Service]
Type=simple
Environment="JAVA_HOME=/home/winner/software/jdk"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/winner/software/jdk/bin"
User=root
Group=root
ExecStart=/home/winner/software/kafka/bin/zookeeper-server-start.sh /home/winner/software/kafka/config/zookeeper.properties
ExecStop=/home/winner/software/kafka/bin/zookeeper-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
3.2Kafka 开机自启服务
vim /etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka server broker
After=network.target zookeeper.service
[Service]
Type=simple
Environment="JAVA_HOME=/home/winner/software/jdk"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/winner/software/jdk/bin"
User=root
Group=root
ExecStart=/home/winner/software/kafka/bin/kafka-server-start.sh /home/winner/software/kafka/config/server.properties
ExecStop=/home/winner/software/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动
systemctl daemon-reload
systemctl start zookeeper
systemctl start kafka
systemctl enable zookeeper.service
systemctl enable kafka.service
systemctl status zookeeper
systemctl status kafka