当我有两个具有不同协议的Kafka代理时,如何设置security.inter.broker.protocol?

时间:2017-02-28 23:34:40

标签: apache-kafka

我有两个kafka经纪人,使用SSL的kafka-0和使用PLAINTEXT的kafka-1(使用Docker图像部署)。

我需要设置security.inter.broker.protocol,以便kafka-0和kafka-1可以相互通信。当我为两个代理将它设置为PLAINTEXT时,kafka-0会出现以下错误:

java.lang.IllegalArgumentException: requirement failed: security.inter.broker.protocol must be a protocol in the configured set of advertised.listeners. The valid options based on currently configured protocols are Set(SSL)

hafka-0的广告听众是

advertised.listeners = SSL://IP_ADDRESS:9092

同时,如果我为两个经纪人设置协议为SSL,kafka-1抱怨:

Error when handling request {topics=[__consumer_offsets]} (kafka.server.KafkaApis) kafka.common.BrokerEndPointNotAvailableException: Broker `0` does not support security protocol `PLAINTEXT`

我需要在设置中进行哪些更改,以便即使使用不同的安全协议,代理也可以相互通信?

1 个答案:

答案 0 :(得分:0)

实现这一目标的唯一方法是,如果您让两个经纪人中的一个(或两者)说两种协议。只要一个专门为ssl配置,一个专门为明文配置,它们将无法相互连接。

您可以做的是向ssl代理添加纯文本侦听器:

listeners=PLAINTEXT://:9093,SSL://:9092
advertised.listeners = PLAINTEXT://IP_ADDRESS:9093,SSL://IP_ADDRESS:9092

并将非SSL代理配置为连接到9093,该代理应该可以正常工作,并使当前使用ssl的所有客户端与该代理保持通信。

由于可能有其中一个人只说SSL的原因,因此使用防火墙规则保护明文端口可能是有意义的,这样只有第二个代理可以连接。