当前位置: 首页 > 面试题库 >

Kafka访问docker内部和外部

司寇善
2023-03-14
问题内容

我正在尝试使用docker-compose启动kafka服务,并且应该可以在docker内部和外部进行访问。因此,应该在内部和外部设置合适的广告客户:

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9094:9092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://127.0.0.1:9094
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://127.0.0.1:9094
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE

问题是,当我尝试从群集外部进行连接时,节点名称不是127.0.0.1,而是内部主机名:

$ kafkacat -L -b 127.0.0.1:9094
Metadata for all topics (from broker -1: 127.0.0.1:9092/bootstrap):
 1 brokers:
  broker 1001 at 91588ea968d4:9092
 28 topics:
 ...

这不是KAFKA_ADVERTISED_LISTENERS和KAFKA_LISTENERS处理这种情况的目的吗?我尝试设置KAFKA_ADVERTISED_HOST_NAME,但是它被忽略了(一个文档说它已被弃用,另一个说它仍然处于活动状态),但这似乎不是答案,因为我想要两个不同网络的两个不同的公告主机名。

我想仍然存在一个老问题:如何使kafka在docker-compose内部和外部工作?


问题答案:

您的侦听器配置看起来正确,问题出在您的Docker Compose上:

ports:
  - "9094:9092"

您正在将9094(’Outside’)映射回9092(’Inside’),因此当您连接时,您正在连接到’Inside’侦听器。如果删除此配置行,则您的侦听器设置应该可以正常工作。

有关更多信息,请参见http://rmoff.net/2018/08/02/kafka-listeners-
explained/



 类似资料:
  • https://github.com/confluentinc/cp-docker-images/blob/5.0.0-post/examples/kafka-cluster/docker-compose.yml 我已经编辑了该文件,并将选项添加到docker组合文件中,以便可以在主机之外访问它们。 我已经运行了以下命令: kafka-1、kafka-2、kafka-3的docker日志(均相同)

  • 问题内容: 我想阻止从外部直接访问docker容器。我使用haproxy,并且只希望访问端口80、443。 我在iptables中添加了以下规则。但是我仍然可以通过不同的端口访问Docker容器。 这可能是由于DOCKER链 我需要创建什么规则来阻止直接访问? 问题答案: 您可以使用命令创建一个网络来连接应用程序和代理,而不必使用IP表来执行此操作。另外,请勿在任何端口上公开应用程序。您应该公开的

  • 问题内容: 我对让Docker能够访问外部文件感兴趣,但是我不希望将它们作为卷包含在内。我需要访问的文件会随着时间变化,这意味着我将需要反复重新安装,除非我只能安装一个目录,而且该目录中的任何内容也会被安装。 我只需要允许将软件程序推送到容器中,以“在”我的本地系统上运行,该软件程序可以访问我的本地系统上的文件。 忠告?除了添加需要作为卷处理的文件之外,还有其他方法吗? 问题答案: 我用以下命令解

  • 我有一个Xperia Neo V没有任何内部存储--只有一个SD卡作为外部存储,而Galaxy S3有内部和外部存储。 使用此函数时只能访问内部存储(S3)上的文件,但Xperia Neo V没有问题。 如何访问内部和外部存储上的文件?

  • 我在Kubernetes集群中配置了Keycloak(10.0.3)服务器。 问题是,当我试图访问我的web应用程序时,它总是重定向到'http://keycloak-cluster-http.keycloak-cluster.svc.cluster.local/auth/realms/myrealm',这在K8S之外无法解决。 如果我将issuiser-uri更改为http://keycloak

  • 我想在EC2主机内使用部署应用程序。 出于本问题范围以外的原因,其中一个服务将使用常量docker标记,如。 图像将定期更新(相同的标记,不同的),因此我需要运行。 我的问题是,是否有一种公开的API的方法,以便可以使用对EC2实例的API调用来调用它,从而避免必须ssh到计算机中。