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"}

 

posted @ 2025-05-09 10:38  百衲本  阅读(194)  评论(0)    收藏  举报
cnblogs_post_body { color: black; font: 0.875em/1.5em "微软雅黑" , "PTSans" , "Arial" ,sans-serif; font-size: 15px; } cnblogs_post_body h1 { text-align:center; background: #333366; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 23px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h2 { text-align:center; background: #006699; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 20px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h3 { background: #2B6695; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } 回到顶部 博客侧边栏 回到顶部 页首代码 回到顶部 页脚代码