Kafka服务器配置 - 侦听器与advertised.listeners

时间:2017-03-24 11:54:29

标签: amazon-ec2 apache-kafka

要让Kafka运行,您需要在config/server.properties文件中设置一些属性。我不明白有两种设置。

有人可以解释一下listeners和advertised.listeners属性之间的区别吗?

文档说:

  

listeners:套接字服务器侦听的地址。

  

advertised.listeners:       经纪人将向生产者和消费者宣传的主机名和端口。

我何时必须使用哪种设置?

3 个答案:

答案 0 :(得分:29)

由于我无法发表评论,我将发布此作为"答案",添加到M.Situations的答案。

在他链接的同一文档中,有一个关于KAFKA客户端(https://cwiki.apache.org/confluence/display/KAFKA/KIP-103%3A+Separation+of+Internal+and+External+traffic)使用哪个监听器的模糊:

  

如前所述,客户端永远不会看到侦听器名称,并且会像以前一样完成元数据请求。不同之处在于,它们返回的端点列表仅限于发出请求的端点的侦听器名称。

这一点非常重要,具体取决于您在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上,而我的制作人则生活在客户端网站上,因此需要不同的安全协议和听众。

编辑: 此外,由于您为不同的客户(经纪人,生产者,消费者)提供了不同的端口,因此添加入站规则要容易得多。

答案 1 :(得分:17)

listeners是代理用于创建服务器套接字的内容。

客户将使用

advertised.listeners连接经纪人。

如果您有“复杂”的网络设置(公共和私有子网以及中间路由),这两个设置可能会有所不同。

答案 2 :(得分:4)

从此链接:https://cwiki.apache.org/confluence/display/KAFKA/KIP-103%3A+Separation+of+Internal+and+External+traffic

  

在0.9.0.0发布周期中,每个支持多个侦听器   经纪人介绍。每个侦听器都与安全性相关联   协议,ip /主机和端口。与广告结合使用时   听众机制,有一个相当大的灵活性   限制:每个安全协议中最多只有一个监听器   两个配置(监听器和advertised.listeners)。

     

在某些环境中,人们可能希望区分外部   客户端,内部客户端和复制流量独立于   出于成本,性能和安全原因的安全协议。一些   举例说明:

     
      
  • 复制流量分配给单独的网络接口,因此不会干扰客户端流量。
  •   
  • 外部流量通过代理/负载均衡器(安全性,灵活性),而内部流量直接攻击代理   (表现,费用)。
  •   
  • 外部流量与内部流量的不同安全设置,即使安全协议相同(例如,不同的设置)   启用S​​ASL机制,身份验证服务器,不同的密钥库,   等)
  •   
     

因此,我们建议Kafka经纪人应该能够定义   用于绑定的相同安全协议的多个侦听器(即   听众)和共享(即advertised.listeners)以便内部,   如果需要,可以分离外部和复制流量。

所以,

listeners - 我们将监听的以逗号分隔的URI列表及其协议。 将主机名指定为0.0.0.0以绑定到所有接口。 将hostname保留为空以绑定到默认接口。 合法听众列表的示例:

  • PLAINTEXT://myhost:9092,TRACE://:9091
  • PLAINTEXT://0.0.0.0:9092, TRACE://localhost:9093

advertised.listeners - 发布到ZooKeeper以供客户端使用的侦听器(如果与上面的侦听器不同)。 在IaaS环境中,这可能需要与代理绑定的接口不同。如果未设置,则将使用listeners的值。