Docker 搭建 kafka,zookeeper 以及python操作kafka

拉取下面两个镜像

zookeeker: docker pull zookeeper:latest
kafka: docker pull wurstmeister/kafka:latest

启动zookeeper

docker run -d --name zookeeper --publish 2181:2181 --volume /etc/localtime:/etc/localtime zookeeper:latest

虚拟机中 使用 主机名 来作为 连接 ip 否则外网无法访问
在虚拟机 和 docker kafka中修改/etc/hosts 添加 127.0.0.1 主机名 来连接
其实只用在 docker kafka中修改 就可以了

docker run -dit --name mykafka1 --publish 9092:9092 \
--link zookeeper \
--env KAFKA_GROUP_ID=test_kafka1 \  #组
--env KAFKA_BROKER_ID=1 \
--env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
--env KAFKA_ADVERTISED_PORT=9092 \
--env KAFKA_ADVERTISED_HOST_NAME=kafka1 \ #写一个主机名
--volume /etc/localtime:/etc/localtime \ #同步时间
wurstmeister/kafka:latest

运行 docker ps,找到kafka的 CONTAINER ID,运行 docker exec -it ${CONTAINER ID} /bin/bash,进入kafka容器。
进入kafka默认目录

/opt/kafka_2.11-0.10.1.0,

运行

 bin/kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic test 
 #创建一个 topic 名称为 test。
bin/kafka-topics.sh --list --zookeeper zookeeper:2181  #查看当前的 topic 列表

python操作代码
#!/usr/bin/env python

-- coding: utf-8 --

import json
from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers='xxxx:x')

msg_dict = {
    "sleep_time": 10,
    "db_config": {
        "database": "test_1",
        "host": "xxxx",
        "user": "root",
        "password": "root"
    },
    "table": "msg",
    "msg": "Hello World"
}
msg = json.dumps(msg_dict)
producer.send('test_rhj', msg, partition=0)
producer.close()

下面是消费者的简单代码

from kafka import KafkaConsumer

consumer = KafkaConsumer('test_rhj', bootstrap_servers=['xxxx:x'])
for msg in consumer:
    recv = "%s:%d:%d: key=%s value=%s" % (msg.topic, msg.partition, msg.offset, msg.key, msg.value)
    print recv

你可能感兴趣的:(kafka,docker,python)