一、采用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)