本文基于 macOS Monterey 和 Docker 20.10.8,使用了 wurstmeister/kafka 和 wurstmeister/ zookeeper 镜像来搭建服务,读者至少需要准备一个 Docker 环境并提前下载好相关的镜像。
简单环境分步操作
最简单的 Kafka 服务运行起来需要一个 Zookeeper 应用和一个 Kafka 应用。
1 2 3 4
| $ docker run --rm --name zookeeper -p 2181:2181 wurstmeister/zookeeper
$ ocker run --rm --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --link zookeeper -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://11.136.164.13:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
|
利用命令行工具做消息的生产和接收验证。开两个终端窗口,一个窗口观察收到的消息,一个窗口发送消息。
1 2 3
| $ docker exec -it kafka sh
|
1 2 3 4
| $ docker exec -it kafka sh
> Hello world
|
在 >
符号后面输入 Hello World 回车后,就可以在另外一个窗口中看到收到的消息。
使用Python验证
通过 msg_sender.py 程序代码验证发送消息。
1 2 3 4 5
| from confluent_kafka import Producer
p = Producer({'bootstrap.servers': 'localhost:9092'}) p.produce('tran_raw', b'hello world') p.flush(timeout=30)
|
通过 msg_consumer.py 程序代码验证消费消息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| from confluent_kafka import Consumer
c = Consumer({'bootstrap.servers': 'localhost:9092', 'group.id' : 'test-group'}) c.subscribe(['tran_raw'])
try: while True: msg = c.poll(timeout=1.0) if msg is None: continue if msg.error(): print('Error occured: {}'.format(msg.error())) print('Message: {}'.format(msg.value().decode('utf-8')))
except KeyboardInterrupt: pass
finally: c.close()
|
compose 方式
利用 docker-composed 可以实现一键启动容器化的 Kafka 环境,方便本地调试。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| version: '2'
services: zookeeper: image: wurstmeister/zookeeper restart: unless-stopped hostname: zookeeper ports: - "2181:2181" container_name: zookeeper kafka: image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: kafka KAFKA_ADVERTISED_PORT: 9092 KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181" KAFKA_BROKER_ID: 1 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_CREATE_TOPICS: "test_flink_input" depends_on: - zookeeper container_name: kafka
|
将这个文件保存为 docker-copose.yml 放在一个单独文件夹中,终端环境下 cd 到这个目录执行
参考资料
- Docker 安装 Kafka_docker bitnami/kafka
- Kafka入门实战教程(2)基于Docker搭建Kafka环境-腾讯云开发者社区
- docker –link容器互联_docker link
- 利用docker和docker-compose部署单机kafka