centos7部署kafka单机版及公网代理访问
1.下载相关软件包
#JDK使用1.8 软件包自行下载
wget https://downloads.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
wget https://archive.apache.org/dist/kafka/3.7.0/kafka_2.13-3.7.0.tgz
2.配置Java环境变量
tar xf jdk-8u201-linux-x64.tar.gz -C /usr/local
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/jdk1.8.0_201
export CLASSPATH=$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile.d/java.sh
echo $JAVA_HOME
3.安装及配置zookeeper
tar xf apache-zookeeper-3.8.4-bin.tar.gz -C /usr/local
cd /usr/local
ln -sv apache-zookeeper-3.8.4-bin zookeeper
cd zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/Data/zookeeper #数据目录
clientPort=2181
dmin.enableServer=true
admin.serverPort=8888
4.安装及配置kafka
tar xf kafka_2.13-3.7.0.tgz -C /usr/local
cd /usr/local
ln -sv kafka_2.13-3.7.0 kafka
cd kafka/config/
cp server.properties server.properties-bak
vim server.properties #其他保持默认,如果zookeepr为集群则修改zookeeper配置 external-kafka.test.com为外部代理地址 外部访问需要配置DNS解析,如果代理的为集群则代理添加其他服务器及端口转发即可
broker.id=0
listeners=INTERNAL://192.168.100.1:9092,EXTERNAL://external-kafka.test.com:9093
inter.broker.listener.name=INTERNAL
advertised.listeners=INTERNAL://192.168.100.1:9092,EXTERNAL://external-kafka.test.com:9093
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
log.dirs=/Data/kafka #kafka 数据目录
主要配置项简解:
listeners
先看第一个配置项:listeners。这里有两个监听器,INTERNAL和EXTERNAL,分别指向内网的IP和主机名加端口。这说明这个Broker同时监听两个端口,一个给内部网络,另一个给外部。内网使用具体的IP,而外部可能通过主机名解析到不同的IP,比如可能有负载均衡或者不同子网的情况。
inter.broker.listener.name
inter.broker.listener.name=INTERNAL。这应该是指定了Broker之间通信使用的监听器名称。因为Kafka的Broker需要与其他Broker通信来同步元数据和消息,所以这里设置成INTERNAL,意味着它们会使用内网的监听器地址进行通信。通常内网监听器的地址应该是可靠的,不会变化,适合服务间通信。
advertised.listeners
这里同样配置了INTERNAL和EXTERNAL。广告监听器是告诉客户端这个Broker的地址,客户端会根据自己所在的监听器类型来连接。比如,内部客户端可能会连接到INTERNAL的地址,而外部客户端则连接到EXTERNAL的。注意这里的EXTERNAL用的是主机名kafka1,可能需要DNS解析或者负载均衡来指向正确的IP
listener.security.protocol.map
INTERNAL和EXTERNAL监听器都映射到PLAINTEXT协议。这意味着这两个监听器都不加密通信,适用于测试环境,但在生产环境中应该使用SSL或SASL等安全协议 。
5.启动服务
useradd avatar
mkdir -pv /Data/{kafka,zookeeper}
chown -R avatar:avatar /Data
chown -R avatar:avatar /usr/local/kafka_2.13-3.7.0/
chown -R avatar:avatar /usr/local/apache-zookeeper-3.8.4-bin/
vim /etc/hosts #必须,DNS解析为公网地址,如果本地hosts不配置解析则无法监听端口
192.168.100.1 external-kafka.test.com
#启动ZK
su - avatar
cd /usr/local/zookeeper/bin/
./zkServer.sh start
./zkServer.sh status
netstat -tnlp
#启动Kfaka
cd /usr/local/kafka/bin/
./kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
netstat -tnlp
tcp6 0 0 192.168.100.1:9092 :::* LISTEN 11544/java
tcp6 0 0 192.168.100.1:9093 :::* LISTEN 11544/java
6.测试
1.本地测试
# 查看有哪些topic
./kafka-topics.sh --bootstrap-server external-kafka.test.com:9093 --list
# 创建一个topic
./kafka-topics.sh --bootstrap-server external-kafka.test.com:9093 --create --replication-factor 1 --partitions 30 --topic test-topic
# 生产一条消息
echo '{"key":"value"}' | ./kafka-console-producer.sh --broker-list external-kafka.test.com:9093 --topic test-topic
# 消费数据
./kafka-console-consumer.sh --bootstrap-server external-kafka.test.com:9093 --topic test-topic --from-beginning --max-messages 3
2.公网测试
#将kafka安装包解压到其他服务器上
#配置 external-kafka.test.com 公网地址解析,此处使用hosts完成
vim /etc/hosts
47.116.xx.xxx external-kafka.test.com
#配置代理四层转发到 kafka服务器的9093端口
#测试写入和读取消息
echo '{"key1":"value1"}' | ./kafka-console-producer.sh --broker-list external-kafka.test.com:9093 --topic test-topic
./kafka-console-consumer.sh --bootstrap-server external-kafka.test.com:9093 --topic test-topic --from-beginning --max-messages 3
{"key":"value"}
{"key1":"value1"}
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少