kafka集群搭建
背景
使用virtualbox搭建kafka集群,涉及到不同网络策略的取舍
首先 桥接 网络虽说 啥都可以,但是涉及到过多ip的时候,而且还不能保证使用的ip不被占用,所以个人选择kafka虚拟机集群的连通性上面使用host-only作为支撑。
host-only网络互通
这篇文章说的很美好。但是对于我这个一锁屏virtualbox就故障退出后续网络就无法ssh的来说是个奢望,搞了很久也没有搞好,也就是宿主机和host-only的集群之间无法直接访问[天秀啊,直接给我干成 现实内网了]。没辙,只能再搞一个nat的混搭风格再加上端口映射进来。
再叠上kafka集群的。buff直接加满。
以下是我使用的virtualbox 网络配置:
host-only | bd1 | bd2 | bd3 |
---|---|---|---|
IPADDR | 10.1.16.111 | 10.1.16.112 | 10.1.16.113 |
HWADDR | ip addr 出来的对应值 | 同左 | 同左 |
host-only图片
全局nat设置[如果没有这个界面就是vritualbox版本不够考虑升级]
单台服务器nat配置
bd1 host-only | bd1 nat |
---|---|
TYPE=Ethernet | TYPE=Ethernet |
BOOTPROTO=static | BOOTPROTO=static |
DEFROUTE=yes | NM_CONTROLLER=yes |
NAME=enp0s8 | DEVICE=enp0s9 |
DEVICE=enp0s8 | ONBOOT=yes |
ONBOOT=yes | IPADDR=10.0.4.11 # 可看到和上图对应 |
NM_CONTROLLED=yes | NETMASK=255.255.255.0 |
IPADDR=10.1.16.111 | GATEWAY=10.0.4.1 |
HWADDR=08:00:27:f2:0e:a1 | HWADDR=08:00:27:ee:3e:13 |
空 | DNS1=114.114.114.114 |
空 | DNS2=8.8.8.8 |
配合上述配置 举个栗子说明下:
kafka机器 | 相关配置 ; EXTERNAL表示用于外网访问的ip; LOCAL表示kafka集群内部使用ip ; advertised.listeners表示给外界client返回节点信息所以使用的是外界能够访问过来的配置 |
---|---|
bd1 | listeners=EXTERNAL://10.0.4.11:19092,LOCAL://10.1.16.111:9092 advertised.listeners=EXTERNAL://localhost:9991,LOCAL://10.1.16.111:9092 inter.broker.listener.name=LOCAL listener.security.protocol.map=EXTERNAL:PLAINTEXT,LOCAL:PLAINTEXT |
bd2 | listeners=EXTERNAL://10.0.4.12:29092,LOCAL://10.1.16.112:9092 advertised.listeners=EXTERNAL://localhost:9992,LOCAL://10.1.16.112:9092 inter.broker.listener.name=LOCAL listener.security.protocol.map=EXTERNAL:PLAINTEXT,LOCAL:PLAINTEXT |
bd3 | listeners=EXTERNAL://10.0.4.13:39092,LOCAL://10.1.16.113:9092 advertised.listeners=EXTERNAL://localhost:9993,LOCAL://10.1.16.113:9092 inter.broker.listener.name=LOCAL listener.security.protocol.map=EXTERNAL:PLAINTEXT,LOCAL:PLAINTEXT |
windows 机器 通过 访问 localhost的不同端口 来访问不同kafka的外部地址。
例如, 访问 bd1的9092过程.
windows上访问 localhost:9991 走 10.0.4.11:19092, kafka收到数据 就会返回给 adverties.listener的配置【 localhost:9991 】 信息给客户端 完成一个闭环。
然后kafka 集群内部的访问 通过 10.1.16. 网段来进行。
参数 | 解释 |
---|---|
advertised.listeners | 发到客户端的请求返回来的节点信息。 有点对外交流渠道的意思 |
listeners | 是Broker用来监听网络请求的。 |
listener.security.protocol.map | 监听器名称和安全协议之间的映射关系集合. 形如:监听名称1:安全协议1,监听名称2:安全协议2 |
inter.broker.listener.name | 用于 Broker 之间通信的 listener 的名称。EXTERNAL 和 LOCAL 因为是同一台机器的所以需要不同的端口。 |
端口图
集群内使用
集群内 /etc/hosts
windows 程序访问
// pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dns-cache-manipulator</artifactId>
<version>1.5.0</version>
</dependency>
//dns-cache.properties
bd1=127.0.0.1
bd2=127.0.0.1
bd3=127.0.0.1
至此完结。
致敬:
https://www.cnblogs.com/dongmzh/p/16403833.html
https://www.cnblogs.com/AzkbanHan/p/11277814.html
https://bbs.huaweicloud.com/blogs/198453
https://www.cnblogs.com/tinkone/p/10277034.html