此文介绍如何创建kafka实例。
源码:https://github.com/wurstmeister/kafka-docker.git
此镜像在run起之前,我们要根据自己的实际情况build对应的镜像。通过docker-compose.yaml文件可以看出:
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
build: .
ports:
- "9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
首先我们需要安装docker-compose工具,安装简单介绍下:
#将docker-compose源码进行下载安装
#curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose
#给予权限
#chmod +x /usr/bin/docker-compose
然后将KAFKA_ADVERTISED_HOST_NAME对应的ip改为自己所想提供kafka服务的宿主机ip。
KAFKA_ZOOKEEPER_CONNECT可以选择不变,当然也可以修改为提供zookeeper服务的宿主机ip。
运行kafka集群
在包含kafka源码的目录下执行
#docker-compose up -d
此时稍作等待,会根据咱们之前定义的变量去pull以及build相对应的镜像并最终run起来。
细心的朋友可以发现,kafka每次run起来之后映射到宿主机的端口经常变,不是我们所希望的怎么办?
我个人建议就用docker-compose build出镜像后,仍然是写个docker的启动脚本去启动为佳,当然如果用到了kubernetes或者mesos管理工具,可以写成yaml文件进行启动。
下面简单说一下如何通过docker run 的命令来指定kafka容器的运行:
通过docker-compose,我们可以看到共build了2个镜像,分别为wurstmeister/zookeeper与kafkadocker_kafka
所以基本初级以上的朋友看到这里都可以自己想到run起来的命令了。
需要注意的是,zookeeper内挂工作目录为/opt/zookeeper-3.4.9/data
kafka内挂工作目录为/kafka
#启动zookeeper
#docker run --name zookeeper -p 2181:2181 -v /docker/kafka/zoo_log:/opt/zookeeper-3.4.9/data -tid wurstmeister/zookeeper
#启动kafka
docker run --name kafka -p 9092:9092 -e KAFKA_ZOOKEEPER_CONNECT="10.45.151.4:2181" -e KAFKA_ADVERTISED_HOST_NAME="10.45.151.4" -e LANG="en_US.UTF-8" -v /docker/kafka/kfk_log:/kafka -v /var/run/docker.sock:/var/run/docker.sock -tid kafkadocker_kafka
到这里基本已经完成了kafka、zookeeper的集群容器创建。(单个broker)如果想建立多个broker的话。跟上面类似,只是我们需要修改的是docker-compose-single-broker.yml文件:
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
build: .
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
KAFKA_CREATE_TOPICS: "test:1:1"
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
#创建3个broker
#docker-compose scale kafka=3(3个broker)
#停止之前的容器
#docker-compose stop
#启动集群
#docker-compose -f docker-compose-single-broker.yml up
以上对kafka的集群已经全部介绍完毕。如何验证服务正常与否:
#进入容器
#docker exec -it kafka /bin/bash
#创建topic test2
bash-4.3# kafka-topics.sh --create --zookeeper 10.45.151.4:2181 --replication-factor 1 --partitions 1 --topic test2
Created topic "test2".
#查询topic
bash-4.3# kafka-topics.sh --list --zookeeper 10.45.151.4:2181
__consumer_offsets
hlht_specialprocessdata
kfk_callback_log
test
test1
test2
#发送消息,发送后ctrl+c退出即可
bash-4.3# kafka-console-producer.sh --broker-list 10.45.151.4:9092 --topic test2
**nihao woshi test2**
#读取消息
^Cbash-4.3# kafka-console-consumer.sh --zookeeper 10.45.151.4:2181 --topic test2 --from-beginning
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
**nihao woshi test2**
以上博文应该是能够达到运行需求。如果有哪里说的不到位的或者不清楚的朋友,可以在下方留言。