Kafka--Linux-CentOs7环境下搭建单机环境

一、安装JDK8

二、安装zookeeper

新版的Kafka自带zookeeper,也可以使用自带的,我这里为了体验安装zookeeper的过程,选择自己安装
zookeeper3.7安装参考

三、安装

下载Kafka的包
Kafka官网下载
在这里插入图片描述

kafka_2.13-2.7.1.tgz

1.解压到opt目录下

tar -zxvf kafka_2.13-2.7.1.tgz

2.进入config目录,修改server.properties文件

############################# Server Basics #############################
broker.id=0
############################# Socket Server Settings #############################
listeners=PLAINTEXT://0.0.0.0:5555
advertised.listeners=PLAINTEXT://(本机IP):5555
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
############################# Log Basics #############################
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
############################# Internal Topic Settings  #############################
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
############################# Log Retention Policy #############################
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
############################# Zookeeper #############################
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=18000
############################# Group Coordinator Settings #############################
group.initial.rebalance.delay.ms=0

下面两项不是默认的配置,在这里会出现各种问题后面会详细写明
我使用的是阿里云服务器,所以advertised.listeners使用的服务器的公网IP
listeners=PLAINTEXT://0.0.0.0:5555
advertised.listeners=PLAINTEXT://(本机IP):5555

四、启动测试

1.zookeeper

[root@rookieWRL bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.7.0-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@rookieWRL bin]# 

2.启动Kafka

去到Kafka的bin目录下

./kafka-server-start.sh  ../config/server.properties

3.创建topic

去到Kafka的bin目录下

#创建topic
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test1

#查看topic信息
./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test1

4.开启生产者

复制出一个新的会话窗口

#启动生产者控制台
[root@rookieWRL bin]# ./kafka-console-producer.sh --broker-list 0.0.0.0:5555 --topic test1

正常情况下这里我使用0.0.0.0或者是advertised.listeners配置项里面的IP都可以的IP来开启生产者和消费者

公网IP开启
在这里插入图片描述

如下图发送消息
0.0.0.0开启
在这里插入图片描述

5.开启消费者

再复制出 一个新的窗口

[root@rookieWRL bin]# ./kafka-console-consumer.sh --bootstrap-server 0.0.0.0:5555 --topic test1 --from-beginning

公网IP开启
在这里插入图片描述
0.0.0.0开启
消费者启动成功,成功消费消息就会打印生产者发送的消息,这里面有部分是springboot程序发送的不用在意
在这里插入图片描述

六、配置问题

目前这里,zookeeper,Kafka,生产者,消费者都在一个主机里面。
接下来目前的主要问题是下面两个配置

listeners=PLAINTEXT://0.0.0.0:5555
advertised.listeners=PLAINTEXT://(本机IP):5555

我查了一些资料以及配置文件也有部分说明这两个配置项的作用(看配置文件的注释,养成好习惯)

在一开始在配置文件使用的是默认的9092端口,在在防火墙开启了这个端口,也在阿里云安全组配置了这个端口

接下来问题就慢慢出现了

之后启动Kafka服务在命令中是不用指定IP和端口的,指定配置文件就行,执行开启服务的命令后你能看见Kafka请求的是listeners=PLAINTEXT://0.0.0.0:5555配置项类里面的配置

情况1

listeners=PLAINTEXT://公网IP:5555
advertised.listeners=PLAINTEXT://公网IP:5555
启动Kafka服务
在这里插入图片描述

这里就能猜测Kafka服务的启动需要使用这个配置项的IP和端口
查了些资料,这个配置项好像只能配置0.0.0.0或者localhost和内网IP
listeners:启动kafka服务监听的ip和端口,可以监听内网ip和0.0.0.0(不能为外网ip),默认为java.net.InetAddress.getCanonicalHostName()获取的ip。
既然这样,我们就配置为0.0.0.0就行

情况二、

listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://公网IP:9092
启动生产者和消费者
在这里插入图片描述
在这里插入图片描述
Kafka服务通过这个端口倒是可以成功启动,但是生产者和消费者无法通过公网IP加9092端口连接,但是可以用我自己开的一个端口5555来连接,这是为什么文章开始我是用的是5555端口而不是默认端口9092。具体为什么可能还要研究,可能不是端口的问题

advertised.listeners:生产者和消费者连接的地址,kafka会把该地址注册到zookeeper中,所以只能是除0.0.0.0之外的合法ip或域名 ,默认和listeners的配置一致。

至于是怎么发现可能是端口有问题的,大概是下面的过程
使用telnet命令测试: telnet 公网IP:9092,结果连接不上,但是其他端口可以。这里要注意防火墙是不是正常,是不是开启了这个端口,以及安全组是不是开放了这个端口。
我想开启防火墙时执行这个:systemctl start firewall.service
出现了

Failed to start firewall.service: Unit not found.

我就有点懵了

后来发现是是我的防火墙没有弄好,没有安装,但是我之前的一些端口也设置了的,有点懵,既然这样就安装吧

(使用yum install firewalld命令安装时,中间停顿输入y既可)
yum install firewalld
systemctl unmask firewalld
systemctl enable firewalld
systemctl start firewalld
1、开启防火墙 
systemctl start firewalld
2、开放指定端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent
 命令含义:
--zone #作用域
--add-port=1935/tcp  #添加端口,格式为:端口/通讯协议
--permanent  #永久生效,没有此参数重启后失效
3、重启防火墙
firewall-cmd --reload

之后呢,就9092也可以使用了

systemctl start firewalld.service //开启防火墙
systemctl stop firewalld.service //关闭防火墙
systemctl enable firewalld.service //设置开机自动启动
systemctl disable firewalld.service //设置关闭开机制动启动
firewall-cmd --reload//在不改变状态的条件下重新加载防火墙

参考资料:
关于新方法和旧方法的问题
关于springboot中Kafka配置文件
Linux防火墙问题
Linux防火墙开放端口
telnet命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值