相关疑难解决方法(0)

从本地计算机连接到Docker中运行的Kafka

我在本地计算机上使用docker设置单节点基本Kafka部署,如Confluent Kafka文档中所述(步骤2-3).

另外,我还暴露了zookeeper的端口2181和kafka的端口9092,这样我就能从本地机器上运行的java客户端连接到它们:

$ docker run -d \
    -p 2181:2181 \
    --net=confluent \
    --name=zookeeper \
    -e ZOOKEEPER_CLIENT_PORT=2181 \
    confluentinc/cp-zookeeper:4.1.0

$ docker run -d \
    --net=confluent \
    --name=kafka \
    -p 9092:9092 \
    -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
    -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 \
    -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
    confluentinc/cp-kafka:4.1.0
Run Code Online (Sandbox Code Playgroud)

问题:当我尝试从主机连接到kafka时,连接失败,因为它无法解析地址:kafka:9092.

这是我的Java代码:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("client.id", "KafkaExampleProducer");
props.put("key.serializer", LongSerializer.class.getName());
props.put("value.serializer", StringSerializer.class.getName());
KafkaProducer<Long, String> producer = new KafkaProducer<>(props);
ProducerRecord<Long, String> record = new ProducerRecord<>("foo", 1L, "Test 1");
producer.send(record).get();
producer.flush();
Run Code Online (Sandbox Code Playgroud)

例外:

java.io.IOException: Can't resolve …
Run Code Online (Sandbox Code Playgroud)

java apache-kafka docker confluent

5
推荐指数
2
解决办法
7698
查看次数

Docker Kafka与Python消费者

我正在使用dockerized Kafka并编写了一个Kafka消费者计划.当我在我的本地机器上运行Docker和应用程序中的Kafka时,它非常有效.但是当我在docker中配置本地应用程序时,我遇到了问题.问题可能是由于在应用程序启动时才创建主题.

泊坞窗,compose.yml

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
  parse-engine:
    build: .
    depends_on:
      - "kafka"
    command: python parse-engine.py
    ports:
     - "5000:5000"
Run Code Online (Sandbox Code Playgroud)

parse-engine.py

from kafka import KafkaConsumer
import json

try:
    print('Welcome to parse engine')
    consumer = KafkaConsumer('test', bootstrap_servers='localhost:9092')
    for message in consumer:
        print(message)
except Exception as e:
    print(e)
    # Logs the error appropriately. 
    pass
Run Code Online (Sandbox Code Playgroud)

错误日志

kafka_1         | [2018-09-21 06:27:17,400] INFO [SocketServer brokerId=1001] …
Run Code Online (Sandbox Code Playgroud)

python apache-kafka docker kafka-consumer-api docker-compose

4
推荐指数
2
解决办法
3936
查看次数