1Z1*_*Z10 6 apache-kafka docker apache-zookeeper
必须从 Docker 化的 Spring-Boot 应用程序与 Kafka 进行通信,\n我能够工作的唯一选择就是对 Kafka 进行 Docker 化。
\n\n这是我的docker-compose-yml:
\n\nversion: \'3.5\'\nservices:\n zookeeper:\n image: wurstmeister/zookeeper\n ports:\n - "2181:2181"\n networks:\n - kafka-network\n kafka:\n image: wurstmeister/kafka\n ports:\n - "9092:9092"\n networks:\n - kafka-network\n environment:\n KAFKA_ADVERTISED_HOST_NAME: kafka\n KAFKA_AUTO_CREATE_TOPICS_ENABLE: \'true\'\n KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181\n depends_on:\n - zookeeper\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\nnetworks:\n kafka-network:\n name: kafka-network\nRun Code Online (Sandbox Code Playgroud)\n\n这样我就可以使用 url kafka:9092从kafka 网络上的另一个容器连接到 Kafka 代理
\n\n如何使其也可以从本地主机和其他计算机上使用?
\n\n更新\n我更新了我的 docker-compose,如下所示:
\n\nversion: \'3.5\'\nservices:\n zookeeper:\n image: wurstmeister/zookeeper\n ports:\n - "2181:2181"\n networks:\n - kafka-network\n kafka:\n image: wurstmeister/kafka\n ports:\n - "9092:9092"\n networks:\n - kafka-network\n environment:\n KAFKA_ADVERTISED_HOST_NAME: kafka\n KAFKA_AUTO_CREATE_TOPICS_ENABLE: \'true\'\n KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181\n KAFKA_LISTENERS: ${KAFKA_LISTENERS:-PLAINTEXT://:9092}\n KAFKA_ADVERTISED_LISTENERS: ${KAFKA_ADVERTISED_LISTENERS:-PLAINTEXT://127.0.0.1:9092}\n depends_on:\n - zookeeper\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\nnetworks:\n kafka-network:\n name: kafka-network\nRun Code Online (Sandbox Code Playgroud)\n\n并创建了一个包含以下内容的 .env 文件:
\n\nKAFKA_ADVERTISED_LISTENERS=PLAINTEXT://the.ip.of.machine:9092\nRun Code Online (Sandbox Code Playgroud)\n\n我在我的 PC 上测试了它(没有 .env 文件),并且我能够使用来自本地主机的 kafkakat 与代理进行通信:
\n\n$ docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n6844a16fa14f wurstmeister/kafka "start-kafka.sh" 5 seconds ago Up 3 seconds 0.0.0.0:9092->9092/tcp kafka-compose_kafka_1_9573f71109c7\n15d62557f3bd wurstmeister/zookeeper "/bin/sh -c \'/usr/sb\xe2\x80\xa6" 6 seconds ago Up 4 seconds 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp kafka-compose_zookeeper_1_61a19213cde7\n\n$ kafkacat -P -b localhost:9092 -t topic1\nNew test \n^C\n\n$ kafkacat -C -b localhost:9092 -t topic1\nNew test\n% Reached end of topic topic1 [0] at offset 1\n\n$ kafkacat -b localhost:9092 -L\nMetadata for all topics (from broker -1: localhost:9092/bootstrap):\n 1 brokers:\n broker 1001 at 127.0.0.1:9092\n 4 topics:\n ...\nRun Code Online (Sandbox Code Playgroud)\n\n但是我无法在服务器上执行相同的操作,唯一的区别是 KAFKA_ADVERTISED_LISTENERS 的主机 IP。
\n\n我看到的是它一直说领导者不可用
\n\n# kafkacat -b localhost:9092 -L\nMetadata for all topics (from broker -1: localhost:9092/bootstrap):\n 1 brokers:\n broker 1002 at the.ip.of.machine:9092\n\n\n topic "__consumer_offsets" with 50 partitions:\n partition 0, leader -1, replicas: 1001, isrs: , Broker: Leader not available\n partition 1, leader -1, replicas: 1001, isrs: , Broker: Leader not available\n partition 2, leader -1, replicas: 1001, isrs: , Broker: Leader not available\n partition 3, leader -1, replicas: 1001, isrs: , Broker: Leader not available\n partition 4, leader -1, replicas: 1001, isrs: , Broker: Leader not available\n partition 5, leader -1, replicas: 1001, isrs: , Broker: Leader not available\nRun Code Online (Sandbox Code Playgroud)\n\n我不应该为KAFKA_ADVERTISED_LISTENERS设置服务器的 IP吗?
\n您必须进行设置LISTENERS才能environments将 Kafka 代理暴露给外部网络,如下所示:
KAFKA_LISTENERS: PLAINTEXT://:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://one.prod.com:9092
Run Code Online (Sandbox Code Playgroud)
您可以参考此处了解更多详细信息: https://github.com/wurstmeister/kafka-docker/wiki/Connectivity
| 归档时间: |
|
| 查看次数: |
8062 次 |
| 最近记录: |