docker - Docker 容器网络 - Kafka Producer
问题描述
我想从容器 A 向容器 B 中的 Kafka 主题生成消息,但我在这些容器的网络方面遇到了一些奇怪的问题。您对我如何以正确的方式连接这些容器有任何想法吗?问题是收集器服务无法从其他容器中看到 kafka,也无法向其中添加消息。更具体地说,我有以下服务:
码头工人-compose.yml
version: '3.5'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ADVERTISED_HOST: zookeeper
ADVERTISED_PORT: 2181
extra_hosts:
- "moby:127.0.0.1"
networks:
- meetup-net
kafka:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
extra_hosts:
- "moby:127.0.0.1"
networks:
- meetup-net
collector:
image: collector:v1
environment:
- kafka-bootstrap-servers=docker_kafka_1.docker_meetup-net
restart: always
depends_on:
- kafka
networks:
- meetup-net
networks:
meetup-net:
driver: bridge
另一方面,我有 application.conf 文件
streaming {
window-size = 50
window-interval = 5
kafka-bootstrap-servers = ${?kafka-bootstrap-servers}
kafka-bootstrap-servers = "localhost:9092"
sink-topic = ${?source-topic}
sink-topic = "meetup"
key-value-json-path = ${key-value-json-path}
key-value-json-path = "./data/keyvalue"
source-topic-checkpoint-location = ${source-topic-checkpoint-location}
source-topic-checkpoint-location = "./target/source-topic"
sink-topic-checkpoint-location = ${sink-topic-checkpoint-location}
sink-topic-checkpoint-location = "./target/sink-topic"
}
zookeeper.server = ${?zookeeper-server}
zookeeper.server = "localhost:2181"
解决方案
您需要KAFKA_ADVERTISED_LISTENERS
正确设置。
目前KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
意味着任何连接到代理的客户端都将获得localhost
作为连接后续请求的代理地址。除非客户端在代理上运行(它不在这里),否则您需要更改此配置。对于在独立的 Docker 环境中运行,这很容易:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
现在任何客户端连接都应该是kafka:29092
. 这也意味着您可以将在 Docker 主机上运行的客户端连接到 Kafka 代理,这在例如在笔记本电脑上运行并在本地运行客户端时很有用。
这是一个示例 Docker Compose,展示了这一点。
有关更多详细信息和背景,请参阅https://rmoff.net/2018/08/02/kafka-listeners-explained/
推荐阅读
- postgresql - 我如何在 gorm 1.20.0 中关闭数据库实例
- python - 使用 Python 将 for 循环结果添加到 Excel 电子表格
- bash - 使用 bash 变量时出现“意外的 $end”
- google-maps - 谷歌地图没有使用谷歌数据工作室填充谷歌表格中的所有邮政编码
- python - 使用 PySpark 数据框解析 json 字符串列表
- c# - 在 bat 文件上构建编译错误命令“调用“C:\source\repos\MyFolder\MyBat_Debug.bat””退出代码 127
- node.js - 无法使用 mongoose 连接到 mongodb 数据库
- multidimensional-array - 用户表单多选列表框数组或整个行.copy?
- c# - 使用 MVC C# 将 Excel 数据导入 SQL Server 数据库中的多个表
- python - 从