一、采用docker搭建一個kafka的單機
1.1 拉取鏡像
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
1.2 啟動容器
docker run -d --name zookeeper -p 2181 --volume /etc/localtime:/etc/localtime -t wurstmeister/zookeeper
docker run -dit --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_PORT=9092 --env KAFKA_ADVERTISED_HOST_NAME=localhost --volume /etc/localtime:/etc/localtime wurstmeister/kafka
至此簡單的測試環境構建完成,不要太簡單。
中間可能遇到一個問題:
問題一、while creating ephemeral at /brokers/ids/1, node already exists
原因是本地記錄了brokers和現在運行的不一樣。是由於你上次創建時,保存下來的。需要修改本地配置或者容器中的配置,保證兩個一致即可。
find / -name 'server.properties'你可以找到本地的配置config里的server.properties.將所有的id都改成1,重啟docker,你會發現奇跡。
問題二、partitions have leader brokers without a matching listener
不煩重新建立一個新的topic,用新的進行操作,你會發現可以了
Python操作生產者:
import json
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
producer.send('test', b"this is a python to kafka")
producer.close()
python操作消費者:
from kafka import KafkaConsumer
consumer = KafkaConsumer('test', bootstrap_servers=['localhost:9092'])
for msg in consumer:
recv = "%s:%d:%d: key=%s value=%s" % (msg.topic, msg.partition, msg.offset, msg.key, msg.value)
print(recv)