前言
最近在用kafka做项目,所以本地搭建下kafka,但是又嫌java安装和安装kafka太麻烦,所以想到用docker来部署。
镜像
wurstmeister/kafka
维护较为频繁的一个Kafka镜像。只包含了Kafka,因此需要另行提供ZooKeeper,推荐使用同一作者提交的wurstmeister/zookeeper。
现在已经提供较新的1.1.0版本。
搭建开发环境
1 ZooKeeper &1 Kafka
这里以我自己最常用的wurstmeister/kafka为例,使用docker-compose运行一个只有一个ZooKeeper node和一个Kafka broker的开发环境:
docker-compose.yml
version: '2'
services:
zoo1:
image: wurstmeister/zookeeper
restart: unless-stopped
hostname: zoo1
ports:
- "2181:2181"
container_name: zookeeper
# kafka version: 1.1.0
# scala version: 2.12
kafka1:
image: wurstmeister/kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181"
KAFKA_BROKER_ID: 1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_CREATE_TOPICS: "test1_topic,test2_topic"
depends_on:
- zoo1
container_name: kafka
这里利用了wurstmeister/kafka提供的环境参数KAFKA_CREATE_TOPICS使Kafka运行后自动创建topics,当时你不修改kafka的配置(auto.create.topics.enable),扔到新的topic也会自动创建。
启动容器
在docker-compose.yml所在的目录执行以下命令:
docker-compose up -d
运行
docker ps -a
与容器内的开发环境交互
可以使用docker exec命令直接调用kafka容器内的脚本来进行创建/删除topic,启动console producer等等操作。
如果本地存有与容器内相同的Kafka版本文件,也可以直接使用本地脚本文件。如上述docker-compose.yml文件所示,kafka1的hostname即是kafka1,端口为9092,通过kafka1:9092就可以连接到容器内的Kafka服务。
列出所有topics (在本地kafka路径下)
$ bin/kafka-topics.sh --zookeeper localhost:2181 --list
列出所有Kafka brokers
$ docker exec zookeeper bin/zkCli.sh ls /brokers/ids
PHP 使用kafka 实践
- php:用使用扩展:php-rdkafka
- 文档:https://arnaud-lb.github.io/php-rdkafka/phpdoc/index.html
- docker php-kafka示例:https://github.com/10xjzheng/php-kafka
golang 使用kafka 实践
- golang:用使用client包:sarama
- 文档:https://www.jianshu.com/p/3d4655cd7054
参考文档
来源:51CTO
作者:阿泽Aze
链接:https://blog.51cto.com/onebig/2484633