要让Kafka运行,您需要在config/server.properties
文件中设置一些属性.我不明白有两种设置.
有人可以解释一下监听器和advertised.listeners属性之间的区别吗?
文件说:
listeners:套接字服务器侦听的地址.
和
advertised.listeners:代理将向生产者和消费者做广告的主机名和端口.
我何时必须使用哪种设置?
由于我无法发表评论,我会将其作为"答案"发布,并添加到M.Situations的答案中.
在他链接的同一文档中,有一个关于KAFKA客户端使用哪个监听器的模糊(https://cwiki.apache.org/confluence/display/KAFKA/KIP-103%3A+Separation+of+Internal+and+外部+流量):
如前所述,客户端永远不会看到侦听器名称,并且将像以前一样完成元数据请求.不同之处在于,它们返回的端点列表仅限于发出请求的端点的侦听器名称.
这很重要,因为取决于您在bootstrap.servers配置中使用的URL,如果它在advertised.listeners中映射,客户端将返回的URL*(如果侦听器不存在则不知道行为是什么) ).
另请注意:
基于ZooKeeper的消费者是个例外.这些消费者直接从ZooKeeper检索代理注册信息,并将选择第一个使用PLAINTEXT作为安全协议的侦听器(它们支持的唯一安全协议).
作为示例代理配置(对于集群中的所有代理):
advertised.listeners = EXTERNAL://XXXXX.compute-1.amazonaws.com:9990,内部://ip-XXXXX.ec2.internal:9993
inter.broker.listener.name = INTERNAL
listener.security.protocol.map = EXTERNAL:SSL,内部:PLAINTEXT
如果客户端使用XXXXX.compute-1.amazonaws.com:9990进行连接,则元数据提取将转到该代理.但是,与组协调员或领导者一起使用的返回URL可以是123.compute-1.amazonaws.com:9990*(另一台机器!).这意味着匹配是在KIP-103公布的侦听器名称上完成的,而与实际的URL(节点)无关.
由于EXTERNAL的协议映射是SSL,因此会强制您使用SSL密钥库进行连接.
另一方面,如果您在AWS内部,那么您可以发出ip-XXXXX.ec2.internal:9993,并且根据协议映射,相应的连接将是纯文本.
这在IaaS中尤其需要,在我的案例中,经纪人和消费者都在AWS上,而我的生产者则生活在客户端站点上,因此需要不同的安全协议和监听器.
编辑:由于您为不同的客户(经纪人,生产者,消费者)提供了不同的端口,因此添加入站规则要容易得多.
listeners
是代理将用于创建服务器套接字的内容.
advertised.listeners
是客户将用于连接经纪人的东西.
如果您有"复杂"的网络设置(公共和私有子网以及中间路由),这两个设置可能会有所不同.
通过此链接:https : //cwiki.apache.org/confluence/display/KAFKA/KIP-103%3A+Separation+of+Internal+and+External+traffic
在0.9.0.0发布周期中,引入了对每个代理支持多个侦听器的支持。每个侦听器都与安全协议,ip /主机和端口相关联。与通告的侦听器机制结合使用时,存在相当大的灵活性,但有一个限制:两个配置(侦听器和advertised.listeners)中的每个配置中,每个安全协议最多有一个侦听器。
在某些环境中,出于成本,性能和安全性的原因,可能希望独立于安全协议来区分外部客户端,内部客户端和复制流量。一些例子说明了这一点:
复制流量被分配给单独的网络接口,以使其不会干扰客户端流量。
外部流量通过代理/负载平衡器(安全性,灵活性),而内部流量则直接对代理(性能,成本)产生影响。
即使安全协议相同,外部和内部流量的安全设置也不同(例如,启用的SASL机制,身份验证服务器,不同的密钥库等的不同集合)
因此,我们建议Kafka代理应该能够为同一安全协议定义多个侦听器,以进行绑定(即侦听器)和共享(即advertised.listeners),以便在需要时可以将内部,外部和复制流量分开。
所以,
listeners-我们将在其上侦听的URI的逗号分隔列表。将主机名指定为0.0.0.0
绑定到所有接口。将主机名保留为空以绑定到默认接口。合法侦听器列表的示例:
PLAINTEXT://myhost:9092,TRACE://:9091
PLAINTEXT://0.0.0.0:9092, TRACE://localhost:9093
advertised.listeners-与上述侦听器不同的侦听器,发布给ZooKeeper供客户端使用。在IaaS环境中,这可能需要与代理绑定的接口不同。如果未设置,listeners
将使用的值。