访问kafka
‘壹’ kafka 设置外网访问
源地址: https://blog.51cto.com/395469372/2464399
前提条件
需要一个解析到内网ip地址的域名,内网环境也可以设置/etc/hosts
参数设置
host.name=kafka.test.com(对应的域名解析需要解到内网ip)
高版本已弃用。低版本0.10.2.1可以用, 仅当listeners属性未配置时被使用,已用listeners属性代替。表示broker的hostname
advertised.listeners= PLAINTEXT://kafka.test.com:9092 (高版本用,替代 host.name ,设置了advertised.listeners不用设置 host.name )
注册到zookeeper上并提供给客户端的监听器,如果没有配置则使用listeners。
advertised.host.name(不需要设置,仅作参考)
已弃用。仅当advertised.listeners或者listeners属性未配置时被使用。官网建议使用advertised.listeners
listeners(不肆做需要设置,仅作参考)
需要监听的URL和协议,如: PLAINTEXT://myhost:9092,SSL://:9091 CLIENT://0.0.0.0:9092,REPLICATION://localhost:9093 。如果喊隐未指定该配置,则使用 java.net.InetAddress.getCanonicalHostName() 函数的的返回值裂渗衡
修改上broker的/etc/hosts文件
[内网ip] kafka.test.com
修改外网访问服务器上的/etc/hosts文件
[外网ip] kafka.test.com
‘贰’ 如何通过外网连接内网kafka程序
一、内网IP只能带闭在内网局域网访问连接,在外网是不能认识内网IP不能访问的。如有路由权限,且路由有固定公网IP,可以通过路由的端口映射,实现外网访问内网。如无路由,或路由无公网IP,需要借助第三方开放的nat123端口映射网络辅助实现外网访问内网。
端口映射网络辅助的好处是适用于任何网络环境,外网访问内网的实现过程:
在内网安装并启用nat123端口映射。添加映射,配置内外网映射信息,对应内网IP端口和外网自己的域名。外网地址贺拍可直接使用提示默认域名。
NAT映射后,通过域名访问,即可以连接内网对应IP应用。
二、要用到第三方开放的花生壳端口映射网络辅助实现外网访问内网。
方法
1、在内网安装并启用花生壳端口映射。添加映射,配置内外网映射信息,对应内网IP端口和外网自己的域名。外网地址可直接使用提示默认域名。
2、点击你想映射的域名,进入花生壳端口映射添加界面,点击打开内网映射。
3、应用名称可以随便填个好记的,内网主机就是你想被公网访问的那台电脑IP地址,内网端口就是希望被映射的端口,如下。我的内网主机是本机,就是192.168.21.250,希望被映射的端口是1024。点击确定,就启动端口映射了。
4、现在端口映射窗口就会添加一条映射记录,此时,花生壳映射后,通过域名访蠢拍裂问,即可以连接内网对应IP应用。公网只要使用花生壳分配的这个域名+端口,就可以访问内网的主机了。
‘叁’ windows 下远程连接kafka服务器并创建topic 部署服务
一.打包项目镜像:
利用Dockerfile 来打包项目的镜像
本次项目共依赖两个镜像(一个基础系统环境和一个项目镜像)
本次直接将Dockerfile写好后,用shell脚本build.sh启动打包:
然后切换到项目的目录下找到build.sh,运行即可打包项目镜像
若
报错:"failed to dial gRPC: cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: dial unix /var/run/docker.sock: connect: permission denied
"
就用
出现以下说明打包成功,接下来可以开始部署:
https://jingyan..com/article/9113f81b49ed2f2b3214c7fa.html
注意:如果遇到只读权限不能修改时,将host文件复制一份到桌面,修改后在替换原来的host文件
在hosts文件末尾加上kafka服务器< !外网! 39. 0.25...>地址,修改后的格式如下:
1.1注意: 修改阿里云服务器的hosts 文件来配置 kafka的服务器地址:
在hosts 文件最后加入:
添加的 kafka-server 就是以下创建topic命令中的 kafka-server别名,
监听远程kafka:新建宽辩顷消费者:
远程创建topic的实例:
查看远程已创建的topc:
本地:
远程修改后的kafka topic:
2.通过git Bash 切换到kafka客户端的bin目录:
桌面打开 gitBash,切换到本地kafka软件目录:
这里一定要切换为windows
3.查看已经有的topic
--topic 指定topic名字
--replication-factor 指定副本数,因为我的是集群环境,这里副本数就为3
--partitions 指定分区数,这个参数需要根据broker数和数据量决定,正常情况下,每个broker上两慎陆个partition最好
注意:服务器部署时候一定要用内网172. .开头的,外部访问设为外网ip
不然会导致Kafka写入数据的时候报错 : TImeout
4.1本地灶念docker创建topic:
4.2 本地windows 创建topic
进入本地软件路径KAFKA/BIN/WIONDOWS
创建topic
5.修改服务器的host:
一定要注意加sudo 不然会导致readonly 无法修改
在host 文件的末尾加上以下:
6.切换到工程部署的目录
7.清理redis,不然数据有残留:
7.1服务器上的redis挂载清除:
在 docker-compose.yml中注销这几行: 目的是每次启动不必记录上次没有执行完的数据.
这个是用来记录redis中假如上次指定的是1到100万块,没有执行完.下次接着执行没执行完的任务,测试时暂时关闭
7.2删除volume:
7.3 如果volume文件被占用时,先删除占用容器:
7.4 清除redis中的数据
进入redis容器中:
8.部署命令:
8.1开启docker可视化web上监控docker:
然后访问: http://39.100.48.41:9000
宿主机IP + 9000端口
8.2执行部署命令,启动服务:
9.部署时报错: yaml: line 46: did not find expected key
原因: docker-compose.yml文件中第46行 报错
解决:将所有数据对齐,不要有多余的空格.