Я читал много похожих тем, но они не могут ответить на мою проблему здесь.
Пытаясь выполнить несколько коротких интеграционных тестов, я использую docker -compose 3, a одноузловая кафка. На стороне клиента я использую Go shopify / sarama для потребления / производства
zookeeper:
image: confluentinc/cp-zookeeper:5.2.2
hostname: zookeeper
container_name: zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
kafka:
image: confluentinc/cp-enterprise-kafka:5.2.2
hostname: kafka
container_name: kafka
depends_on:
- zookeeper
ports:
- "29092:29092"
expose:
- 9092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
У меня есть другой контейнер из docker -композиции, который будет слушать
- "BROKERS_URL=kafka:9092"
потребитель работает нормально:
Сарама работает и работает. {"brokers": ["kafka: 9092"], "themes": ["validated"], "group": "event-service"}
Но на стороне производителя, работает напрямую с моей машины:
kafka: у клиента кончились доступные брокеры, с которыми можно поговорить (Ваш кластер достижим?)
producer, err := sarama.NewSyncProducer([]string{"http://localhost:29092"}, nil)
...
msg := &sarama.ProducerMessage{
Topic: "validated",
Key: sarama.StringEncoder(""),
Value: sarama.ByteEncoder(payload),
}
partition, offset, err := producer.SendMessage(msg)
...
Ничего странного / экстравагантного здесь, но это не работает, и я в замешательстве.
также: nc -vz localhost 29092
Подключение к локальному порту 29092 [tcp / *] успешно!