【问题标题】:Can't figure out setting for inter.broker.listener.name in Kafka with SSL使用 SSL 无法确定 Kafka 中 inter.broker.listener.name 的设置
【发布时间】: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_LISTENERSSLnull或空字符串,我会收到以下错误消息:

org.apache.kafka.common.config.ConfigException: inter.broker.listener.name 和 security.inter.broker.protocol 只能设置一个。

我在这个问题上花了几个小时。我已经将我的设置与网络上的几个示例进行了比较,这些示例应该演示带有 SSL 配置的 Kafka。

有什么想法吗?

【问题讨论】:

  • 看来我只用了一个听众,但还没有两个。仍在尝试找出根本原因(并尝试理解 Kafka 的 Scala 代码)。当我有更可靠的信息时,我会报告。

标签: ssl apache-kafka


【解决方案1】:

我终于想出了如何拥有多个 SSL 侦听器。我将在这里记录这一点,以防其他人遇到同样的问题,因为多个 SSL 侦听器的工作示例似乎很少甚至不存在。以下是我的工作配置(仅显示从 docker-compose 传递的相关属性):

ALLOW_PLAINTEXT_LISTENER=no
KAFKA_LISTENERS=ISSL://kafka1:9092,OSSL://kafka1:29092
KAFKA_ADVERTISED_LISTENERS=ISSL://kafka1:9092,OSSL://localhost:29092
KAFKA_INTER_BROKER_LISTENER_NAME=ISSL
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=ISSL:SSL,OSSL:SSL
KAFKA_SSL_CLIENT_AUTH=required

关键是不要配置 KAFKA_SECURITY_INTER_BROKER_PROTOCOL,因为它与 KAFKA_INTER_BROKER_LISTENER_NAME 键是互斥的。

如果有多个监听器,似乎需要 KAFKA_LISTENER_SECURITY_PROTOCOL_MAPKAFKA_INTER_BROKER_LISTENER_NAME 的组合。

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2018-02-14
    • 2020-05-19
    • 2018-12-14
    • 2018-12-03
    • 1970-01-01
    相关资源
    最近更新 更多