【发布时间】:2021-01-23 06:18:31
【问题描述】:
我正在尝试使用 SSL (TLS) 节点间以及节点和客户端之间配置 Kafka 节点,但遇到了配置问题。卡夫卡版本是 2.3.0。我的相关设置是:
- KAFKA_BROKER_ID=1
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_LISTENERS=LISTENER_INTERNAL://kafka1:9092,LISTENER_EXTERNAL://kafka1:29092
- KAFKA_ADVERTISED_LISTENERS=LISTENER_INTERNAL://kafka1:9092,LISTENER_EXTERNAL://localhost:29091
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=LISTENER_INTERNAL:SSL,LISTENER_EXTERNAL:SSL
- KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
- KAFKA_AUTO_CREATE_TOPICS_ENABLE=false
- KAFKA_SSL_TRUSTSTORE_LOCATION=/var/private/ssl/server.truststore.jks
- KAFKA_SSL_TRUSTSTORE_PASSWORD=changeit
- KAFKA_SSL_KEYSTORE_LOCATION=/var/private/ssl/server.keystore.jks
- KAFKA_SSL_KEYSTORE_PASSWORD=changeit
- KAFKA_SSL_KEY_PASSWORD=changeit
- KAFKA_SECURITY_INTER_BROKER_PROTOCOL=SSL
- KAFKA_SSL_CLIENT_AUTH=required
仅供参考,为简单起见,我从实例化 Kafka 容器的 docker-compose 文件中复制了设置。环境变量 1:1 映射到 server.properties 中的属性。在容器启动期间,这些设置将应用于 server.properties 文件。
当我开始使用此配置时,我收到以下错误消息:
java.lang.IllegalArgumentException:要求失败:inter.broker.listener.name 必须是在 Advertisementd.listeners 中定义的侦听器名称。基于当前配置的监听器的有效选项是 LISTENER_INTERNAL,LISTENER_EXTERNAL
当我将 inter.broker.listener.name 属性设置为 INTERNAL_LISTENER、SSL、null或空字符串,我会收到以下错误消息:
org.apache.kafka.common.config.ConfigException: inter.broker.listener.name 和 security.inter.broker.protocol 只能设置一个。
我在这个问题上花了几个小时。我已经将我的设置与网络上的几个示例进行了比较,这些示例应该演示带有 SSL 配置的 Kafka。
有什么想法吗?
【问题讨论】:
-
看来我只用了一个听众,但还没有两个。仍在尝试找出根本原因(并尝试理解 Kafka 的 Scala 代码)。当我有更可靠的信息时,我会报告。
标签: ssl apache-kafka