公司统一使用阿里云服务器,原来的开发服务器也用的阿里云服务器。为了方便开发人员,不想让开发人员在自己电脑上再运行kafka服务器和zookeeper服务器。希望所有开发人员都直接连接阿里云上的kafka服务器,方便开发。
Kafka服务器默认是不支持绑定到公网IP的。哪怕你把配置文件 config/server.properties 中的配置项 advertised.listeners=PLAINTEXT://你的地址:9092 设置成公网IP都没用。Kafka 服务器在启动的时候会报错,并且导致无法启动。
本人实验,直接设置IP是无效的。当然也可能是我没想到好方法。我的思路是利用客户端和阿里云服务器对域名的不同解析来解决这个问题。
首先要有个公网的域名能够绑定你的服务器的公网IP。
把 kafka 压缩包下载,解压并上传到服务器上。利用cd命令进入kafka目录。
找到 config/server.properties 文件,确保有一项配置是这样的:
advertised.listeners=PLAINTEXT://your.host.cn:9092其中 your.host.cn 就是你的公网域名。listeners= 这一项注释掉。
修改 hosts,执行命令 vi /etc/hosts 加入下面这项:
172.12.13.104 your.host.cn其中 172.12.13.104 是阿里云服务器的内网IP,your.host.cn 是你的公网域名。 `
阿里云服务器安装 screen
yum install -y screen用screen 是为了方便查进程和杀死进程。
因为Kafka依赖zookeeper,先运行zookeeper
screen -S zk_kafka进入新屏幕后启动 zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties按 ctrl + A + D 退出zookeeper 的屏幕。
创建 kafka 服务器的屏幕:
screen -S kafka在新屏幕运行命令:
bin/kafka-server-start.sh config/server.properties按 ctrl + A + D 退出 kafka 的屏幕。
执行命令: ps -auxf 可以清晰的看到进程树。
为了验证效果,我在自己的笔记本上测试了一下。笔记本是WIndows操作系统。kafka压缩包在windows上解压,在命令行通过 cd 命令进入 kafka 目录。执行下面的命令:
bin\windows\kafka-topics.bat --list --bootstrap-server relationship.centling.cn:9092如果没报错,能看到服务器上的topic,就算是成功了。