【发布时间】:2019-01-20 00:32:25
【问题描述】:
我有三个不同的节点,每个节点上都有 Docker 和 Ubuntu。我想用这三个节点制作Kafka集群;事实上,我在每个节点上都安装了 docker,并在它们上面加载了 Ubuntu。我在 docker 环境中为“150.20.11.157”配置"zookeeper.properties",如下所示:
dataDir=/tmp/zookeeper/data
tickTime=2000
initLimit=10
syncLimit=5
server.1=0.0.0.0:2888:3888
server.2=150.20.11.134:2888:3888
server.3=150.20.11.137:2888:3888
clientPort=2186
对于节点150.20.11.134,docker环境中的“zookeeper.properties”文件如下:
dataDir=/tmp/zookeeper/data
tickTime=2000
initLimit=10
syncLimit=5
server.1=150.20.11.157:2888:3888
server.2=0.0.0.0:2888:3888
server.3=150.20.11.137:2888:3888
clientPort=2186
对于节点150.20.11.137,docker环境中的“zookeeper.properties”文件如下:
dataDir=/tmp/zookeeper/data
tickTime=2000
initLimit=10
syncLimit=5
server.1=150.20.11.157:2888:3888
server.2=150.20.11.134:2888:3888
server.3=0.0.0.0:2888:3888
clientPort=2186
另外,我为节点 150.20.11.157 设置了这样的“server.properties”:
broker.id=0
port=9092
listeners = PLAINTEXT://150.20.11.157:9092
log.dirs=/tmp/kafka-logs
zookeeper.connect=150.20.11.157:2186,150.20.11.134:2186,
150.20.11.137:2186
节点 150.20.11.134 的“server.properties”是:
broker.id=1
port=9092
listeners = PLAINTEXT://150.20.11.134:9092
log.dirs=/tmp/kafka-logs
zookeeper.connect=150.20.11.157:2186,150.20.11.134:2186,
150.20.11.137:2186
节点 150.20.11.137 的“server.properties”是:
broker.id=2
port=9092
listeners = PLAINTEXT://150.20.11.137:9092
log.dirs=/tmp/kafka-logs
zookeeper.connect=150.20.11.157:2186,150.20.11.134:2186,
150.20.11.137:2186
此外,每个节点在 docker 环境的“/tmp/zookeeper/data”中都有一个“myid”文件,其中包含其服务器 ID。
为了像这张图一样制作一个三节点的Kafka集群,我制作了一个“docker-compose.yaml”文件和一个dockerfile。
这是我的 docker-compose 文件:
version: '3.7'
services:
zookeeper:
build: .
command: /root/kafka_2.11-2.0.1/bin/zookeeper-server-start.sh
/root/kafka_2.11-2.0.1/config/zookeeper.properties
ports:
- 2186:2186
kafka1:
build:
context: .
args:
brokerId: 0
command: /root/kafka_2.11-2.0.1/bin/kafka-server-start.sh
/root/kafka_2.11-2.0.1/config/server.properties
depends_on:
- zookeeper
kafka2:
build:
context: .
args:
brokerId: 1
command: /root/kafka_2.11-2.0.1/bin/kafka-server-start.sh
/root/kafka_2.11-2.0.1/config/server.properties
depends_on:
- zookeeper
kafka3:
build:
context: .
args:
brokerId: 2
command: /root/kafka_2.11-2.0.1/bin/kafka-server-start.sh
/root/kafka_2.11-2.0.1/config/server.properties
depends_on:
- zookeeper
producer:
build: .
command: bash -c "sleep 4 && /root/kafka_2.11-2.0.1/bin/kafka-
topics.sh --create --zookeeper zookeeper:2186 --replication-
factor 2 --partitions 3 --topic dates && while true; do date |
/kafka_2.11-2.0.1/bin/kafka-console-producer.sh --broker-list
kafka1:9092,kafka2:9092,kafka3:9092 --topic dates; sleep 1;
done "
depends_on:
- zookeeper
- kafka1
- kafka2
- kafka3
consumer:
build: .
command: bash -c "sleep 6 && /root/kafka_2.11-2.0.1/bin/kafka-
console-consumer.sh localhost:9092 --topic dates --bootstrap-
server kafka1:9092,kafka2:9092,kafka3:9092"
depends_on:
- zookeeper
- kafka1
- kafka2
- kafka3
问题出在“dockerfile build”之后。当我在每个节点上执行“sudo docker-compose up”时。它没有完全运行。我的一些日志如下:
动物园管理员_1 | [2019-01-17 16:09:27,197] INFO 从以下位置读取配置:/root/kafka_2.11-2.0.1/config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
kafka3_1 | [2019-01-17 16:09:29,426] INFO 注册 kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
kafka3_1 | [2019-01-17 16:09:29,702] 信息开始(kafka.server.KafkaServer)
kafka3_1 | [2019-01-17 16:09:29,702] INFO 在 150.20.11.157:2186,150.20.11.134:2186,150.20.11.137:2186 (kafka.server.KafkaServer) 上连接到 zookeeper
kafka1_1 | [2019-01-17 16:09:30,012] INFO 注册 kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
动物园管理员_1 | [2019-01-17 16:09:27,240] 信息解析主机名:150.20.11.137 到地址:/150.20.11.137 (org.apache.zookeeper.server.quorum.QuorumPeer)
kafka1_1 | [2019-01-17 16:09:30,486] 信息开始(kafka.server.KafkaServer)
kafka3_1 | [2019-01-17 16:09:29,715] 信息 [ZooKeeperClient] 正在初始化到 150.20.11.157:2186,150.20.11.134:2186,150.20.11.137:2186 的新会话。 (kafka.zookeeper.ZooKeeperClient)
动物园管理员_1 | [2019-01-17 16:09:27,241] 信息解析主机名:150.20.11.134 到地址:/150.20.11.134 (org.apache.zookeeper.server.quorum.QuorumPeer)
动物园管理员_1 | [2019-01-17 16:09:27,241] 信息解析主机名:0.0.0.0 到地址:/0.0.0.0 (org.apache.zookeeper.server.quorum.QuorumPeer) 卡夫卡3_1 | [2019-01-17 16:09:29,720] INFO 客户端环境:zookeeper.version=3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03,建于 06/29/2018 00:39 GMT (org.apache.zookeeper.ZooKeeper)
动物园管理员_1 | [2019-01-17 16:09:27,241] 信息默认为多数仲裁 (org.apache.zookeeper.server.quorum.QuorumPeerConfig) 卡夫卡3_1 | [2019-01-17 16:09:29,721] INFO 客户端环境:host.name=be08b050be4c (org.apache.zookeeper.ZooKeeper)
动物园管理员_1 | [2019-01-17 16:09:27,242] 错误配置无效,异常退出(org.apache.zookeeper.server.quorum.QuorumPeerMain) 动物园管理员_1 | org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException:错误处理/root/kafka_2.11-2.0.1/config/zookeeper.properties 动物园管理员_1 |在 org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:156) 动物园管理员_1 |在 org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:104) 动物园管理员_1 |在 org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81) 动物园管理员_1 |引起:java.lang.IllegalArgumentException:/tmp/zookeeper/data/myid 文件丢失 动物园管理员_1 |在 org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:408) 动物园管理员_1 |在 org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:152) 动物园管理员_1 | ... 2 更多
kafka1_1 | [2019-01-17 16:09:30,487] INFO 在 150.20.11.157:2186,150.20.11.134:2186,150.20.11.137:2186 (kafka.server.KafkaServer) 上连接到 zookeeper 动物园管理员_1 |配置无效,异常退出
事实上,我在每个节点上都没有使用 docker 来配置 Kafka 集群,我可以毫无问题地运行 Zookeeper 和 Kafka 服务器。 Kafka集群是这样的:
你能告诉我我在配置这个集群时做错了什么吗?
任何帮助将不胜感激。
【问题讨论】:
-
您的网络是如何配置的?当我实现一个喜欢的架构时,使用了 DNS 和 iptables/forward
-
亲爱的@Soleil,我在我的问题中提到了关于配置我的网络的所有内容。你能告诉我你是否使用docker吗?以及如何准确地实现链接架构?我更改了“主机”文件并将每个 IP 地址都放在上面,但它没有改变任何东西。
-
每个节点在docker中应该有两个网络接口,并将数据包转发到正确的接口
-
@Soleil 请指导我如何在 docker 中配置网络接口?谢谢。我尝试安装 iptable 并打开 2186 端口,但我的集群仍然无法正常运行。
标签: docker apache-kafka docker-compose