首页 > 解决方案 > Kafka 中的内部和外部通信

问题描述

流程:本地-->代理--->卡夫卡

advertised.listeners=PLAINTEXT://proxyhostname:8080 - for external communication
listeners=PLAINTEXT://:9092 = for internal communication   

•当我们设置这两个属性时,内部通信没有发生。(复制问题和消费者无法通过本地连接,我们必须为消费者通信提供代理IP)

•我们如何有效地利用该属性进行内部和外部沟通?

•有什么替代的想法来进行外部和内部沟通?

标签: apache-kafka

解决方案


定义多个监听器是很常见的,Kafka 很好地支持了这一点。

要定义多个侦听器,您需要在advertised.listeners/中列出所有侦听器listeners

如果多个侦听器将使用相同的安全协议 ( PLAINTEXT),您还需要设置listener.security.protocol.map将自定义名称映射到安全协议。请参阅Kafka 文档中的代理配置。

例如:

listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
advertised.listeners=INTERNAL://:9092,EXTERNAL://proxyhostname:8080
listeners=INTERNAL://:9092,EXTERNAL://:8080

这会将 2 个名称EXTERNALINTERNAL(您可以使用任何您喜欢的名称,我只是重用了您问题中的名称)映射到PLAINTEXT安全协议。然后对于每一个,它定义了要侦听的端口和要在元数据响应中通告的主机名。


推荐阅读