1.安装zookeeper
zookeeper是一个开源的分布式应用程序协调服务,主要为了解决分布式架构下的数据一致性问题。
对于Kafka来说,zookeeper存储了集群中所有的主题、配置、副本等元数据信息,因此在安装Kafka之前,需要先安装zookeeper。
(当然,新版本的kafka已经不再需要依赖zookeeper了,可以依靠自身的特定topic来存储元数据信息)
执行docker pull wurstmeister/zookeeper命令拉取镜像
执行如下命令,运行zookeeper
docker run -d --restart=always \
--log-opt max-size=100m --log-opt max-file=2 \
--name zookeeper \
-p 2181:2181 \
-v /etc/localtime:/etc/localtime \
wurstmeister/zookeeper
其中,-d表示后台执行,--restart=always表示总是开机启动,--log-opt为日志配置项,--name设置了容器名称,-p表示将容器和宿主机的端口进行映射,-v表示挂载卷,这里用来将虚拟机的时间同步到容器中
2.安装kafka
执行docker pull wurstmeister/kafka命令拉取镜像
执行如下命令,运行zookeeper
docker run -d --restart=always \
--log-opt max-size=100m --log-opt max-file=2 \
--name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.31.153:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.31.153:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-v /etc/localtime:/etc/localtime \
wurstmeister/kafka
其中,-e为设置环境变量,KAFKA_BROKER_ID设置Broker的ID,KAFKA_ZOOKEEPER_CONNECT设置zookeeper的地址,KAFKA_ADVERTISED_LISTENERS设置kafka发布到zookeeper供客户端使用的服务地址,KAFKA_LISTENERS设置kafka的监听地址,是真正建立连接的地址。这两个Listener配置项的关系可以参考这篇博客。
到这里,zookeeper和kafka都启动起来了。
3.测试
执行docker exec -it kafka /bin/bash进入 kafka 容器,并进入/opt/kafka_2.13-2.8.1/bin目录下
创建一个新Topic:
./kafka-topics.sh --create --bootstrap-server localhost:9092 --topic test-kafka --partitions 3 --replication-factor 1
查看Topic:
./kafka-topics.sh --list --bootstrap-server localhost:9092
./kafka-topics.sh --describe --topic test-kafka --bootstrap-server localhost:9092
生产消息:
./kafka-console-producer.sh --topic test-kafka --bootstrap-server localhost:9092
消费消息:(重开一个窗口执行)
./kafka-console-consumer.sh --topic test-kafka --bootstrap-server localhost:9092 --from-beginning
在生产者这边生产消息:
在消费者这边消费消息: