前言
与第三方数据同步,约定使用kafka作为接收数据的中间件,但是之前配置有问题,所以导致外网无法向我们集群生产数据(我们的集群有公网网卡,对外暴露了指定的端口),后来查了很多资料才知道,需要做一些配置,下面我将配置要点贴下面。
配置方法
找到kafka的server.properties进行修改!
listeners=INSIDE://内网ip1:port1,OUTSIDE://内网ip1:port2
advertised.listeners=INSIDE://内网ip1:port1,OUTSIDE://外网ip1:port2
listener.security.protocol.map=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
inter.broker.listener.name=INSIDE
这里注意,配置listeners
特别重要,他是作为广播地址注册到zookeeper的,所有访问zookeeper去拿server地址,都是这个配置映射的。这里不管是配置外网,还是内网,都用内网ip!但是端口是不同的!
配置advertised.listeners
时一定要注意协议,配置外网ip的时候一定对应好外网ip地址,端口号和绑定listeners
中的OUTSIDE
端口号对应。
这里使用的是map(listener.security.protocol.map
)配置,可以把key看作变量,具体value是协议名称!
#listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
注意
kafka自0.10.0开始以后的高版本kafka自己维护自己消费的offset,而不通过zookeeper来维护,实现原理是自己创建一个topic来维护leader的offset位置。所以在生产中,需要将这个topic副本调整大于1,如果没有调整,可能会出现一种情况,挂掉的节点刚好有这个topic,但是由于最小副本数是1,就没有可用副本,导致集群不可用。
将这个配置调整,保证集群可用!
offsets.topic.replication.factor=3
未指定 inter.broker.listener.name
inter.broker.listener.name=INSIDE
这个配置不要遗漏。
总结
只要仔细配置就不会出错!