当前位置: 首页 > 知识库问答 >
问题:

Kafka服务器配置 - 侦听器与播发的侦听器

高增
2023-03-14

要运行Kafka,需要在config/server中设置一些属性。属性文件。有两种设置我不理解。

有人可以解释侦听器和广告侦听器属性之间的区别吗?

留档说:

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

advertised.listeners:主机名和端口代理将向生产者和消费者做广告。

我什么时候必须使用哪个设置?

共有3个答案

赏弘
2023-03-14

从此链接:https://cwiki.apache.org/confluence/display/KAFKA/KIP-103:内外交通分离

在0.9.0.0发行周期中,引入了对每个代理多个侦听器的支持。每个侦听器都与一个安全协议、ip/主机和端口相关联。当与播发侦听器机制相结合时,有相当大的灵活性,但有一个限制:在两个配置中的每个配置中,每个安全协议最多只能有一个侦听器(listeners和advertized.listeners)。

在某些环境中,出于成本、性能和安全原因,可能需要独立于安全协议区分外部客户端、内部客户端和复制流量。以下几个例子说明了这一点:

    < li >复制流量被分配到单独的网络接口,以便它不会干扰客户端流量。 < li >外部流量通过代理/负载平衡器(安全性、灵活性),而内部流量直接影响代理(性能、成本)。 < li >即使安全协议相同,外部和内部流量的安全设置也不同(例如,启用不同的SASL机制、认证服务器、不同的密钥库等)。)

因此,我们建议 Kafka 代理应该能够为用于绑定(即侦听器)和共享(即通告侦听器)的同一安全协议定义多个侦听器,以便在需要时可以分离内部、外部和复制流量。

所以,

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

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

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

乌靖
2023-03-14

由于我还不能评论,我将把这个作为一个“答案”贴出来,添加到M .情境答案中。

在他链接的同一文档中,有一个关于KAFKA客户端使用哪个侦听器的模糊(https://cwiki.apache.org/confluence/display/KAFKA/KIP-103:内部和外部流量的分离):

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

这很重要,因为取决于您在 bootstrap.servers 配置中使用的 URL,如果客户端在 advertised.listen 中映射,它将返回该 URL*(如果侦听器不存在,则不知道行为是什么)。

另请注意以下事项:

例外的是基于动物园管理员的消费者。这些消费者直接从ZooKeeper检索代理注册信息,并将选择第一个具有明文的侦听器作为安全协议(它们支持的唯一安全协议)。

代理配置示例(适用于集群中的所有代理):

advertised.listeners=外部://XXXXX.compute-1.amazonaws.com:9990,内部://ip-XXXXX.ec2.internal:9993

inter . broker . listener . name = INTERNAL

listener.security.protocol.map=外部:SSL,内部:PLAINTEXT

如果客户使用XXXXX.compute-1.ammazonaws。com:9990进行连接,元数据获取将转到该代理。但是,返回的与集团协调员或领导一起使用的URL可以是123.compute-1.amazonaws。com:9990*(另一台机器!)。这意味着匹配是在KIP-103公布的侦听器名称上进行的,与实际的URL(节点)无关。

由于EXTERNAL的协议映射是SSL,这将迫使您使用SSL密钥库进行连接。

另一方面,如果您在AWS中,那么您可以发出ip-XXXXX.ec2.internal:9993,并且相应的连接将按照协议映射是纯文本。

这在IaaS中尤其需要,在我的例子中,代理和消费者生活在AWS上,而我的生产者生活在客户端站点上,因此需要不同的安全协议和监听器。

编辑:添加入站规则也变得容易多了,因为您为不同的客户(代理、生产者、消费者)提供了不同的端口。

编辑2:如果上述内容仍然不清楚,本文是一个很好的深入指南:https://rmoff.net/2018/08/02/kafka-listeners-explained/

石思淼
2023-03-14

listeners是代理用来创建服务器套接字的工具。

通告侦听器是客户端将用于连接到代理的内容。

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

 类似资料:
  • 我有一个关于正确配置kafka侦听器属性的问题-侦听器和advertised.listers。 在我的配置中,我设置了以下道具: 客户端使用 进行连接。我是否需要在侦听器和广告侦听器中具有相同的值。这里 是指向运行 kafka 代理的主机的 dns 记录。 在什么情况下,我希望它们保持不变和不同? 谢谢!

  • 我在我的一个工作流应用程序中使用了Camunda BPMN2.0。在我的一个服务任务中,我在start事件中创建了一个执行侦听器,在create事件中创建了一个任务侦听器。我不确定在开始时同时分配这些是否合适。如果是正确的,它们中的哪一个将首先执行--执行监听器或任务监听器,分别在start或create事件中执行?

  • 我已经使用Spring Kafka创建了一个Kafka消费者,并将其部署在云铸造中。该主题有10个分区。我计划将应用程序扩展到10个实例,以便每个实例可以使用来自一个分区的消息。Spring Kafka支持并发消息侦听器容器,我猜它支持从每个分区创建多个线程来使用。例如,如果我有5个消费者实例,每个消费者实例可能有2个线程从分区消耗。因为我计划为每个分区创建一个应用实例,所以使用并发消费者有什么好

  • 我已将以下侦听器注册为服务。这将保存已登录的用户。它工作得很好。保存实体后,用户id位于createdBy和updatedBy中。好的,有一个小问题:命令“php-app/console-doctrine:fixtures:load”对非对象上的成员函数getUser()抛出错误“调用。这是可以理解的。直到现在我才必须在以前每次禁用该服务?你有其他解决方案吗?

  • 问题内容: 我当时在上网,但找不到很好的信息。我试图在每次运行应用程序时检测按键。我正在使用JavaFX并将其与FXML一起运行。我尝试了很多事情,但没有任何效果。请帮我。 问题答案: 您应该签出Ensemble示例。这是关键的侦听器代码。

  • 我正在使用Realex Payments的HPP API开发一个卡支付页面,其中包含一个iFrame,用于托管Realex页面。在Realex请求表单上,我将字段HPP_POST_维度和HPP_POST_响应设置为我的URL,如下所示: 付款页: www.example.com/account/payment.html 隐藏字段值用于在HPP页面大小更改和事务完成时,使用事件侦听器将数据从Real