通常通过Java连接到Kafka,而不使用openfaas。(成功)
当openfaas服务调用时,连接到Kafka不起作用。
当运行openfaas创建的服务函数时,它不能连接到Kafka。(Kafka正在码头上运行)
docker-compose.yml :
version: '2'
services:
zookeeper:
container_name: zookeeper
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181
kafka:
container_name: kafka
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- 29092:29092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:29092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1Error:
Connection to node -1 (localhost/127.0.0.1:29092) could not be established. Broker may not be available.String topic = "Request";
String KAFKA_BROKERS = "localhost:9092";
Properties props = new Properties();
props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, KAFKA_BROKERS);
props.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class.getName());
producer = new KafkaProducer(props);发布于 2022-02-07 15:56:29
Java也运行在Docker上
localhost指的是那个不是卡夫卡服务的Java容器。
确保您的容器在同一个Docker网络中运行,然后您需要使用它们的容器名称(例如"kafka:9092" )到达外部服务,假设容器主机名就是这个名称。
您还需要确保KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
https://stackoverflow.com/questions/70961403
复制相似问题