Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 当我有两个具有不同协议的Kafka代理时,如何设置security.inter.broker.protocol?_Apache Kafka - Fatal编程技术网

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

Apache kafka 当我有两个具有不同协议的Kafka代理时,如何设置security.inter.broker.protocol?,apache-kafka,Apache Kafka,我有两个kafka代理,kafka-0使用SSL,kafka-1使用明文(使用Docker映像部署) 我需要设置security.inter.broker.protocol,以便kafka-0和kafka-1可以相互通信。当我为两个代理将其设置为纯文本时,kafka-0给出以下错误: java.lang.IllegalArgumentException: requirement failed: security.inter.broker.protocol must be a protocol i

我有两个kafka代理,kafka-0使用SSL,kafka-1使用明文(使用Docker映像部署)

我需要设置security.inter.broker.protocol,以便kafka-0和kafka-1可以相互通信。当我为两个代理将其设置为纯文本时,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`

我需要在设置中做哪些更改,以便代理可以相互交谈,即使他们使用不同的安全协议?

唯一可行的方法是,如果您让两个代理中的一个(或两个)同时使用两个协议。只要一个配置为专用于ssl,另一个配置为专用于明文,它们就无法相互连接

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

listeners=PLAINTEXT://:9093,SSL://:9092
advertised.listeners = PLAINTEXT://IP_ADDRESS:9093,SSL://IP_ADDRESS:9092
并将非SSL代理配置为连接到9093,9093应能正常工作,并使当前使用SSL与该代理对话的所有客户端保持愉快


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

因为我是通过Docker创建映像的,所以我还需要设置KAFKA_port变量。如果代理需要打开两个端口,您知道我如何管理它吗?我在网上找到的任何示例都只使用一个端口。非常感谢。在不知道您使用哪个Docker映像的情况下,我只能猜测,但它是否用于定义要在容器上公开的端口?您是否尝试手动公开第二个端口?它是Wurstmeister映像()。映像需要通过Ansible构建过程构建,因此我无法手动公开端口。我可以尝试将端口添加到“exposed_ports”和“published_ports”Ansible变量中,看看是否有效。通过快速查看该图像,我不确定如果设置侦听器和播发侦听器,是否真的使用过KAFKA_port变量。您是否在未设置KAFKA_port的情况下尝试过它,但是,如果设置了侦听器或播发的侦听器,那么下一个if语句将不会运行,而这是再次使用KAFKA_端口的唯一地方。也许可以尝试将其设置为9093,使其指向纯文本端口。为什么我们应该始终使用一个纯文本,为什么我们不能同时使用SASL_SSL配置内部端口和播发端口?有关详细信息: