Я могу настроить Kafka с помощью docker, но когда я пытаюсь получить к нему доступ с помощью python, я не могу этого сделать. Я могу это сделать, если я установлю python внутри оболочки kafka, но вне оболочки kafka и внутри docker python, я не смогу использовать kafka.
Мой Producer.py
файл:
import time
import random
from kafka import KafkaProducer
# give broker IP from docker
producer = KafkaProducer(bootstrap_servers='kafka:9092')
# continuous loop
var = 1
while var == 1:
# generate a random integer
num = random.randint(0, 10)
# message value and key must be raw bytes
num_bytes = bytes(str(num), encoding='utf-8')
# send to topic on broker
producer.send('test', value=num_bytes, key=num_bytes)
# wait 1 second
time.sleep(1)
Мой consumer.py
файл:
from kafka import KafkaConsumer
# continuous loop
var = 1
while var == 1:
# initialize consumer to given topic and broker
consumer = KafkaConsumer('test',
group_id='consumer-1',
bootstrap_servers='kafka:9092')
# loop and print messages
for msg in consumer:
print (msg)
Мой docker-compose
файл:
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: "zoo1"
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
container_name: "kafka1"
ports:
- "9092:9092"
expose:
- "9093"
depends_on:
- zookeeper
environment:
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CREATE_TOPICS: "test:1:1"
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
volumes:
- /var/run/docker.sock:/var/run/docker.sock