访问Docker内的Kafka的几种办法

Question

之前在构建自己的Kakfa-Cluster的Docker镜像时,遇到一个映射关系的问题。其实,感觉这是Kafka的一个Bug。
即,Kafka在容器内配置localhost:9092,并把端口映射出去。Docker外是无法访问到的。


Solutions

  • 使用advertised.host.nameadvertised.host.port 外网映射
requirement failed: inter.broker.listener.name must be a listene
需要配置两个端口
  • 使用linstenersadvertised.linsteners 外网映射
  • 将Docker Container 的ID写在本地

others

docker run -d --name kafka3 --publish 9093:9093 --link infallible_khorana  --env       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT --env KAFKA_ADVERTISED_PROTOCOL_NAME=OUTSIDE --env KAFKA_ZOOKEEPER_CONNECT=infallible_khorana:2181,infallible_khorana:2182,infallible_khorana:2183  --env       KAFKA_PROTOCOL_NAME=INSIDE --env KAFKA_ADVERTISED_HOST_NAME=192.168.1.16  --env KAFKA_ADVERTISED_PORT=9093    wurstmeister/kafka:latest

 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_ADVERTISED_HOST_NAME: 192.168.1.16
      KAFKA_ADVERTISED_PORT: 9094
      KAFKA_ADVERTISED_PROTOCOL_NAME: OUTSIDE
      KAFKA_PROTOCOL_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      
docker run --name kafka -e HOST_IP=localhost -e KAFKA_ADVERTISED_PORT=9092 -e KAFKA_BROKER_ID=1 -e ZK=zk -p 9092 --link zookeeper:zk -t wurstmeister/kafka

listeners=OUTSIDE://:9093,INSIDE://:9092
advertised.listeners=OUTSIDE://192.168.1.16:9093,INSIDE://:9092
listener.security.protocol.map=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
inter.broker.listener.name=INSIDE

References

[1]. wurstmeister/kafka
[2] spotify/kafka
[3] Containerized Kafka client errors when producing messages to the host Kafka server
[4] How do I set security.inter.broker.protocol when I have two Kafka brokers with different protocols?
[5] Exposing Kafka on two different networks

[] Java操作Kafka执行不成功的解决方法,Kafka Broker Advertised.Listeners属性的设置
[] 基于docker部署的微服务架构(五): docker环境下的zookeeper和kafka部署
[] Kafka集群的安装和使用
[] 使用Docker快速搭建Kafka开发环境
[] Docker快速搭建Kafka 1.x集群
[] kafka的advertised.host.name参数 外网访问配置
[] docker里面启动kafka并做端口映射,容器外无法连接,问题解决记录
[] Docker中搭建Kafka集群以及让外网访问
[] Kafka集群部署(Docker容器的方式)
[] Kafka-docker: Steps to run Apache Kafka Using Docker
[] Kafka跨网络访问设置
[] docker启动kafka
[] kafka-2.11-2.00 生产消费创建主题.md
[] kafka使用常见报错及解决方法

Docker 网络映射

[1]. Docker的端口映射-p在生产环境是否真的可用?
[2] Docker 网络模式为host是遇到的一些坑(求解决之法)
[3] Use host networking(official)
[4]. Docker的四种网络模式
[5]. docker的host、bridge网络类型
[6]. 使用docker-compose 大杀器来部署服务 上
[7]. Docker run reference(official)
[8] Docker Compose安装以及入门
[9] Docker学习总结之Run命令介绍
[10] 使用不同Docker网络模型搭建Zookeeper集群

要在Docker中安装和访问Kafka,可以按照以下步骤进行操作: 1. 首先,确保已经安装了DockerDocker Compose。如果没有安装,可以根据操作系统的不同,参考Docker官方文档进行安装。 2. 创建一个新的目录,用于存放Kafka的配置文件和数据。可以使用以下命令创建目录: ``` mkdir kafka cd kafka ``` 3. 在该目录下创建一个名为`docker-compose.yml`的文件,并将以下内容复制到文件中: ```yaml version: '2' services: zookeeper: image: confluentinc/cp-zookeeper:6.2.0 environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 ports: - "2181:2181" networks: - kafka-network kafka: image: confluentinc/cp-kafka:6.2.0 depends_on: - zookeeper environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" ports: - "9092:9092" - "29092:29092" networks: - kafka-network networks: kafka-network: driver: bridge ``` 4. 保存并关闭`docker-compose.yml`文件。 5. 在终端中,使用以下命令启动Kafka容器: ``` docker-compose up -d ``` 6. 等待一段时间,直到Kafka容器启动完成。可以使用以下命令查看容器状态: ``` docker-compose ps ``` 7. 现在,可以通过`localhost:9092`访问Kafka。可以使用Kafka的客户端工具或编程语言进行连接和操作。 8. 若要停止和删除Kafka容器,可以使用以下命令: ``` docker-compose down ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值