我需要以最简单的方式运行kafka服务器进行开发。本地服务器上只有一个静态主题,不需要身份验证(或者sasl\plaintext,如果简单的话)。我所需要做的就是以类似json的格式发送和接收消息。我该怎么做?
为什么是Kafka?因为我的项目将是更大项目的一部分,我需要使用外部libs与Kafka合作。
我发现了这一点并通过命令运行它:
docker-compose up -d
这是我的 docker-compose.yml
:
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
build: .
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
但是对于我的golang和python客户机,我不能向它们发送或接收消息 localhost:9092
:代理超时。也许我还需要改变什么?
2条答案
按热度按时间daolsyd01#
这个
KAFKA_ADVERTISED_LISTENERS
变量可以设置为localhost:29092
. 通过在docker主机上公布Kafka的位置,可以从容器外部访问Kafka。请参阅此以了解更多信息。
pjngdqdw2#
KAFKA_ADVERTISED_HOST_NAME
需要设置为您的客户机可以去与代理通信的主机。这应该是docker主机的ip,但它设置为kafka
相反,这是你的客户无法解决的。根据“先决条件”中与docker图像一起发布的说明:
修改
KAFKA_ADVERTISED_HOST_NAME
在docker-compose.yml中匹配docker主机ip(注意:如果要运行多个代理,请不要使用localhost或127.0.0.1作为主机ip)下面是正在发生的事情:
您正在使用
localhost:9092
作为客户机中的“bootstrap broker”地址,因此客户机将在这里建立初始连接一旦连接起来,你的客户就会得到
KAFKA_ADVERTISED_HOST_NAME
作为主机名,从那时起它应该使用它来联系代理。对你来说,这是kafka
(不正确)。然后,您的客户机断开连接并尝试连接到
kafka
. 因为没有到名为kafka
从你的客户那里,你的客户不能继续。尝试设置
KAFKA_ADVERTISED_HOST_NAME
成为你的docker主机的ip,看看你是否有更好的运气(另外,您可能还应该使用与您在客户机中使用的引导代理相同的主机ip,而不是localhost
.)