首页 > 解决方案 > Kafka集群 - 在运行集群上分离内部和外部通信

问题描述

案例是:将客户端和代理复制通信分开+引入安全性。

问题是:是否可以将通信与滚动重启等程序分开?无需在整个集群上停机。

配置原样(简单的一个端口用于所有没有安全性的东西):

listeners=PLAINTEXT://server1:9092

想要的配置(不同的端口和一些具有安全性,在 9094 端口上复制):

listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SASLPLAIN:SASL_PLAINTEXT,REPLICATION:SASL_PLAINTEXT
listeners=PLAINTEXT://server1:9092,SASLPLAIN://server1,REPLICATION://server1:9094
inter.broker.listener.name=REPLICATION
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

进展: 下面的配置运行良好。但唯一的方法是,在不使集群进入我现在知道的不一致状态的情况下,停止集群,引入新配置,如上所示,然后再次启动集群。这显然不是客户想要的。感谢任何想法如何在不需要停止/启动整个集群的情况下继续。

标签: apache-kafka

解决方案


我设法通过以下步骤从原始的一个侦听器配置继续进行。如果有人有任何想法来简化流程,请添加。

原始配置:

listeners=PLAINTEXT://server1:9092

1.更改 server.properties 并滚动重启

listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SASLPLAIN:SASL_PLAINTEXT,REPLICATION:SASL_PLAINTEXT
listeners=PLAINTEXT://SERVER1:9092,SASL_PLAINTEXT://SERVER1:9093,REPLICATION://SERVER1:9094
sasl.enabled.mechanisms=PLAIN

还包括 jaas 配置作为 jvm 参数。-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf

2.修改server.properties并滚动重启

listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SASLPLAIN:SASL_PLAINTEXT,REPLICATION:SASL_PLAINTEXT
listeners=PLAINTEXT://SERVER1:9092,SASL_PLAINTEXT://SERVER1:9093,REPLICATION://SERVER1:9094
inter.broker.listener.name=REPLICATION
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

3.最后一次修改服务器属性,第三次滚动重启

listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SASLPLAIN:SASL_PLAINTEXT,REPLICATION:SASL_PLAINTEXT
listeners=PLAINTEXT://SERVER1:9092,SASL_PLAINTEXT://SERVER1:9093,REPLICATION://SERVER1:9094
inter.broker.listener.name=REPLICATION
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=true

推荐阅读