问题背景
- 前段时间,遇到一个kafka集群部署在k8s中,而kafka客户端在另一个k8s集群的pod的容器中,kafka集群中配置的advertised_listeners便是hostname。然而当时我只知道kafka集群的ip地址,当在客户端直接使用ip操作broker的时候便报错无法解析一个hostname。
- 当时不知道什么原因,只听同事说需要在kafka客户端对应的yaml文件中添加HostAliases字段然后重新部署kafka客户端所在的pod。 然后便可以访问了。
- 不明所以然的我,查了一下hostAliases的使用发现没什么特别之处。然后查了listeners的使用也没有说是可以携带域名之类的
- 最后查了一下kafka客户端的请求过程才明白是怎么回事(笔者接触kafka不久只是阅读过文档并没有了解到其客户端的请求过程和步骤,所以迷惑了这么久 - _ -)
kafka broker配置介绍
kafka listeners及其相关配置项的作用
先来看一下官方文档对kafka broker中有关listeners配置项的介绍:
名称 | 描述 | 类型 | 默认值 | 有效值 | 重要性 |
---|---|---|---|---|---|
listeners | 监听器列表 - 使用逗号分隔URI列表和监听器名称。如果侦听器名称不是安全协议,则还必须设置listener.security.protocol.map。指定主机名为0.0.0.0来绑定到所有接口。留空则绑定到默认接口上。合法监听器列表的示例:PLAINTEXT:// myhost:9092,SSL://:9091 CLIENT://0.0.0.0:9092,REPLICATION:// localhost:9093 | string | null | 高 | |
advertised.listeners | 监听器发布到ZooKeeper供客户端使用,如果与listeners 配置不同。在IaaS环境,这可能需要与broker绑定不通的接口。如果没有设置,将使用listeners 的配置。与listeners 不同的是,配置0.0.0.0元地址是无 |