kafka官方文档:https://kafka.apache.org/documentation/#quickstart
我们都知道kafka3.0之前依赖于zookeeper(zk)管理其中的元数据,因此在安装kafka之前先安装zk。
docker pull wurstmeister/zookeeper
启动zk服务:
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper
安装kafka:目前kafka的docker镜像主要是两个版本:wurstmeister/kafka
和 bitnami/kafka
,本次选用的是后者。
# bitnami/kafka
docker pull bitnami/kafka:latest
# wurstmeister/kafka
docker pull wurstmeister/kafka
启动kafka服务:
sudo docker run -d --privileged=true \
--name kafka0 -p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=IP:2181 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://IP:9092 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
bitnami/kafka:latest
参数解释:
-d :后台运行
–privileged:使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
-p:暴露端口,-p 9092:9092 将容器内部的9092端口映射到宿主机的端口上。
– name 当前容器的名字。
KAFKA_BROKER_ID : broker的ID,这个ID是集群的标识,不能重复。
KAFKA_ZOOKEEPER_CONNECT:zookeeper的连接地址
KAFKA_LISTENERS:标识kafka服务运行在容器内的9092端口,因为没有指定host,所以是0.0.0.0标识所有的网络接口。
KAFKA_ADVERTISED_LISTENERS:kafka发布到zookeeper供客户端使用的服务地址。
ALLOW_PLAINTEXT_LISTENER :允许使用PLAINTEXT侦听器。
如果需要进行目录挂载,则使用下面的命令(注意一个服务只能挂载一个目录)
-v /usr/kafka/data:/bitnami/kafka/data
-v /usr/kafka/config:/bitnami/kafka/config
# /usr/kafka/data是宿主机的目录,/bitnami/kafka/data 是容器内的目录,data做数据映射,config做配置文件映射
按照上面的命令,我们只需要修改name
、port
和brokerid
就能搭建多个kafka服务,为了简单,zookeeper这里就只搭建了一台,而kafka搭建了三台,最终的集群规模如下:
name | port | brokerid |
---|---|---|
kafka0 | 9092 | 0 |
kafka1 | 9093 | 1 |
kafka2 | 9094 | 2 |
搭建完成后我们可以使用docker ps命令查看服务是否真的启动了:
sudo docker ps
如果你的服务启动异常,docker ps
不能查看到,这时候就需要我们进行问题排查了,可以查看docker容器日志:
命令格式:docker logs [OPTIONS] CONTAINER
OPTIONS说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
如:docker logs --since="2022-09-01" --tail=10 kafka0
启动完成之后,我们可以进入容器中使用命令验证
进入容器命令:
docker exec -it kafka /bin/bash
kafka的各个脚本都在:/opt/bitnami/kafka/bin
下面,如kafka-topics.sh
、kafka-console-consumer.sh
…
创建主题(可指定分区数、副本数…):
/opt/bitnami/kafka/bin/kafka-topics.sh --create --topic test-kafka0 --replication-factor 3 --partitions 3 --bootstrap-server IP:9092
# 参数解释
--create 表示创建
--topic 指定主题名称
--replication-factor 指定副本数
partitions 指定分区数
--bootstrap-server 连接kafka服务器
查看主题的描述信息(分区、副本、Leader…):
/opt/bitnami/kafka/bin/kafka-topics.sh --describe --topic test-kafka0 --bootstrap-server IP:9092
# 参数解释
--describe 表示查看描述信息
生产者生产消息:
/opt/bitnami/kafka/bin/kafka-console-producer.sh --topic test-kafka0 --bootstrap-server IP:9092
另外进入一个容器,如进入kafka1中进行消费:
/opt/bitnami/kafka/bin/kafka-console-consumer.sh --topic test-kafka0 --from-beginning --bootstrap-server IP:9092
其中,--from-beginning
表示会消费历史消息,如果不配置,只能消费消费者节点上线之后生产者发送的消息。